public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, Fleck.IWebSocketConnection ws) { try { // get the lobby the player is in List<GFXLobbySessionRow> lobby = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobby.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); GFXLobbySessionRow ownerPlayer = lobby[0]; // get the data store GFXGameData dataStore = server.GameDataList[ownerPlayer.LobbyID]; if (dataStore.UserData.ContainsKey(ownerPlayer.SessionID)) { return constructResponse(GFXResponseType.Normal, JsonConvert.SerializeObject(dataStore.UserData[ownerPlayer.SessionID])); } else { return constructResponse(GFXResponseType.DoesNotExist, "User is not in this lobby!"); } } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, IWebSocketConnection ws) { try { // get the lobby the player is in List<GFXLobbySessionRow> lobbySessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobbySessions.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); GFXLobbySessionRow currentPlayer = lobbySessions[0]; // get the data store GFXGameData dataStore = server.GameDataList[currentPlayer.LobbyID]; if (dataStore.CurrentUserSession == currentPlayer.SessionID) { GFXGameDataEntry entry = JsonConvert.DeserializeObject<GFXGameDataEntry>(info.Message); dataStore.Data[entry.Key] = entry.Data; // send message to other connected players List<GFXLobbySessionRow> players = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", lobbySessions[0].LobbyID))); foreach (var player in players) { server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_DATA_CHANGED", Message = info.Message, ResponseCode = GFXResponseType.Normal })); } } else { return constructResponse(GFXResponseType.InvalidInput, "This player cannot modify the game data store."); } return constructResponse(GFXResponseType.Normal, ""); } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, Fleck.IWebSocketConnection ws) { try { // get the lobby the player is in List<GFXLobbySessionRow> lobbySessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobbySessions.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); GFXLobbySessionRow currentPlayer = lobbySessions[0]; // get the data store GFXGameData dataStore = server.GameDataList[currentPlayer.LobbyID]; if (dataStore.UserData.ContainsKey(currentPlayer.SessionID)) { dataStore.UserData[currentPlayer.SessionID] = info.Message; // send message to other connected players List<GFXLobbySessionRow> players = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", lobbySessions[0].LobbyID))); foreach (var player in players) { server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_DATA_CHANGED", Message = JsonConvert.SerializeObject(dataStore), ResponseCode = GFXResponseType.Normal })); } } else { return constructResponse(GFXResponseType.DoesNotExist, "User is not in this lobby!"); } return constructResponse(GFXResponseType.Normal, ""); } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, IWebSocketConnection ws) { try { // get the lobby the player is in List<GFXLobbySessionRow> lobbySessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobbySessions.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); // send message to other connected players List<GFXLobbySessionRow> players = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", lobbySessions[0].LobbyID))); foreach (var player in players) { if (player.SessionID != info.SessionId) { server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_GAME_START", Message = "", ResponseCode = GFXResponseType.Normal })); } } GFXLobbySessionRow currentPlayer = lobbySessions[0]; currentPlayer.Status = 1; server.LobbySessionList.Update(string.Format("RowId = '{0}'", currentPlayer.RowId), currentPlayer); return constructResponse(GFXResponseType.Normal, ""); } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, Fleck.IWebSocketConnection ws) { // get user's lobbyid List<GFXLobbySessionRow> sessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (sessions.Count <= 0) return constructResponse(GFXResponseType.DoesNotExist, "User is not playing any games!"); List<GFXLobbySessionRow> players = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", sessions[0].LobbyID))); foreach (var player in players) { // send GFX_GAME_FINISHED server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { ResponseCode = GFXResponseType.Normal, Subject = "GFX_GAME_FINISHED", Message = info.Message })); } return constructResponse(GFXResponseType.Normal, ""); }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, Fleck.IWebSocketConnection ws) { try { // get the lobby the player is in List<GFXLobbySessionRow> lobbySessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobbySessions.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); // modify this user's status to 2 GFXLobbySessionRow currentPlayer = lobbySessions[0]; currentPlayer.Status = 2; currentPlayer.Order = Convert.ToInt32(info.Message); server.LobbySessionList.Update(string.Format("RowId = '{0}'", currentPlayer.RowId), currentPlayer); var checkPlayers = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", currentPlayer.LobbyID))); var allOkay = true; foreach (var player in checkPlayers) { if (player.Status != 2) { allOkay = false; } } if (allOkay) { // send a GFX_START_GAME to all clients foreach (var player in checkPlayers) { server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_START_GAME", Message = "", ResponseCode = GFXResponseType.Normal })); } // send a GFX_TURN_START to the first player and GFX_TURN_CHANGED to other players var order = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}' ORDER BY PlayerOrder ASC", currentPlayer.LobbyID))); // update game data server.GameDataList[order[0].LobbyID].CurrentUserSession = order[0].SessionID; // if all user's status are 2, change lobby state to playing and set current player var lobby = new List<GFXLobbyRow>(server.LobbyList.Select(string.Format("LobbyId = '{0}'", currentPlayer.LobbyID)))[0]; lobby.Status = GFXLobbyStatus.Playing; lobby.CurrentPlayer = order[0].SessionID; server.LobbyList.Update(string.Format("LobbyId = '{0}'", lobby.LobbyID), lobby); server.WebSocketList[order[0].SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_TURN_START", Message = "", ResponseCode = GFXResponseType.Normal })); for (int i = 1; i < order.Count; i++) { server.WebSocketList[order[i].SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_TURN_CHANGED", Message = "", ResponseCode = GFXResponseType.Normal })); } } else { // send a GFX_TURN_RESOLVE to the next player var nextPlayers = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}' AND PlayerOrderOriginal > {1} ORDER BY PlayerOrderOriginal ASC", currentPlayer.LobbyID, currentPlayer.OrderOriginal))); if (nextPlayers.Count <= 0) { // get the first person nextPlayers = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}' ORDER BY PlayerOrderOriginal ASC", currentPlayer.LobbyID))); } GFXLobbySessionRow nextPlayer = nextPlayers[0]; server.GameDataList[nextPlayer.LobbyID].CurrentUserSession = nextPlayer.SessionID; server.WebSocketList[nextPlayer.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_TURN_RESOLVE", Message = nextPlayer.Order.ToString(), ResponseCode = GFXResponseType.Normal })); } return constructResponse(GFXResponseType.Normal, ""); } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, IWebSocketConnection ws) { try { // get the lobby the player is in List<GFXLobbySessionRow> lobbySessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobbySessions.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); GFXLobbySessionRow currentPlayer = lobbySessions[0]; currentPlayer.Status = 1; server.LobbySessionList.Update(string.Format("RowId = '{0}'", currentPlayer.RowId), currentPlayer); // send message to other connected players bool gameReallyStart = true; List<GFXLobbySessionRow> players = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", currentPlayer.LobbyID))); foreach (var player in players) { if (player.Status == 0) { gameReallyStart = false; break; } } // send a GFX_START message to all clients if (gameReallyStart) { List<GFXLobbyRow> lobbies = new List<GFXLobbyRow>(server.LobbyList.Select(string.Format("LobbyId = '{0}'",currentPlayer.LobbyID))); if (lobbies.Count <= 0) { throw new InvalidProgramException("Hm. Weird bug."); } GFXLobbyRow lobby = lobbies[0]; lobby.Status = GFXLobbyStatus.ChoosingTurn; server.LobbyList.Update(string.Format("LobbyId = '{0}'", lobby.LobbyID), lobby); GFXGameData gameData = new GFXGameData(currentPlayer.LobbyID); // create the data store for the game server.GameDataList.Add(currentPlayer.LobbyID, gameData); foreach (var player in players) { gameData.UserData.Add(player.SessionID, ""); server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_START_CHOICE", Message = "", ResponseCode = GFXResponseType.Normal })); if (player.Owner) { server.GameDataList[currentPlayer.LobbyID].CurrentUserSession = player.SessionID; // send a GFX_TURN_RESOLVE to the owner of the lobby server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_TURN_RESOLVE", Message = player.Order.ToString(), ResponseCode = GFXResponseType.Normal })); } } } return constructResponse(GFXResponseType.Normal, ""); } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }
public override GFXSocketResponse DoMessage(GFXServerCore server, GFXSocketInfo info, Fleck.IWebSocketConnection ws) { try { // get the lobby the player is in var lobbySessions = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("SessionId = '{0}'", info.SessionId))); if (lobbySessions.Count <= 0) return constructResponse(GFXResponseType.InvalidInput, "User is not playing any games!"); var currentPlayer = lobbySessions[0]; // do a SQL query with order by of column 'order' in ascending order and greater than currentPlayer.Order var lobbies = new List<GFXLobbyRow>(server.LobbyList.Select(string.Format("LobbyId = '{0}'", currentPlayer.LobbyID))); var nextPlayers = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}' AND PlayerOrder > {1} ORDER BY PlayerOrder ASC", currentPlayer.LobbyID, currentPlayer.Order))); // change the CurrentUserSession of the game data to the next player if (nextPlayers.Count <= 0) { // get the first person nextPlayers = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}' ORDER BY PlayerOrder ASC", currentPlayer.LobbyID))); if (nextPlayers.Count <= 0) { throw new InvalidProgramException("Bug bug!"); } } var nextPlayer = nextPlayers[0]; // change current player of the lobby in the database to the current player var lobby = lobbies[0]; lobby.CurrentPlayer = nextPlayer.SessionID; server.LobbyList.Update(string.Format("LobbyId = '{0}'", lobby.LobbyID), lobby); server.GameDataList[nextPlayer.LobbyID].CurrentUserSession = nextPlayer.SessionID; // send GFX_TURN_START to the next client and send GFX_TURN_CHANGED to other clients var players = new List<GFXLobbySessionRow>(server.LobbySessionList.Select(string.Format("LobbyId = '{0}'", currentPlayer.LobbyID))); foreach (var player in players) { if (player.SessionID == nextPlayer.SessionID) { server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_TURN_START", Message = "", ResponseCode = GFXResponseType.Normal })); } else { server.WebSocketList[player.SessionID].Send(JsonConvert.SerializeObject(new GFXSocketResponse { Subject = "GFX_TURN_CHANGED", Message = "", ResponseCode = GFXResponseType.Normal })); } } return constructResponse(GFXResponseType.Normal, ""); } catch (Exception exp) { return constructResponse(GFXResponseType.FatalError, exp.Message); } }