Browse Source

Refactoring Atomic Multiplayer Example

Josh Engebretson 9 years ago
parent
commit
d211f5dae0

+ 7 - 0
SpaceGameMultiplayer/Resources/Components/RemotePlayer.js.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "858335f21d73f76c85404d073c8a8c55",
+	"JavascriptImporter": {
+		"IsComponentFile": true
+	}
+}

+ 7 - 0
SpaceGameMultiplayer/Resources/Components/RemotePlayerClient.js.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "e04173a5f3ad76a8c46bd93bdd3eae00",
+	"JavascriptImporter": {
+		"IsComponentFile": true
+	}
+}

+ 16 - 12
SpaceGameMultiplayer/Resources/Components/SpaceGame.js

@@ -22,7 +22,7 @@ exports.component = function(self) {
 
 
   var clientConnectionToNodeMap = {};
   var clientConnectionToNodeMap = {};
   var clientConnectionKeyToConnectionMap = {};
   var clientConnectionKeyToConnectionMap = {};
-  
+
   var score = 0;
   var score = 0;
 
 
   self.enemies = [];
   self.enemies = [];
@@ -32,14 +32,14 @@ exports.component = function(self) {
     self.hud.updateScore(score);
     self.hud.updateScore(score);
 
 
     var msg = JSON.stringify({ score: score });
     var msg = JSON.stringify({ score: score });
-    
+
     for (var key in clientConnectionKeyToConnectionMap) {
     for (var key in clientConnectionKeyToConnectionMap) {
       var connection = clientConnectionKeyToConnectionMap[key];
       var connection = clientConnectionKeyToConnectionMap[key];
-      
-      connection.sendStringMessage(msg);      
+
+      connection.sendStringMessage(msg);
     }
     }
   }
   }
-  
+
   self.random = function random(min, max) {
   self.random = function random(min, max) {
     return Math.random() * (max - min) + min;
     return Math.random() * (max - min) + min;
   }
   }
@@ -58,7 +58,7 @@ exports.component = function(self) {
     self.enemies.splice(self.enemies.indexOf(enemy), 1);
     self.enemies.splice(self.enemies.indexOf(enemy), 1);
 
 
     Atomic.destroy(enemy.node);
     Atomic.destroy(enemy.node);
-    
+
     if (self.enemies.length === 0) {
     if (self.enemies.length === 0) {
       self.respawnEnemies();
       self.respawnEnemies();
     }
     }
@@ -107,7 +107,7 @@ exports.component = function(self) {
 
 
     }
     }
   }
   }
-  
+
   function spawnEnemies() {
   function spawnEnemies() {
 
 
     self.respawnCapitalShip();
     self.respawnCapitalShip();
@@ -288,11 +288,15 @@ exports.component = function(self) {
 
 
     // Start server
     // Start server
     var serverName = Atomic.localStorage.getServerName();
     var serverName = Atomic.localStorage.getServerName();
-    Atomic.network.startServerAndRegisterWithMaster(27000, "52.37.100.204", 41234, serverName);
+    var serverPort = Atomic.localStorage.getServerPort();
+    var masterServerIP = Atomic.localStorage.getMasterServerIP();
+    var masterServerPort = Atomic.localStorage.getMasterServerPort();
+
+    Atomic.masterServerClient.startServerAndRegisterWithMaster(serverPort, masterServerIP, masterServerPort, serverName);
 
 
     Atomic.network.subscribeToEvent("ClientConnected", function(data) {
     Atomic.network.subscribeToEvent("ClientConnected", function(data) {
       var connection = data["Connection"];
       var connection = data["Connection"];
-      
+
       self.spawnRemotePlayer(connection);
       self.spawnRemotePlayer(connection);
     });
     });
 
 
@@ -300,9 +304,9 @@ exports.component = function(self) {
       var connection = data["Connection"];
       var connection = data["Connection"];
 
 
       var remotePlayerNode = clientConnectionToNodeMap[connection];
       var remotePlayerNode = clientConnectionToNodeMap[connection];
-      
+
       Atomic.destroy(remotePlayerNode);
       Atomic.destroy(remotePlayerNode);
-      
+
       clientConnectionToNodeMap[connection] = null;
       clientConnectionToNodeMap[connection] = null;
       clientConnectionKeyToConnectionMap[connection] = null;
       clientConnectionKeyToConnectionMap[connection] = null;
     });
     });
@@ -311,7 +315,7 @@ exports.component = function(self) {
       var data = msg['Data'];
       var data = msg['Data'];
 
 
       print("Client is ready!");
       print("Client is ready!");
-      
+
       if (data==='ready') {
       if (data==='ready') {
         self.updateScore();
         self.updateScore();
       }
       }

+ 5 - 0
SpaceGameMultiplayer/Resources/Data/RenderPath.xml.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "c031a5795156bf6cf3f8d9bd421c9669",
+	"TextImporter": {}
+}

+ 39 - 5
SpaceGameMultiplayer/Resources/Modules/LocalStorage.js

@@ -1,5 +1,9 @@
 var PREFS_FILE = "SpaceGameMultiPlayer.json";
 var PREFS_FILE = "SpaceGameMultiPlayer.json";
 
 
+// Defaults
+var MASTER_SERVER_IP = "52.37.100.204";
+var MASTER_SERVER_PORT = 41234;
+var SERVER_PORT = 27000;
 
 
 var filesystem = Atomic.getFileSystem();
 var filesystem = Atomic.getFileSystem();
 
 
@@ -10,7 +14,7 @@ var prefFilePath = documentsDir + PREFS_FILE;
 
 
 
 
 function LocalStorage() {
 function LocalStorage() {
-    print('In LocalStorage constructor');
+    
 }
 }
 
 
 function getJSONPrefData() {
 function getJSONPrefData() {
@@ -29,12 +33,13 @@ function getJSONPrefData() {
 }
 }
 
 
 LocalStorage.prototype.setServerName = function(serverName) {
 LocalStorage.prototype.setServerName = function(serverName) {
+
     var mydata = getJSONPrefData();
     var mydata = getJSONPrefData();
 
 
     mydata.server_name = serverName;
     mydata.server_name = serverName;
 
 
     var file = new Atomic.File(prefFilePath, Atomic.FILE_WRITE);
     var file = new Atomic.File(prefFilePath, Atomic.FILE_WRITE);
-    
+
     // Convert the data object to a string and write it
     // Convert the data object to a string and write it
     file.writeString(JSON.stringify(mydata));
     file.writeString(JSON.stringify(mydata));
 
 
@@ -44,7 +49,7 @@ LocalStorage.prototype.setServerName = function(serverName) {
 
 
 LocalStorage.prototype.getServerName = function() {
 LocalStorage.prototype.getServerName = function() {
     var json = getJSONPrefData();
     var json = getJSONPrefData();
-    
+
     if (json.server_name) {
     if (json.server_name) {
         return json.server_name;
         return json.server_name;
     }
     }
@@ -52,6 +57,36 @@ LocalStorage.prototype.getServerName = function() {
     return "Server";
     return "Server";
 }
 }
 
 
+LocalStorage.prototype.getServerPort = function() {
+    var json = getJSONPrefData();
+
+    if (json.server_port) {
+        return json.server_port;
+    }
+
+    return SERVER_PORT;
+}
+
+LocalStorage.prototype.getMasterServerIP = function() {
+    var json = getJSONPrefData();
+
+    if (json.master_server_ip) {
+        return json.master_server_ip;
+    }
+
+    return MASTER_SERVER_IP;
+}
+
+LocalStorage.prototype.getMasterServerPort = function() {
+    var json = getJSONPrefData();
+
+    if (json.master_server_port) {
+        return json.master_server_port;
+    }
+
+    return MASTER_SERVER_PORT;
+}
+
 LocalStorage.prototype.setPlayerName = function(playerName) {
 LocalStorage.prototype.setPlayerName = function(playerName) {
     var mydata = getJSONPrefData();
     var mydata = getJSONPrefData();
 
 
@@ -68,7 +103,7 @@ LocalStorage.prototype.setPlayerName = function(playerName) {
 
 
 LocalStorage.prototype.getPlayerName = function() {
 LocalStorage.prototype.getPlayerName = function() {
     var json = getJSONPrefData();
     var json = getJSONPrefData();
-    
+
     if (json.player_name) {
     if (json.player_name) {
         return json.player_name;
         return json.player_name;
     }
     }
@@ -78,4 +113,3 @@ LocalStorage.prototype.getPlayerName = function() {
 
 
 
 
 Atomic.localStorage = exports.localStorage = new LocalStorage();
 Atomic.localStorage = exports.localStorage = new LocalStorage();
-

+ 7 - 0
SpaceGameMultiplayer/Resources/Modules/LocalStorage.js.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "829632a8e4090b40e2b978a9976467ac",
+	"JavascriptImporter": {
+		"IsComponentFile": false
+	}
+}

+ 4 - 1
SpaceGameMultiplayer/Resources/Scripts/main.js

@@ -9,6 +9,9 @@ var precache = require("Scripts/precache");
 var utils = require("Scripts/utils");
 var utils = require("Scripts/utils");
 var UI = require("UI/ui");
 var UI = require("UI/ui");
 
 
+// start up optional master server client subsystem
+Atomic.masterServerClient = new Atomic.MasterServerClient();
+
 Atomic.game.init(start, update);
 Atomic.game.init(start, update);
 
 
 // called at the start of play
 // called at the start of play
@@ -22,7 +25,7 @@ function start() {
 
 
 	// play some music!
 	// play some music!
 	utils.playMusic("Music/battle.ogg");
 	utils.playMusic("Music/battle.ogg");
-	
+
 }
 }
 
 
 // called per frame
 // called per frame

+ 5 - 0
SpaceGameMultiplayer/Resources/Sprites/explosions_sheet.xml.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "5e3dccc7f126db64a61950af2c122dac",
+	"TextImporter": {}
+}

+ 5 - 0
SpaceGameMultiplayer/Resources/Sprites/spacegame_sheet.xml.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "0cce02cdcb870e2e2ee5c615e161cc88",
+	"TextImporter": {}
+}

+ 24 - 21
SpaceGameMultiplayer/Resources/UI/joinServer.js

@@ -17,15 +17,15 @@ function closeWindow() {
 
 
 function connectToServer(server) {
 function connectToServer(server) {
     game.createScene2D();
     game.createScene2D();
-    
+
     print(server);
     print(server);
-    
+
     // Disconnect from master
     // Disconnect from master
-    Atomic.network.clientDisconnectFromMaster();
-    
-    Atomic.network.clientConnectToServerViaMaster(server.connectionId, 
+    Atomic.masterServerClient.disconnectFromMaster();
+
+    Atomic.masterServerClient.connectToServerViaMaster(server.connectionId,
         server.internalIP, server.internalPort,
         server.internalIP, server.internalPort,
-        server.externalIP, server.externalUDPPort, 
+        server.externalIP, server.externalUDPPort,
         game.scene);
         game.scene);
 }
 }
 
 
@@ -38,9 +38,12 @@ exports.init = function(onClose) {
 
 
     window.load("UI/joinServer.ui.txt");
     window.load("UI/joinServer.ui.txt");
 
 
-    Atomic.network.clientConnectToMaster("52.37.100.204", 41234);
+    var masterServerIP = Atomic.localStorage.getMasterServerIP();
+    var masterServerPort = Atomic.localStorage.getMasterServerPort();
+    Atomic.masterServerClient.connectToMaster(masterServerIP, masterServerPort);
 
 
     Atomic.network.subscribeToEvent("ServerConnected", function(data) {
     Atomic.network.subscribeToEvent("ServerConnected", function(data) {
+
         print("Client Connected to server!");
         print("Client Connected to server!");
 
 
         clientToServerConnection = Atomic.network.getServerConnection();
         clientToServerConnection = Atomic.network.getServerConnection();
@@ -48,14 +51,14 @@ exports.init = function(onClose) {
         var node = game.scene.createChild("RemotePlayerClient");
         var node = game.scene.createChild("RemotePlayerClient");
         remotePlayerClient = node.createJSComponent("Components/RemotePlayerClient.js");
         remotePlayerClient = node.createJSComponent("Components/RemotePlayerClient.js");
         remotePlayerClient.init(clientToServerConnection);
         remotePlayerClient.init(clientToServerConnection);
-        
+
         clientToServerConnection.sendStringMessage('ready');
         clientToServerConnection.sendStringMessage('ready');
     });
     });
-    
+
     // Build select list
     // Build select list
     var serverSelect = new Atomic.UISelectList();
     var serverSelect = new Atomic.UISelectList();
     var serverList;
     var serverList;
-    
+
     var lp = new Atomic.UILayoutParams();
     var lp = new Atomic.UILayoutParams();
     lp.minWidth = 300;
     lp.minWidth = 300;
     lp.minHeight = 250;
     lp.minHeight = 250;
@@ -66,18 +69,18 @@ exports.init = function(onClose) {
     view.addChild(window);
     view.addChild(window);
     window.center();
     window.center();
 
 
-    Atomic.network.subscribeToEvent("MasterConnectionReady", function() {
-        Atomic.network.requestServerListFromMaster();
+    Atomic.masterServerClient.subscribeToEvent("MasterConnectionReady", function() {
+        Atomic.masterServerClient.requestServerListFromMaster();
     });
     });
 
 
-    Atomic.network.subscribeToEvent("MasterServerMessage", function(message) {
+    Atomic.masterServerClient.subscribeToEvent("MasterServerMessage", function(message) {
         print('In Javascript, MasterServerMessage received');
         print('In Javascript, MasterServerMessage received');
 
 
         var msg = JSON.parse(message['data']);
         var msg = JSON.parse(message['data']);
 
 
         if (msg.cmd === 'serverList') {
         if (msg.cmd === 'serverList') {
             serverList = JSON.parse(msg.servers);
             serverList = JSON.parse(msg.servers);
-            
+
             var serverContainer = window.getWidget("servercontainer");
             var serverContainer = window.getWidget("servercontainer");
             serverContainer.addChild(serverSelect);
             serverContainer.addChild(serverSelect);
 
 
@@ -89,7 +92,7 @@ exports.init = function(onClose) {
                 print(server.internalPort);
                 print(server.internalPort);
                 serverSelectSource.addItem(new Atomic.UISelectItem(server.serverName, i));
                 serverSelectSource.addItem(new Atomic.UISelectItem(server.serverName, i));
             }
             }
-            
+
             serverSelect.setSource(serverSelectSource);
             serverSelect.setSource(serverSelectSource);
         }
         }
     });
     });
@@ -98,13 +101,13 @@ exports.init = function(onClose) {
         print("Lost connection to server");
         print("Lost connection to server");
 
 
         remotePlayerClient.cleanup();
         remotePlayerClient.cleanup();
-        
+
         Atomic.destroy(game.scene);
         Atomic.destroy(game.scene);
-        
+
         var ui = require("./ui");
         var ui = require("./ui");
         ui.showMainMenu();
         ui.showMainMenu();
     });
     });
-    
+
     window.getWidget("cancel").onClick = function () {
     window.getWidget("cancel").onClick = function () {
         closeWindow();
         closeWindow();
         onClose();
         onClose();
@@ -113,16 +116,16 @@ exports.init = function(onClose) {
     window.getWidget("ok").onClick = function () {
     window.getWidget("ok").onClick = function () {
         var selectedItemId = serverSelect.getSelectedItemID();
         var selectedItemId = serverSelect.getSelectedItemID();
         var server = serverList[selectedItemId];
         var server = serverList[selectedItemId];
-        
+
         closeWindow();
         closeWindow();
         onClose();
         onClose();
 
 
         var ui = require("./ui");
         var ui = require("./ui");
         ui.closeMainMenu();
         ui.closeMainMenu();
-        
+
         connectToServer(server);
         connectToServer(server);
     }
     }
-    
+
 }
 }
 
 
 exports.shutdown = function() {
 exports.shutdown = function() {

+ 7 - 0
SpaceGameMultiplayer/Resources/UI/joinServer.js.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "c45cc812157286885822aa4256a57b1c",
+	"JavascriptImporter": {
+		"IsComponentFile": false
+	}
+}

+ 5 - 0
SpaceGameMultiplayer/Resources/UI/joinServer.ui.txt.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "36c041a9cef9706379bb1202db903e7b",
+	"TextImporter": {}
+}