[skycastle-commits] SF.net SVN: skycastle: [465] trunk/skycastle/modules

  • From: zzorn@xxxxxxxxxxxxxxxxxxxxx
  • To: skycastle-commits@xxxxxxxxxxxxx
  • Date: Fri, 18 Apr 2008 16:13:25 -0700

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.

Other related posts:

  • » [skycastle-commits] SF.net SVN: skycastle: [465] trunk/skycastle/modules