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; + } +}