From 10bdbaa2f3db4105b5a06cd6bae0c7d92a6a5945 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Sun, 29 Jun 2008 14:17:12 +0000 Subject: [PATCH] Inject the SceneRegistry; nix implicit depends. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@639 c613c5cb-e716-0410-b11b-feb51c14d237 --- .../server/AbstractSceneMoveHandler.java | 6 +- .../whirled/server/SceneManager.java | 12 +++- .../whirled/server/SceneMoveHandler.java | 9 +-- .../whirled/server/SceneRegistry.java | 63 +++++++++++-------- .../whirled/server/WhirledServer.java | 15 +---- 5 files changed, 57 insertions(+), 48 deletions(-) diff --git a/src/java/com/threerings/whirled/server/AbstractSceneMoveHandler.java b/src/java/com/threerings/whirled/server/AbstractSceneMoveHandler.java index 137df85e..51841023 100644 --- a/src/java/com/threerings/whirled/server/AbstractSceneMoveHandler.java +++ b/src/java/com/threerings/whirled/server/AbstractSceneMoveHandler.java @@ -26,6 +26,7 @@ import com.threerings.presents.data.InvocationMarshaller; import com.threerings.presents.server.InvocationException; import com.threerings.crowd.data.BodyObject; +import com.threerings.crowd.server.LocationManager; import com.threerings.whirled.client.SceneService; import com.threerings.whirled.data.SceneCodes; @@ -40,8 +41,10 @@ import static com.threerings.whirled.Log.log; public abstract class AbstractSceneMoveHandler implements SceneRegistry.ResolutionListener { - public AbstractSceneMoveHandler (BodyObject body, InvocationService.InvocationListener listener) + public AbstractSceneMoveHandler (LocationManager locman, BodyObject body, + InvocationService.InvocationListener listener) { + _locman = locman; _body = body; _listener = listener; } @@ -80,6 +83,7 @@ public abstract class AbstractSceneMoveHandler protected abstract void effectSceneMove (SceneManager scmgr) throws InvocationException; + protected LocationManager _locman; protected BodyObject _body; protected InvocationService.InvocationListener _listener; } diff --git a/src/java/com/threerings/whirled/server/SceneManager.java b/src/java/com/threerings/whirled/server/SceneManager.java index 1789704e..f60ee3cc 100644 --- a/src/java/com/threerings/whirled/server/SceneManager.java +++ b/src/java/com/threerings/whirled/server/SceneManager.java @@ -21,11 +21,14 @@ package com.threerings.whirled.server; +import com.google.inject.Inject; + import com.samskivert.jdbc.WriteOnlyUnit; import com.samskivert.util.Invoker; +import com.threerings.presents.annotation.MainInvoker; + import com.threerings.crowd.data.Place; -import com.threerings.crowd.server.CrowdServer; import com.threerings.crowd.server.PlaceManager; import com.threerings.whirled.data.Scene; @@ -118,7 +121,7 @@ public class SceneManager extends PlaceManager // Wait until us and all of our subclasses have completely finished running didStartup // prior to registering the scene as being ready. - CrowdServer.omgr.postRunnable(new Runnable() { + _omgr.postRunnable(new Runnable() { public void run () { _screg.sceneManagerDidStart(SceneManager.this); } @@ -157,7 +160,7 @@ public class SceneManager extends PlaceManager // and apply and store it in the repository if (isPersistent()) { - WhirledServer.invoker.postUnit(new WriteOnlyUnit("recordUpdate(" + update + ")") { + _invoker.postUnit(new WriteOnlyUnit("recordUpdate(" + update + ")") { public void invokePersist () throws Exception { _screg.getSceneRepository().applyAndRecordUpdate(_scene.getSceneModel(), update); } @@ -193,4 +196,7 @@ public class SceneManager extends PlaceManager /** A reference to the scene registry so that we can call back to it when we're fully * initialized. */ protected SceneRegistry _screg; + + /** The invoker on which we'll do our database operations. */ + @Inject protected @MainInvoker Invoker _invoker; } diff --git a/src/java/com/threerings/whirled/server/SceneMoveHandler.java b/src/java/com/threerings/whirled/server/SceneMoveHandler.java index 07902be2..2fc34f15 100644 --- a/src/java/com/threerings/whirled/server/SceneMoveHandler.java +++ b/src/java/com/threerings/whirled/server/SceneMoveHandler.java @@ -26,7 +26,7 @@ import com.threerings.presents.server.InvocationException; import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.PlaceConfig; -import com.threerings.crowd.server.CrowdServer; +import com.threerings.crowd.server.LocationManager; import com.threerings.whirled.client.SceneService; import com.threerings.whirled.data.SceneCodes; @@ -38,9 +38,10 @@ import com.threerings.whirled.data.SceneUpdate; */ public class SceneMoveHandler extends AbstractSceneMoveHandler { - public SceneMoveHandler (BodyObject body, int sceneVer, SceneService.SceneMoveListener listener) + public SceneMoveHandler (LocationManager locman, BodyObject body, int sceneVer, + SceneService.SceneMoveListener listener) { - super(body, listener); + super(locman, body, listener); _version = sceneVer; } @@ -50,7 +51,7 @@ public class SceneMoveHandler extends AbstractSceneMoveHandler { // move to location associated with this scene int ploid = scmgr.getPlaceObject().getOid(); - PlaceConfig config = CrowdServer.locman.moveTo(_body, ploid); + PlaceConfig config = _locman.moveTo(_body, ploid); // check to see if they need a newer version of the scene data SceneService.SceneMoveListener listener = (SceneService.SceneMoveListener)_listener; diff --git a/src/java/com/threerings/whirled/server/SceneRegistry.java b/src/java/com/threerings/whirled/server/SceneRegistry.java index 85755c9b..99341451 100644 --- a/src/java/com/threerings/whirled/server/SceneRegistry.java +++ b/src/java/com/threerings/whirled/server/SceneRegistry.java @@ -21,11 +21,18 @@ package com.threerings.whirled.server; -import java.util.ArrayList; +import java.util.List; + +import com.google.common.collect.Lists; +import com.google.inject.Inject; +import com.google.inject.Singleton; import com.samskivert.jdbc.RepositoryUnit; -import com.samskivert.util.HashIntMap; +import com.samskivert.util.IntMaps; +import com.samskivert.util.IntMap; +import com.samskivert.util.Invoker; +import com.threerings.presents.annotation.MainInvoker; import com.threerings.presents.data.ClientObject; import com.threerings.presents.data.InvocationMarshaller; import com.threerings.presents.server.InvocationException; @@ -33,7 +40,7 @@ import com.threerings.presents.server.InvocationManager; import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.PlaceConfig; -import com.threerings.crowd.server.CrowdServer; +import com.threerings.crowd.server.LocationManager; import com.threerings.crowd.server.PlaceManager; import com.threerings.crowd.server.PlaceRegistry; @@ -61,6 +68,7 @@ import static com.threerings.whirled.Log.log; * *

Note: All access to the scene registry should take place from the dobjmgr thread. */ +@Singleton public class SceneRegistry implements SceneCodes, SceneProvider { @@ -97,16 +105,10 @@ public class SceneRegistry } /** - * Constructs a scene registry, instructing it to load and store scenes using the supplied - * scene repository. + * Constructs a scene registry. */ - public SceneRegistry (InvocationManager invmgr, SceneRepository screp, - SceneFactory scfact, ConfigFactory confact) + @Inject public SceneRegistry (InvocationManager invmgr) { - _screp = screp; - _scfact = scfact; - _confact = confact; - // register our scene service invmgr.registerDispatcher(new SceneDispatcher(this), SceneCodes.WHIRLED_GROUP); } @@ -166,7 +168,7 @@ public class SceneRegistry // otherwise we have to load the scene from the repository final int fsceneId = sceneId; - WhirledServer.invoker.postUnit(new RepositoryUnit("resolveScene(" + sceneId + ")") { + _invoker.postUnit(new RepositoryUnit("resolveScene(" + sceneId + ")") { public void invokePersist () throws Exception { _model = _screp.loadSceneModel(fsceneId); _updates = _screp.loadUpdates(fsceneId); @@ -187,7 +189,7 @@ public class SceneRegistry SceneService.SceneMoveListener listener) { BodyObject body = (BodyObject)caller; - resolveScene(sceneId, new SceneMoveHandler(body, sceneVer, listener)); + resolveScene(sceneId, new SceneMoveHandler(_locman, body, sceneVer, listener)); } /** @@ -197,7 +199,7 @@ public class SceneRegistry public void moveBody (BodyObject source, int sceneId) { // first remove them from their old place - CrowdServer.locman.leaveOccupiedPlace(source); + _locman.leaveOccupiedPlace(source); // then send a forced move notification SceneSender.forcedMove(source, sceneId); @@ -210,7 +212,7 @@ public class SceneRegistry public void leaveOccupiedScene (BodyObject source) { // remove them from their occupied place (clears out scene info as well) - CrowdServer.locman.leaveOccupiedPlace(source); + _locman.leaveOccupiedPlace(source); } /** @@ -220,11 +222,11 @@ public class SceneRegistry */ protected boolean addResolutionListener (int sceneId, ResolutionListener rl) { - ArrayList penders = _penders.get(sceneId); + List penders = _penders.get(sceneId); boolean newList = false; if (penders == null) { - _penders.put(sceneId, penders = new ArrayList()); + _penders.put(sceneId, penders = Lists.newArrayList()); newList = true; } @@ -247,8 +249,7 @@ public class SceneRegistry final Scene scene = _scfact.createScene(model, _confact.createPlaceConfig(model)); // now create our scene manager - CrowdServer.plreg.createPlace( - scene.getPlaceConfig(), new PlaceRegistry.PreStartupHook() { + _plreg.createPlace(scene.getPlaceConfig(), new PlaceRegistry.PreStartupHook() { public void invoke (PlaceManager pmgr) { ((SceneManager)pmgr).setSceneData(scene, updates, SceneRegistry.this); } @@ -274,7 +275,7 @@ public class SceneRegistry } // alas things didn't work out, notify our penders - ArrayList penders = _penders.remove(sceneId); + List penders = _penders.remove(sceneId); if (penders != null) { for (ResolutionListener rl : penders) { try { @@ -299,7 +300,7 @@ public class SceneRegistry log.debug("Registering scene manager", "scid", sceneId, "scmgr", scmgr); // now notify any penders - ArrayList penders = _penders.remove(sceneId); + List penders = _penders.remove(sceneId); if (penders != null) { for (ResolutionListener rl : penders) { try { @@ -325,18 +326,26 @@ public class SceneRegistry } /** The entity from which we load scene models. */ - protected SceneRepository _screp; + @Inject protected SceneRepository _screp; /** Used to generate place configs for our scenes. */ - protected ConfigFactory _confact; + @Inject protected ConfigFactory _confact; /** The entity via which we create scene instances from scene models. */ - protected SceneFactory _scfact; + @Inject protected SceneFactory _scfact; + + /** The invoker on which we do database operations. */ + @Inject protected @MainInvoker Invoker _invoker; + + /** Provides access to place managers. */ + @Inject protected PlaceRegistry _plreg; + + /** Provides location services. */ + @Inject protected LocationManager _locman; /** A mapping from scene ids to scene managers. */ - protected HashIntMap _scenemgrs = new HashIntMap(); + protected IntMap _scenemgrs = IntMaps.newHashIntMap(); /** The table of pending resolution listeners. */ - protected HashIntMap> _penders = - new HashIntMap>(); + protected IntMap> _penders = IntMaps.newHashIntMap(); } diff --git a/src/java/com/threerings/whirled/server/WhirledServer.java b/src/java/com/threerings/whirled/server/WhirledServer.java index 89ea184f..6001d302 100644 --- a/src/java/com/threerings/whirled/server/WhirledServer.java +++ b/src/java/com/threerings/whirled/server/WhirledServer.java @@ -21,6 +21,7 @@ package com.threerings.whirled.server; +import com.google.inject.Inject; import com.google.inject.Injector; import com.threerings.util.Name; @@ -52,9 +53,6 @@ public abstract class WhirledServer extends CrowdServer } } - /** The scene registry. */ - public static SceneRegistry screg; - @Override // from CrowdServer public void init (Injector injector) throws Exception @@ -62,7 +60,7 @@ public abstract class WhirledServer extends CrowdServer super.init(injector); // configure the client to use our whirled client - clmgr.setClientFactory(new ClientFactory() { + _clmgr.setClientFactory(new ClientFactory() { public Class getClientClass (AuthRequest areq) { return WhirledClient.class; } @@ -70,14 +68,5 @@ public abstract class WhirledServer extends CrowdServer return ClientResolver.class; } }); - - // create our scene registry - screg = createSceneRegistry(); } - - /** - * Creates the scene registry to be used on this server. - */ - protected abstract SceneRegistry createSceneRegistry () - throws Exception; }