* Add a static method to init and run a PresentsServer given guice modules with its configuration.

* Rename PrefixServer.Module classes to PrefixModule.  They all implement guice's Module, and it's
  hard to pass a class around as its interface if they share a name.



git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6303 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Charlie Groves
2010-11-23 22:19:01 +00:00
parent 3ddc2f670c
commit 8e5865995c
8 changed files with 42 additions and 56 deletions
@@ -21,7 +21,6 @@
package com.threerings.crowd.server; package com.threerings.crowd.server;
import com.google.inject.Guice;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Singleton; import com.google.inject.Singleton;
@@ -36,8 +35,6 @@ import com.threerings.presents.server.PresentsServer;
import com.threerings.crowd.chat.server.ChatProvider; import com.threerings.crowd.chat.server.ChatProvider;
import static com.threerings.crowd.Log.log;
/** /**
* Extends the Presents server configuring extensions for Crowd services. * Extends the Presents server configuring extensions for Crowd services.
*/ */
@@ -45,7 +42,7 @@ import static com.threerings.crowd.Log.log;
public class CrowdServer extends PresentsServer public class CrowdServer extends PresentsServer
{ {
/** Configures dependencies needed by the Crowd services. */ /** Configures dependencies needed by the Crowd services. */
public static class Module extends PresentsServer.Module public static class CrowdModule extends PresentsModule
{ {
@Override protected void configure () { @Override protected void configure () {
super.configure(); super.configure();
@@ -77,14 +74,7 @@ public class CrowdServer extends PresentsServer
public static void main (String[] args) public static void main (String[] args)
{ {
Injector injector = Guice.createInjector(new Module()); runServer(new CrowdModule(), new PresentsServerModule(CrowdServer.class));
CrowdServer server = injector.getInstance(CrowdServer.class);
try {
server.init(injector);
server.run();
} catch (Exception e) {
log.warning("Unable to initialize server.", e);
}
} }
/** Handles the creation and tracking of place managers. */ /** Handles the creation and tracking of place managers. */
@@ -25,6 +25,7 @@ import com.google.inject.AbstractModule;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import com.samskivert.util.Invoker; import com.samskivert.util.Invoker;
@@ -63,7 +64,7 @@ import static com.threerings.presents.Log.log;
public class PresentsServer public class PresentsServer
{ {
/** Configures dependencies needed by the Presents services. */ /** Configures dependencies needed by the Presents services. */
public static class Module extends AbstractModule public static class PresentsModule extends AbstractModule
{ {
@Override protected void configure () { @Override protected void configure () {
bindInvokers(); bindInvokers();
@@ -77,18 +78,35 @@ public class PresentsServer
/** /**
* Binds just the invokers so this can be overridden if desired. * Binds just the invokers so this can be overridden if desired.
*/ */
protected void bindInvokers() { protected void bindInvokers () {
bind(Invoker.class).annotatedWith(MainInvoker.class).to(PresentsInvoker.class); bind(Invoker.class).annotatedWith(MainInvoker.class).to(PresentsInvoker.class);
bind(Invoker.class).annotatedWith(AuthInvoker.class).to(PresentsAuthInvoker.class); bind(Invoker.class).annotatedWith(AuthInvoker.class).to(PresentsAuthInvoker.class);
} }
} }
/** /**
* The default entry point for the server. * Binds PresentsServer to a particular class.
*/ */
public static void main (String[] args) public static class PresentsServerModule extends AbstractModule
{ {
Injector injector = Guice.createInjector(new Module()); public PresentsServerModule (Class<? extends PresentsServer> serverType) {
_serverType = serverType;
}
@Override protected void configure () {
bind(PresentsServer.class).to(_serverType);
}
protected final Class<? extends PresentsServer> _serverType;
}
/**
* Inits and runs the PresentsServer bound in the given modules. This blocks until the server
* is shut down.
*/
public static void runServer (Module... modules)
{
Injector injector = Guice.createInjector(modules);
PresentsServer server = injector.getInstance(PresentsServer.class); PresentsServer server = injector.getInstance(PresentsServer.class);
try { try {
// initialize the server // initialize the server
@@ -117,6 +135,14 @@ public class PresentsServer
} }
} }
/**
* The default entry point for the server.
*/
public static void main (String[] args)
{
runServer(new PresentsModule());
}
/** Legacy static reference to the main distributed object manager. Don't use this. If you're /** Legacy static reference to the main distributed object manager. Don't use this. If you're
* writing a game, use {@link PlaceManager#_omgr}. */ * writing a game, use {@link PlaceManager#_omgr}. */
@Deprecated public static PresentsDObjectMgr omgr; @Deprecated public static PresentsDObjectMgr omgr;
@@ -133,7 +159,8 @@ public class PresentsServer
{ {
// output general system information // output general system information
SystemInfo si = new SystemInfo(); SystemInfo si = new SystemInfo();
log.info("Starting up server", "os", si.osToString(), "jvm", si.jvmToString()); log.info("Starting up", "server", getClass().getSimpleName(), "os", si.osToString(),
"jvm", si.jvmToString());
registerSignalHandlers(injector); registerSignalHandlers(injector);
@@ -21,9 +21,6 @@
package com.threerings.presents.server; package com.threerings.presents.server;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.samskivert.util.StringUtil; import com.samskivert.util.StringUtil;
import com.threerings.util.MessageBundle; import com.threerings.util.MessageBundle;
@@ -39,7 +36,7 @@ import static com.threerings.presents.Log.log;
public class Rejector extends PresentsServer public class Rejector extends PresentsServer
{ {
/** Configures dependencies needed by the Rejector. */ /** Configures dependencies needed by the Rejector. */
public static class Module extends PresentsServer.Module public static class RejectorModule extends PresentsModule
{ {
@Override protected void configure () { @Override protected void configure () {
super.configure(); super.configure();
@@ -68,14 +65,7 @@ public class Rejector extends PresentsServer
_errmsg = MessageBundle.tcompose(_errmsg, eargs); _errmsg = MessageBundle.tcompose(_errmsg, eargs);
} }
Injector injector = Guice.createInjector(new Module()); runServer(new RejectorModule(), new PresentsServerModule(Rejector.class));
Rejector server = injector.getInstance(Rejector.class);
try {
server.init(injector);
server.run();
} catch (Exception e) {
log.warning("Unable to initialize server.", e);
}
} }
/** /**
@@ -70,7 +70,7 @@ public class RegistryTester
*/ */
public static void main (String[] args) public static void main (String[] args)
{ {
Injector injector = Guice.createInjector(new TestServer.Module()); Injector injector = Guice.createInjector(new TestServer.PresentsModule());
TestServer server = injector.getInstance(TestServer.class); TestServer server = injector.getInstance(TestServer.class);
RegistryTester tester = injector.getInstance(RegistryTester.class); RegistryTester tester = injector.getInstance(RegistryTester.class);
@@ -41,7 +41,7 @@ public class TestServer extends PresentsServer
*/ */
public static void main (String[] args) public static void main (String[] args)
{ {
Injector injector = Guice.createInjector(new Module()); Injector injector = Guice.createInjector(new PresentsModule());
TestServer server = injector.getInstance(TestServer.class); TestServer server = injector.getInstance(TestServer.class);
try { try {
server.init(injector); server.init(injector);
@@ -3,13 +3,10 @@
package com.threerings.crowd.server; package com.threerings.crowd.server;
import com.google.inject.Guice;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.threerings.crowd.data.JabberConfig; import com.threerings.crowd.data.JabberConfig;
import static com.threerings.crowd.Log.log;
/** /**
* A basic server that creates a single room and sticks everyone in it where they can chat with one * A basic server that creates a single room and sticks everyone in it where they can chat with one
* another. * another.
@@ -18,15 +15,7 @@ public class JabberServer extends CrowdServer
{ {
public static void main (String[] args) public static void main (String[] args)
{ {
Injector injector = Guice.createInjector(new Module()); runServer(new CrowdModule(), new PresentsServerModule(JabberServer.class));
JabberServer server = injector.getInstance(JabberServer.class);
try {
server.init(injector);
server.run();
} catch (Exception e) {
log.warning("Unable to initialize server.", e);
}
} }
@Override // from CrowdServer @Override // from CrowdServer
@@ -14,7 +14,7 @@ public class PresentsTestBase
protected <T> T getInstance (Class<T> clazz) protected <T> T getInstance (Class<T> clazz)
{ {
if (_injector == null) { if (_injector == null) {
_injector = Guice.createInjector(new PresentsServer.Module()); _injector = Guice.createInjector(new PresentsServer.PresentsModule());
} }
return _injector.getInstance(clazz); return _injector.getInstance(clazz);
} }
@@ -21,13 +21,10 @@
package com.threerings.presents.server; package com.threerings.presents.server;
import com.google.inject.Guice;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.threerings.presents.data.TestObject; import com.threerings.presents.data.TestObject;
import static com.threerings.presents.Log.log;
public class TestServer extends PresentsServer public class TestServer extends PresentsServer
{ {
public static TestObject testobj; public static TestObject testobj;
@@ -52,13 +49,6 @@ public class TestServer extends PresentsServer
public static void main (String[] args) public static void main (String[] args)
{ {
Injector injector = Guice.createInjector(new Module()); runServer(new PresentsModule(), new PresentsServerModule(TestServer.class));
TestServer server = injector.getInstance(TestServer.class);
try {
server.init(injector);
server.run();
} catch (Exception e) {
log.warning("Unable to initialize server.", e);
}
} }
} }