From e42b9b7ea272f598499c284b9719e204c70f29d2 Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 14:49:59 -0400 Subject: [PATCH 1/7] fixed scope issues in setMessageListener.. forgot `this` would point to the socket in socket.onmessage --- server_interface/server_interface.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server_interface/server_interface.js b/server_interface/server_interface.js index 66ec516..52a0d41 100644 --- a/server_interface/server_interface.js +++ b/server_interface/server_interface.js @@ -270,11 +270,12 @@ * TODO: Maybe a timeout will be needed? Pass in a function and a MS count. */ setMessageListener: function(listener, types) { + var self = this; this.eventTypes = types; this.socket.onmessage = function(message) { var data = JSON.parse(message.data); - if(this.eventTypes) { - if(this.eventTypes.indexOf(data.command) !== -1) { // if contains + if(self.eventTypes) { + if(self.eventTypes.indexOf(data.command) !== -1) { // if contains listener(data); } } else { @@ -282,7 +283,6 @@ } } this.eventTypes = types; - console.log(this.eventTypes); }, /** @@ -292,7 +292,6 @@ */ addEventTypes: function(types) { this.eventTypes = this.eventTypes.concat(types); - console.log(this.eventTypes); }, /** From 8d454c91d8f26a547a3b7cd86713f5e563fc7559 Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 15:26:48 -0400 Subject: [PATCH 2/7] eventTypes is no longer a member of the API --- server_interface/server_interface.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/server_interface/server_interface.js b/server_interface/server_interface.js index 52a0d41..6b8a884 100644 --- a/server_interface/server_interface.js +++ b/server_interface/server_interface.js @@ -3,6 +3,8 @@ var wsProtocolFinder = /ws(s)*:\/\//; var SOCKET_OPEN = 1; + var eventTypes = []; + function Message(command) { this.command = command; } @@ -36,7 +38,6 @@ window.CardshifterServerAPI = { socket: null, - eventTypes: [], messageTypes: { /** * Incoming login message. @@ -266,23 +267,23 @@ * * @param listener:Function -- The function to fire when a message of types is received * @param types:[string] (OPTIONAL) -- Only fire the listener when the message type is in this array + * @param timeout:Object (OPTIONAL) -- The function(.ontimeout) to call after MS(.ms) of no reply * * TODO: Maybe a timeout will be needed? Pass in a function and a MS count. */ setMessageListener: function(listener, types) { - var self = this; - this.eventTypes = types; + eventTypes = types; + this.socket.onmessage = function(message) { var data = JSON.parse(message.data); - if(self.eventTypes) { - if(self.eventTypes.indexOf(data.command) !== -1) { // if contains + if(eventTypes) { + if(eventTypes.indexOf(data.command) !== -1) { // if contains listener(data); } } else { listener(data); } } - this.eventTypes = types; }, /** @@ -291,7 +292,7 @@ * @param types:[string] -- The types to add */ addEventTypes: function(types) { - this.eventTypes = this.eventTypes.concat(types); + eventTypes = eventTypes.concat(types); }, /** From 0c07449d2a06530694736e9072acc2395b5c6292 Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 15:34:19 -0400 Subject: [PATCH 3/7] no longer worries about turning on and off listening for newgame... a newgame will only come when expected (and the commandMap allows the code to act properly when the message is received) --- lobby/lobby_controller.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lobby/lobby_controller.js b/lobby/lobby_controller.js index 496b571..37a8729 100644 --- a/lobby/lobby_controller.js +++ b/lobby/lobby_controller.js @@ -1,6 +1,7 @@ CardshifterApp.controller("LobbyController", function($scope, $timeout) { var CHAT_FEED_LIMIT = 10; var ENTER_KEY = 13; + var MESSAGE_DELAY = 3000; $scope.users = []; $scope.chatMessages = []; @@ -17,7 +18,8 @@ CardshifterApp.controller("LobbyController", function($scope, $timeout) { "userstatus": updateUserList, "chat": addChatMessage, "inviteRequest": displayInvite, - "availableMods": displayMods + "availableMods": displayMods, + "newgame": enterNewGame }; var getUsers = new CardshifterServerAPI.messageTypes.ServerQueryMessage("USERS", ""); @@ -26,7 +28,7 @@ CardshifterApp.controller("LobbyController", function($scope, $timeout) { CardshifterServerAPI.setMessageListener(function(message) { commandMap[message.command](message); $scope.$apply(); // needs to manually updated since this is an event - }, ["userstatus", "chat", "inviteRequest", "availableMods"]); + }, ["userstatus", "chat", "inviteRequest", "availableMods", "newgame"]); $scope.sendMessage = function(e) { if(e && e.keyCode !== ENTER_KEY) { // user may hit "enter" key @@ -44,14 +46,18 @@ CardshifterApp.controller("LobbyController", function($scope, $timeout) { } $scope.startGame = function() { if($scope.selected_mod && $scope.selected_opponent) { - console.log("start"); + var startGame = new CardshifterServerAPI.messageTypes.StartGameRequest($scope.selected_opponent, + $scope.selected_mod); + CardshifterServerAPI.sendMessage(startGame); } else { // user needs to choose an opponent and/or a mod console.log("need to choose mod and/or opponent"); } } $scope.acceptInvite = function(accept) { - console.log("accept"); + var accept = new CardshifterServerAPI.messageTypes.InviteResponse($scope.invite.id, accept); + CardshifterServerAPI.sendMessage(accept); + $scope.gotInvite = false; } @@ -106,4 +112,13 @@ CardshifterApp.controller("LobbyController", function($scope, $timeout) { function displayMods(message) { $scope.mods = message.mods; } + /** + * Stores the game ID in currentUser for other controllers + * to use and navigates to the deck-builder page for the + * user to select a deck. + */ + function enterNewGame(message) { + currentUser.currentGameId = message.gameId; + console.log("change to game"); + } }); \ No newline at end of file From f2fa9e789eaa0a06e428fb3a8d9b9321dae67665 Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 15:34:54 -0400 Subject: [PATCH 4/7] now the login button will re-enable when an error has occurred --- login/login_controller.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/login/login_controller.js b/login/login_controller.js index 9ae7eb5..4b2b0d5 100644 --- a/login/login_controller.js +++ b/login/login_controller.js @@ -23,6 +23,7 @@ CardshifterApp.controller("LoginController", function($scope, $location, $rootSc } else { console.log("server messsage: " + welcome.message); $scope.loggedIn = false; + $scope.$apply(); } }, ["loginresponse"]); CardshifterServerAPI.sendMessage(login); @@ -31,11 +32,13 @@ CardshifterApp.controller("LoginController", function($scope, $location, $rootSc // notify the user that there was an issue logging in (loginmessage issue) console.log("LoginMessage error(error 2): " + e); $scope.loggedIn = false; + $scope.$apply(); } }, function() { // notify the user that there was an issue logging in (websocket issue) console.log("Websocket error(error 1)"); $scope.loggedIn = false; + $scope.$apply(); }); } }); \ No newline at end of file From 63b6a35d24ee62b00bc1ae721ac4f401b4813c6e Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 15:40:25 -0400 Subject: [PATCH 5/7] added part for CSS injection of lobby.css --- cardshifter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/cardshifter.js b/cardshifter.js index a02a2bb..933536b 100644 --- a/cardshifter.js +++ b/cardshifter.js @@ -9,5 +9,6 @@ CardshifterApp.config(function($routeProvider) { .when("/lobby", { controller: "LobbyController", templateUrl: "lobby/lobby.html", + css: "lobby/lobby.css" // @Phrancis needs this }) }); \ No newline at end of file From 9e46f6f357ac09e795765b86a16b71512bcccf6a Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 17:32:17 -0400 Subject: [PATCH 6/7] fixed spelling, indentation, and added a documentation --- server_interface/server_interface.js | 49 ++++++++++++++++------------ 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/server_interface/server_interface.js b/server_interface/server_interface.js index 6b8a884..f978913 100644 --- a/server_interface/server_interface.js +++ b/server_interface/server_interface.js @@ -39,32 +39,32 @@ window.CardshifterServerAPI = { socket: null, messageTypes: { - /** - * Incoming login message. - *

- * A login message from a client to add a user to the available users on the server. - * This login message is required before any other action or message can be performed between a client and a server. - * @constructor - * @param username the incoming user name passed from client to server, not null - * @example Message: { "command":"login","username":"JohnDoe" } - */ + /** + * Incoming login message. + *

+ * A login message from a client to add a user to the available users on the server. + * This login message is required before any other action or message can be performed between a client and a server. + * @constructor + * @param username the incoming user name passed from client to server, not null + * @example Message: { "command":"login","username":"JohnDoe" } + */ LoginMessage: function(username) { this.username = username; }, - /** - * Request available targets for a specific action to be performed by an entity. - *

- * These in-game messages request a list of al available targets for a given action and entity. - * The client uses this request in order to point out targets (hopefully with a visual aid such as highlighting targets) - * that an entity (such as a creature card, or a player) can perform an action on (for example attack or enchant a card. - * @constructor - * @param gameId The Id of this game currently being played - * @param id The Id of this entity which requests to perform an action - * @param action The name of this action requested to be performed - */ + /** + * Request available targets for a specific action to be performed by an entity. + *

+ * These in-game messages request a list of al available targets for a given action and entity. + * The client uses this request in order to point out targets (hopefully with a visual aid such as highlighting targets) + * that an entity (such as a creature card, or a player) can perform an action on (for example attack or enchant a card. + * @constructor + * @param gameId The Id of this game currently being played + * @param id The Id of this entity which requests to perform an action + * @param action The name of this action requested to be performed + */ RequestTargetsMessage: function(gameId, id, action) { - this.gamdId = gameId; + this.gameId = gameId; this.id = id; this.action = action; }, @@ -247,6 +247,13 @@ this.socket = socket; }, + /** + * Sends a message to the server + * + * @param message:Message -- The message to send + * @error SocketNotReadyException -- The socket is not ready to be used + * @error NotInitializedException -- The API has not yet been initialized + */ sendMessage: function(message) { var socket = this.socket; var self = this; From 548db5a7785468565f20d2f8870acdb9abc1331f Mon Sep 17 00:00:00 2001 From: SirPython Date: Sat, 8 Aug 2015 17:57:43 -0400 Subject: [PATCH 7/7] removed comment --- cardshifter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cardshifter.js b/cardshifter.js index 933536b..c53e9fc 100644 --- a/cardshifter.js +++ b/cardshifter.js @@ -9,6 +9,6 @@ CardshifterApp.config(function($routeProvider) { .when("/lobby", { controller: "LobbyController", templateUrl: "lobby/lobby.html", - css: "lobby/lobby.css" // @Phrancis needs this + css: "lobby/lobby.css" }) }); \ No newline at end of file