Revision: 465 http://skycastle.svn.sourceforge.net/skycastle/?rev=465&view=rev Author: zzorn Date: 2008-04-18 16:13:25 -0700 (Fri, 18 Apr 2008) Log Message: ----------- Working on GameContext issue. Modified Paths: -------------- trunk/skycastle/modules/client/src/main/java/org/skycastle/client/SkycastleClient.java trunk/skycastle/modules/core/src/main/java/org/skycastle/core/GameContext.java trunk/skycastle/modules/core/src/main/java/org/skycastle/core/ServerSideContext.java trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectActionsTest.java trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java trunk/skycastle/modules/core/src/test/java/org/skycastle/core/geometry/space/grid/GridTest.java trunk/skycastle/modules/server/src/main/java/org/skycastle/server/SkycastleServer.java trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/example/UiDemo.java Modified: trunk/skycastle/modules/client/src/main/java/org/skycastle/client/SkycastleClient.java =================================================================== --- trunk/skycastle/modules/client/src/main/java/org/skycastle/client/SkycastleClient.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/client/src/main/java/org/skycastle/client/SkycastleClient.java 2008-04-18 23:13:25 UTC (rev 465) @@ -65,7 +65,7 @@ LOGGER.log( Level.INFO, "Skycastle Client starting up." ); // Initialize static context variable - GameContext.setGameObjectContext( new ClientContext() ); + GameContext.setGameObjectContextOnClient( new ClientContext() ); // Create object that contains client side services final ClientObject clientObject = createClientObject(); Modified: trunk/skycastle/modules/core/src/main/java/org/skycastle/core/GameContext.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/core/GameContext.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/core/GameContext.java 2008-04-18 23:13:25 UTC (rev 465) @@ -1,5 +1,8 @@ package org.skycastle.core; +import com.sun.sgs.app.AppContext; +import com.sun.sgs.app.DataManager; +import com.sun.sgs.app.NameNotBoundException; import org.skycastle.util.ParameterChecker; /** @@ -15,9 +18,14 @@ //====================================================================== // Private Fields - private static GameObjectContext myGameObjectContext = null; + private static GameObjectContext myClientGameObjectContext = null; //====================================================================== + // Private Constants + + private static final String SERVER_SIDE_GAME_CONTEXT_BINDING_NAME = "ServerSideGameContext"; + + //====================================================================== // Public Methods //---------------------------------------------------------------------- @@ -29,31 +37,52 @@ */ public static GameObjectContext getGameObjectContext() { - if ( myGameObjectContext == null ) + if ( myClientGameObjectContext == null ) { - throw new IllegalStateException( "No GameObjectContext has been specified yet for GameContext" ); + // On the client side the setGameObjectContextOnClient is called at the beginning, so we are + // either on the server, or in some unit test where someone forgot to call setGameObjectContextOnClient. + // Lets assume the first for now.. + // TODO: Detect if we are in an unit test context + + final DataManager dataManager = AppContext.getDataManager(); + try + { + return dataManager.getBinding( SERVER_SIDE_GAME_CONTEXT_BINDING_NAME, + ServerSideContext.class ); + } + catch ( NameNotBoundException e ) + { + final ServerSideContext serverSideContext = new ServerSideContext(); + + dataManager.setBinding( SERVER_SIDE_GAME_CONTEXT_BINDING_NAME, serverSideContext ); + + return serverSideContext; + } } - - return myGameObjectContext; + else + { + return myClientGameObjectContext; + } } /** + * This is called only on the client, and in unit tests. Thus, if this is not called, we know that ¨ + * we are on the server. + * * @param gameObjectContext the {@link GameObjectContext} to use for the current environment. */ - // TODO: Remove this method, and instead use the static initializer to determine the GameObjectContext?? - public static void setGameObjectContext( GameObjectContext gameObjectContext ) + public static void setGameObjectContextOnClient( GameObjectContext gameObjectContext ) { ParameterChecker.checkNotNull( gameObjectContext, "gameObjectContext" ); - myGameObjectContext = gameObjectContext; + myClientGameObjectContext = gameObjectContext; } + //====================================================================== + // Private Methods - static + private GameContext() { - // TODO: Determine environment - how? - // IDEA: Maybe see if AppContext.getxxxService return null or not?? - // As for unit testing, we can look at the call stack and search for any caller that implements TestCase? } } Modified: trunk/skycastle/modules/core/src/main/java/org/skycastle/core/ServerSideContext.java =================================================================== --- trunk/skycastle/modules/core/src/main/java/org/skycastle/core/ServerSideContext.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/core/src/main/java/org/skycastle/core/ServerSideContext.java 2008-04-18 23:13:25 UTC (rev 465) @@ -9,7 +9,7 @@ * @author Hans Häggström */ public final class ServerSideContext - implements GameObjectContext, Serializable + implements GameObjectContext, Serializable, ManagedObject { //====================================================================== Modified: trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectActionsTest.java =================================================================== --- trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectActionsTest.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectActionsTest.java 2008-04-18 23:13:25 UTC (rev 465) @@ -39,7 +39,8 @@ //---------------------------------------------------------------------- // Test Methods - public void testAddAction() throws Exception + public void testAddAction() + throws Exception { final String actionName = "dummyAction"; Action dummyAction = new ActionImpl( actionName, @@ -58,7 +59,8 @@ } - public void testImmediatelyInvokeAction() throws Exception + public void testImmediatelyInvokeAction() + throws Exception { myGameObject.startAction( myCallerId, TEST_ACTION_NAME ); @@ -67,7 +69,8 @@ } - public void testProlongedAction() throws Exception + public void testProlongedAction() + throws Exception { myGameObject.setPropertyValue( REPEAT_INTERVALL, 100 ); myGameObject.setPropertyValue( NUMBER_OF_STEPS, 3 ); @@ -101,7 +104,8 @@ } - public void testRemoveAction() throws Exception + public void testRemoveAction() + throws Exception { assertTrue( myGameObject.hasAction( TEST_ACTION_NAME ) ); @@ -114,10 +118,11 @@ // Protected Methods @Override - protected void setUp() throws Exception + protected void setUp() + throws Exception { myUnitTestingContext = new UnitTestingContext(); - GameContext.setGameObjectContext( myUnitTestingContext ); + GameContext.setGameObjectContextOnClient( myUnitTestingContext ); myGameObject = new DefaultGameObject(); Modified: trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java =================================================================== --- trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/core/src/test/java/org/skycastle/core/AbstractGameObjectPropertiesTest.java 2008-04-18 23:13:25 UTC (rev 465) @@ -302,7 +302,7 @@ protected void setUp() throws Exception { - GameContext.setGameObjectContext( new UnitTestingContext() ); + GameContext.setGameObjectContextOnClient( new UnitTestingContext() ); myGameObject = new DefaultGameObject(); Modified: trunk/skycastle/modules/core/src/test/java/org/skycastle/core/geometry/space/grid/GridTest.java =================================================================== --- trunk/skycastle/modules/core/src/test/java/org/skycastle/core/geometry/space/grid/GridTest.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/core/src/test/java/org/skycastle/core/geometry/space/grid/GridTest.java 2008-04-18 23:13:25 UTC (rev 465) @@ -46,7 +46,8 @@ //---------------------------------------------------------------------- // Test Methods - public void testAddingAndAccessingGameObjects() throws Exception + public void testAddingAndAccessingGameObjects() + throws Exception { assertObjectAccessWorks( true, 5.5f, 4.5f, 5, 4 ); assertObjectAccessWorks( true, 5.0f, 4.0f, 5, 4 ); @@ -59,7 +60,8 @@ } - public void testTileTypeSettingAndGetting() throws Exception + public void testTileTypeSettingAndGetting() + throws Exception { assertNull( myGridSpace.getTileType( 4, 5 ) ); @@ -72,9 +74,10 @@ // Protected Methods @Override - protected void setUp() throws Exception + protected void setUp() + throws Exception { - GameContext.setGameObjectContext( new UnitTestingContext() ); + GameContext.setGameObjectContextOnClient( new UnitTestingContext() ); myGridSpace = new GridSpace( 10, 10 ); } Modified: trunk/skycastle/modules/server/src/main/java/org/skycastle/server/SkycastleServer.java =================================================================== --- trunk/skycastle/modules/server/src/main/java/org/skycastle/server/SkycastleServer.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/server/src/main/java/org/skycastle/server/SkycastleServer.java 2008-04-18 23:13:25 UTC (rev 465) @@ -3,9 +3,7 @@ import com.sun.sgs.app.AppListener; import com.sun.sgs.app.ClientSession; import com.sun.sgs.app.ClientSessionListener; -import org.skycastle.core.GameContext; import org.skycastle.core.PersistentReference; -import org.skycastle.core.ServerSideContext; import org.skycastle.protocol.registry.ProtocolRegistry; import org.skycastle.protocol.registry.ProtocolRegistryImpl; @@ -49,10 +47,6 @@ { LOGGER.log( Level.INFO, "Skycastle Server starting up." ); - // Initialize static context variable - // TODO: This might not work in a multi node (=multi JVM) environment. Use autodetection and lazy creation instead? - GameContext.setGameObjectContext( new ServerSideContext() ); - // Create protocol registry myProtocolRegistryReference = new PersistentReference<ProtocolRegistry>( new ProtocolRegistryImpl() ); } Modified: trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/example/UiDemo.java =================================================================== --- trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/example/UiDemo.java 2008-04-18 22:46:30 UTC (rev 464) +++ trunk/skycastle/modules/ui/src/main/java/org/skycastle/ui/example/UiDemo.java 2008-04-18 23:13:25 UTC (rev 465) @@ -30,7 +30,7 @@ // Initialize the game context. It keeps track of created GameObjects, and has different implementations // for the server and client side. Will be automatically created in the future when we can differentiate // between server-side, client side, and unit-tests. - GameContext.setGameObjectContext( new ClientContext() ); + GameContext.setGameObjectContextOnClient( new ClientContext() ); // Create an example of a game object, in this case representing an avatar final GameObject exampleGameObject = createExampleGameObject(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.