diff --git a/src/main/java/com/threerings/crowd/server/CrowdServer.java b/src/main/java/com/threerings/crowd/server/CrowdServer.java index c361d2034..107ed508e 100644 --- a/src/main/java/com/threerings/crowd/server/CrowdServer.java +++ b/src/main/java/com/threerings/crowd/server/CrowdServer.java @@ -21,7 +21,6 @@ package com.threerings.crowd.server; -import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; @@ -36,8 +35,6 @@ import com.threerings.presents.server.PresentsServer; import com.threerings.crowd.chat.server.ChatProvider; -import static com.threerings.crowd.Log.log; - /** * 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 { /** Configures dependencies needed by the Crowd services. */ - public static class Module extends PresentsServer.Module + public static class CrowdModule extends PresentsModule { @Override protected void configure () { super.configure(); @@ -77,14 +74,7 @@ public class CrowdServer extends PresentsServer public static void main (String[] args) { - Injector injector = Guice.createInjector(new Module()); - CrowdServer server = injector.getInstance(CrowdServer.class); - try { - server.init(injector); - server.run(); - } catch (Exception e) { - log.warning("Unable to initialize server.", e); - } + runServer(new CrowdModule(), new PresentsServerModule(CrowdServer.class)); } /** Handles the creation and tracking of place managers. */ diff --git a/src/main/java/com/threerings/presents/server/PresentsServer.java b/src/main/java/com/threerings/presents/server/PresentsServer.java index 93450a692..b8606225f 100644 --- a/src/main/java/com/threerings/presents/server/PresentsServer.java +++ b/src/main/java/com/threerings/presents/server/PresentsServer.java @@ -25,6 +25,7 @@ import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; +import com.google.inject.Module; import com.google.inject.Singleton; import com.samskivert.util.Invoker; @@ -63,7 +64,7 @@ import static com.threerings.presents.Log.log; public class PresentsServer { /** Configures dependencies needed by the Presents services. */ - public static class Module extends AbstractModule + public static class PresentsModule extends AbstractModule { @Override protected void configure () { bindInvokers(); @@ -77,18 +78,35 @@ public class PresentsServer /** * 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(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 serverType) { + _serverType = serverType; + } + + @Override protected void configure () { + bind(PresentsServer.class).to(_serverType); + } + + protected final Class _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); try { // 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 * writing a game, use {@link PlaceManager#_omgr}. */ @Deprecated public static PresentsDObjectMgr omgr; @@ -133,7 +159,8 @@ public class PresentsServer { // output general system information 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); diff --git a/src/main/java/com/threerings/presents/server/Rejector.java b/src/main/java/com/threerings/presents/server/Rejector.java index d882d7a43..ee56fee4b 100644 --- a/src/main/java/com/threerings/presents/server/Rejector.java +++ b/src/main/java/com/threerings/presents/server/Rejector.java @@ -21,9 +21,6 @@ package com.threerings.presents.server; -import com.google.inject.Guice; -import com.google.inject.Injector; - import com.samskivert.util.StringUtil; import com.threerings.util.MessageBundle; @@ -39,7 +36,7 @@ import static com.threerings.presents.Log.log; public class Rejector extends PresentsServer { /** Configures dependencies needed by the Rejector. */ - public static class Module extends PresentsServer.Module + public static class RejectorModule extends PresentsModule { @Override protected void configure () { super.configure(); @@ -68,14 +65,7 @@ public class Rejector extends PresentsServer _errmsg = MessageBundle.tcompose(_errmsg, eargs); } - Injector injector = Guice.createInjector(new Module()); - Rejector server = injector.getInstance(Rejector.class); - try { - server.init(injector); - server.run(); - } catch (Exception e) { - log.warning("Unable to initialize server.", e); - } + runServer(new RejectorModule(), new PresentsServerModule(Rejector.class)); } /** diff --git a/src/test/java/com/threerings/bureau/server/RegistryTester.java b/src/test/java/com/threerings/bureau/server/RegistryTester.java index 00e7e1e6f..905f8bab4 100644 --- a/src/test/java/com/threerings/bureau/server/RegistryTester.java +++ b/src/test/java/com/threerings/bureau/server/RegistryTester.java @@ -70,7 +70,7 @@ public class RegistryTester */ 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); RegistryTester tester = injector.getInstance(RegistryTester.class); diff --git a/src/test/java/com/threerings/bureau/server/TestServer.java b/src/test/java/com/threerings/bureau/server/TestServer.java index 24f3f6054..89b3439ae 100644 --- a/src/test/java/com/threerings/bureau/server/TestServer.java +++ b/src/test/java/com/threerings/bureau/server/TestServer.java @@ -41,7 +41,7 @@ public class TestServer extends PresentsServer */ public static void main (String[] args) { - Injector injector = Guice.createInjector(new Module()); + Injector injector = Guice.createInjector(new PresentsModule()); TestServer server = injector.getInstance(TestServer.class); try { server.init(injector); diff --git a/src/test/java/com/threerings/crowd/server/JabberServer.java b/src/test/java/com/threerings/crowd/server/JabberServer.java index 162cf157b..c61473600 100644 --- a/src/test/java/com/threerings/crowd/server/JabberServer.java +++ b/src/test/java/com/threerings/crowd/server/JabberServer.java @@ -3,13 +3,10 @@ package com.threerings.crowd.server; -import com.google.inject.Guice; import com.google.inject.Injector; 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 * another. @@ -18,15 +15,7 @@ public class JabberServer extends CrowdServer { public static void main (String[] args) { - Injector injector = Guice.createInjector(new Module()); - JabberServer server = injector.getInstance(JabberServer.class); - - try { - server.init(injector); - server.run(); - } catch (Exception e) { - log.warning("Unable to initialize server.", e); - } + runServer(new CrowdModule(), new PresentsServerModule(JabberServer.class)); } @Override // from CrowdServer diff --git a/src/test/java/com/threerings/presents/server/PresentsTestBase.java b/src/test/java/com/threerings/presents/server/PresentsTestBase.java index 99cab1c9b..dafc2ead0 100644 --- a/src/test/java/com/threerings/presents/server/PresentsTestBase.java +++ b/src/test/java/com/threerings/presents/server/PresentsTestBase.java @@ -14,7 +14,7 @@ public class PresentsTestBase protected T getInstance (Class clazz) { if (_injector == null) { - _injector = Guice.createInjector(new PresentsServer.Module()); + _injector = Guice.createInjector(new PresentsServer.PresentsModule()); } return _injector.getInstance(clazz); } diff --git a/src/test/java/com/threerings/presents/server/TestServer.java b/src/test/java/com/threerings/presents/server/TestServer.java index 19fee8c46..935f5df84 100644 --- a/src/test/java/com/threerings/presents/server/TestServer.java +++ b/src/test/java/com/threerings/presents/server/TestServer.java @@ -21,13 +21,10 @@ package com.threerings.presents.server; -import com.google.inject.Guice; import com.google.inject.Injector; import com.threerings.presents.data.TestObject; -import static com.threerings.presents.Log.log; - public class TestServer extends PresentsServer { public static TestObject testobj; @@ -52,13 +49,6 @@ public class TestServer extends PresentsServer public static void main (String[] args) { - Injector injector = Guice.createInjector(new Module()); - TestServer server = injector.getInstance(TestServer.class); - try { - server.init(injector); - server.run(); - } catch (Exception e) { - log.warning("Unable to initialize server.", e); - } + runServer(new PresentsModule(), new PresentsServerModule(TestServer.class)); } }