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);
            }
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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, "");
        }
Example #6
0
        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);
            }
        }