From 7d02b3d30bf53270736fe87ad8a182e204387057 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 5 Oct 2001 23:59:37 +0000 Subject: [PATCH] Major surgery to bring Whirled into line with the new PlaceConfig world order. Also moved stuff from whirled.client.test and whirled.server.test into whirled.test because it's silly having two separate test directories. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@401 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../whirled/client/SceneDirector.java | 8 +++-- .../threerings/whirled/data/DummyScene.java | 10 +++++-- .../whirled/data/EditableScene.java | 7 +---- .../com/threerings/whirled/data/Scene.java | 24 +++++++++------ .../whirled/server/SceneManager.java | 6 +++- .../whirled/server/SceneProvider.java | 30 +++++++++---------- .../whirled/server/SceneRegistry.java | 6 ++-- .../whirled/server/WhirledServer.java | 4 +-- .../server/persist/DummySceneRepository.java | 4 +-- .../whirled/DummyClientSceneRepository.java | 6 ++-- .../com/threerings/whirled/TestClient.java | 6 ++-- .../com/threerings/whirled/TestConfig.java | 20 +++++++++++++ .../threerings/whirled/TestController.java | 15 ++++++++++ 13 files changed, 97 insertions(+), 49 deletions(-) create mode 100644 tests/src/java/com/threerings/whirled/TestConfig.java create mode 100644 tests/src/java/com/threerings/whirled/TestController.java diff --git a/src/java/com/threerings/whirled/client/SceneDirector.java b/src/java/com/threerings/whirled/client/SceneDirector.java index 98359af8a..64e11b29c 100644 --- a/src/java/com/threerings/whirled/client/SceneDirector.java +++ b/src/java/com/threerings/whirled/client/SceneDirector.java @@ -1,5 +1,5 @@ // -// $Id: SceneDirector.java,v 1.4 2001/10/02 02:08:16 mdb Exp $ +// $Id: SceneDirector.java,v 1.5 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.client; @@ -11,6 +11,7 @@ import com.threerings.cocktail.cher.dobj.ObjectAccessException; import com.threerings.cocktail.party.client.LocationDirector; import com.threerings.cocktail.party.client.LocationObserver; +import com.threerings.cocktail.party.data.PlaceConfig; import com.threerings.cocktail.party.data.PlaceObject; import com.threerings.whirled.Log; @@ -101,11 +102,12 @@ public class SceneDirector /** * Called in response to a successful moveTo request. */ - public void handleMoveSucceeded (int invid, int placeId) + public void handleMoveSucceeded ( + int invid, int placeId, PlaceConfig config) { // our move request was successful, deal with subscribing to our // new place object - didMoveTo(placeId); + didMoveTo(placeId, config); // since we're committed to moving to the new scene, we'll // parallelize and go ahead and load up the new scene now rather diff --git a/src/java/com/threerings/whirled/data/DummyScene.java b/src/java/com/threerings/whirled/data/DummyScene.java index 7790322dd..7182ad7e8 100644 --- a/src/java/com/threerings/whirled/data/DummyScene.java +++ b/src/java/com/threerings/whirled/data/DummyScene.java @@ -1,8 +1,9 @@ // -// $Id: DummyScene.java,v 1.3 2001/09/21 00:21:40 mdb Exp $ +// $Id: DummyScene.java,v 1.4 2001/10/05 23:59:37 mdb Exp $ -package com.threerings.whirled.client.test; +package com.threerings.whirled.test; +import com.threerings.cocktail.party.data.PlaceConfig; import com.threerings.whirled.data.Scene; public class DummyScene implements Scene @@ -32,5 +33,10 @@ public class DummyScene implements Scene return null; } + public PlaceConfig getPlaceConfig () + { + return new TestConfig(); + } + protected int _sceneId; } diff --git a/src/java/com/threerings/whirled/data/EditableScene.java b/src/java/com/threerings/whirled/data/EditableScene.java index 59a625bf1..685ad2a7e 100644 --- a/src/java/com/threerings/whirled/data/EditableScene.java +++ b/src/java/com/threerings/whirled/data/EditableScene.java @@ -1,5 +1,5 @@ // -// $Id: EditableScene.java,v 1.2 2001/09/28 01:46:10 mdb Exp $ +// $Id: EditableScene.java,v 1.3 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.data; @@ -19,9 +19,4 @@ public interface EditableScene extends Scene * Updates the scene's version. */ public void setVersion (int version); - - /** - * Updates the scene's name. - */ - public void setName (String name); } diff --git a/src/java/com/threerings/whirled/data/Scene.java b/src/java/com/threerings/whirled/data/Scene.java index cc05de346..cf01aa730 100644 --- a/src/java/com/threerings/whirled/data/Scene.java +++ b/src/java/com/threerings/whirled/data/Scene.java @@ -1,17 +1,16 @@ // -// $Id: Scene.java,v 1.4 2001/09/21 02:30:35 mdb Exp $ +// $Id: Scene.java,v 1.5 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.data; +import com.threerings.cocktail.party.data.PlaceConfig; + /** * The base scene interface. This encapsulates the minimum information * needed about a scene in the Whirled system. */ public interface Scene { - /** Scene id to denote an unset or otherwise invalid scene id. */ - public static final int SID_INVALID = -1; - /** * Returns the scene's unique identifier. */ @@ -25,15 +24,22 @@ public interface Scene */ public int getVersion (); - /** - * Returns the scene's name. Every scene has a descriptive name. - */ - public String getName (); - /** * Returns the scene ids of all scenes that neighbor this scene. A * neighboring scene is one to which the user can traverse from this * scene and vice versa. */ public int[] getNeighborIds (); + + /** + * A scene is associated with a place on the server. Because the + * scenes are loaded on demand, the scene implementation must be able + * to provide a place config instance for each scene. This will allow + * the server to figure out what manager class to instantiate to + * manage the scene and all the client to figure out what controller + * class to instantiate to controll the scene. Additionally, it may + * contain runtime configuration information needed by the application + * using the Whirled services. + */ + public PlaceConfig getPlaceConfig (); } diff --git a/src/java/com/threerings/whirled/server/SceneManager.java b/src/java/com/threerings/whirled/server/SceneManager.java index f17bf3637..c96787ed7 100644 --- a/src/java/com/threerings/whirled/server/SceneManager.java +++ b/src/java/com/threerings/whirled/server/SceneManager.java @@ -1,5 +1,5 @@ // -// $Id: SceneManager.java,v 1.4 2001/09/05 01:08:30 shaper Exp $ +// $Id: SceneManager.java,v 1.5 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.server; @@ -11,6 +11,10 @@ import com.threerings.whirled.data.Scene; public class SceneManager extends PlaceManager { + /** + * Returns the scene object (not the scene distributed object) + * associated with this scene. + */ public Scene getScene () { return _scene; diff --git a/src/java/com/threerings/whirled/server/SceneProvider.java b/src/java/com/threerings/whirled/server/SceneProvider.java index 668b3b3c3..23bb5897c 100644 --- a/src/java/com/threerings/whirled/server/SceneProvider.java +++ b/src/java/com/threerings/whirled/server/SceneProvider.java @@ -1,12 +1,12 @@ // -// $Id: SceneProvider.java,v 1.2 2001/10/01 22:16:02 mdb Exp $ +// $Id: SceneProvider.java,v 1.3 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.server; import com.threerings.cocktail.cher.server.InvocationProvider; +import com.threerings.cocktail.cher.server.ServiceFailedException; -import com.threerings.cocktail.party.data.BodyObject; -import com.threerings.cocktail.party.data.PlaceObject; +import com.threerings.cocktail.party.data.*; import com.threerings.cocktail.party.server.LocationProvider; import com.threerings.whirled.Log; @@ -67,19 +67,19 @@ public class SceneProvider PlaceObject plobj = scmgr.getPlaceObject(); int ploid = plobj.getOid(); - // try doing the actual move - String rcode = LocationProvider.moveTo(source, ploid); + try { + // try doing the actual move + PlaceConfig config = LocationProvider.moveTo(source, ploid); - // if the move failed, let them know - if (!rcode.equals(SUCCESS)) { - sendResponse(source, invid, MOVE_FAILED_RESPONSE, rcode); - return; + // check to see if they need a newer version of the scene data + + // then send the moveTo response + sendResponse(source, invid, MOVE_SUCCEEDED_RESPONSE, + new Integer(ploid), config); + + } catch (ServiceFailedException sfe) { + sendResponse(source, invid, MOVE_FAILED_RESPONSE, + sfe.getMessage()); } - - // otherwise check to see if they need a newer version of the - // scene data - - sendResponse(source, invid, MOVE_SUCCEEDED_RESPONSE, - new Integer(ploid)); } } diff --git a/src/java/com/threerings/whirled/server/SceneRegistry.java b/src/java/com/threerings/whirled/server/SceneRegistry.java index fa4ccc64c..e3ec8a1a4 100644 --- a/src/java/com/threerings/whirled/server/SceneRegistry.java +++ b/src/java/com/threerings/whirled/server/SceneRegistry.java @@ -1,5 +1,5 @@ // -// $Id: SceneRegistry.java,v 1.3 2001/10/02 02:08:16 mdb Exp $ +// $Id: SceneRegistry.java,v 1.4 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.server; @@ -76,7 +76,7 @@ public class SceneRegistry * active. The supplied callback instance will be notified, on the * dobjmgr thread, when the scene has been resolved. If the scene is * already active, it will be notified immediately (before the call to - * resolveScene returns). + * {@link #resolveScene} returns). * * @param sceneId the id of the scene to resolve. * @param resolver a reference to a callback instance that will be @@ -161,7 +161,7 @@ public class SceneRegistry try { SceneManager scmgr = (SceneManager) - PartyServer.plreg.createPlace(SceneManager.class); + PartyServer.plreg.createPlace(scene.getPlaceConfig()); // configure the scene manager with references to useful // stuff; we'll somehow need to convey configuration diff --git a/src/java/com/threerings/whirled/server/WhirledServer.java b/src/java/com/threerings/whirled/server/WhirledServer.java index f7ce08506..7cae22caa 100644 --- a/src/java/com/threerings/whirled/server/WhirledServer.java +++ b/src/java/com/threerings/whirled/server/WhirledServer.java @@ -1,5 +1,5 @@ // -// $Id: WhirledServer.java,v 1.5 2001/10/02 02:08:16 mdb Exp $ +// $Id: WhirledServer.java,v 1.6 2001/10/05 23:59:36 mdb Exp $ package com.threerings.whirled.server; @@ -11,7 +11,7 @@ import com.threerings.cocktail.party.server.PartyServer; import com.threerings.whirled.Log; import com.threerings.whirled.server.persist.SceneRepository; -import com.threerings.whirled.server.test.DummySceneRepository; +import com.threerings.whirled.test.DummySceneRepository; /** * The whirled server extends the party server and provides access to diff --git a/src/java/com/threerings/whirled/server/persist/DummySceneRepository.java b/src/java/com/threerings/whirled/server/persist/DummySceneRepository.java index 259d4020a..c54a8c966 100644 --- a/src/java/com/threerings/whirled/server/persist/DummySceneRepository.java +++ b/src/java/com/threerings/whirled/server/persist/DummySceneRepository.java @@ -1,7 +1,7 @@ // -// $Id: DummySceneRepository.java,v 1.3 2001/09/21 03:15:02 mdb Exp $ +// $Id: DummySceneRepository.java,v 1.4 2001/10/05 23:59:37 mdb Exp $ -package com.threerings.whirled.server.test; +package com.threerings.whirled.test; import com.samskivert.io.PersistenceException; diff --git a/tests/src/java/com/threerings/whirled/DummyClientSceneRepository.java b/tests/src/java/com/threerings/whirled/DummyClientSceneRepository.java index 49cca6d69..a68b3d3b2 100644 --- a/tests/src/java/com/threerings/whirled/DummyClientSceneRepository.java +++ b/tests/src/java/com/threerings/whirled/DummyClientSceneRepository.java @@ -1,7 +1,7 @@ // -// $Id: DummyClientSceneRepository.java,v 1.1 2001/08/14 06:51:07 mdb Exp $ +// $Id: DummyClientSceneRepository.java,v 1.2 2001/10/05 23:59:37 mdb Exp $ -package com.threerings.whirled.client.test; +package com.threerings.whirled.test; import java.io.IOException; @@ -15,7 +15,7 @@ import com.threerings.whirled.util.NoSuchSceneException; * in fact it just creates new blank scenes when requested to load a scene * and does nothing when requested to save one. */ -public class DummySceneRepository implements SceneRepository +public class DummyClientSceneRepository implements SceneRepository { // documentation inherited public Scene loadScene (int sceneId) diff --git a/tests/src/java/com/threerings/whirled/TestClient.java b/tests/src/java/com/threerings/whirled/TestClient.java index d744b5700..f9b3f70a8 100644 --- a/tests/src/java/com/threerings/whirled/TestClient.java +++ b/tests/src/java/com/threerings/whirled/TestClient.java @@ -1,7 +1,7 @@ // -// $Id: TestClient.java,v 1.3 2001/10/01 22:16:02 mdb Exp $ +// $Id: TestClient.java,v 1.4 2001/10/05 23:59:37 mdb Exp $ -package com.threerings.whirled.client.test; +package com.threerings.whirled.test; import com.samskivert.util.Config; import com.samskivert.util.Queue; @@ -29,7 +29,7 @@ public class TestClient // create the handles for our various services _config = new Config(); _client = new Client(creds, this); - _screp = new DummySceneRepository(); + _screp = new DummyClientSceneRepository(); _occmgr = new OccupantManager(_ctx); _scdir = new SceneDirector(_ctx, _screp); diff --git a/tests/src/java/com/threerings/whirled/TestConfig.java b/tests/src/java/com/threerings/whirled/TestConfig.java new file mode 100644 index 000000000..d465c4e81 --- /dev/null +++ b/tests/src/java/com/threerings/whirled/TestConfig.java @@ -0,0 +1,20 @@ +// +// $Id: TestConfig.java,v 1.1 2001/10/05 23:59:37 mdb Exp $ + +package com.threerings.whirled.test; + +import com.threerings.cocktail.party.data.PlaceConfig; +import com.threerings.whirled.server.SceneManager; + +public class TestConfig extends PlaceConfig +{ + public Class getControllerClass () + { + return TestController.class; + } + + public String getManagerClassName () + { + return SceneManager.class.getName(); + } +} diff --git a/tests/src/java/com/threerings/whirled/TestController.java b/tests/src/java/com/threerings/whirled/TestController.java new file mode 100644 index 000000000..586cd6951 --- /dev/null +++ b/tests/src/java/com/threerings/whirled/TestController.java @@ -0,0 +1,15 @@ +// +// $Id: TestController.java,v 1.1 2001/10/05 23:59:37 mdb Exp $ + +package com.threerings.whirled.test; + +import com.threerings.cocktail.party.client.*; + +public class TestController extends PlaceController +{ + protected PlaceView createPlaceView () + { + // nothing doing + return null; + } +}