コード例 #1
0
        public GFXRestResponse CreateLobby(string lobbyname, string gameid, string password, string usersessionid, bool isprivate)
        {
            try
            {
                if (!sessionExists(usersessionid))
                {
                    GFXLogger.GetInstance().Log(GFXLoggerLevel.WARN, "CreateLobby", "Invalid user session id.");
                    return constructResponse(GFXResponseType.NotFound, "Invalid user session id.");
                }

                if (!gameExists(gameid))
                {
                    GFXLogger.GetInstance().Log(GFXLoggerLevel.WARN, "CreateLobby", "Invalid game id.");
                    return constructResponse(GFXResponseType.NotFound, "Invalid game id.");
                }

                GFXLobbyRow session = new GFXLobbyRow
                {
                    GameID      = Guid.Parse(gameid),
                    LobbyID     = Guid.NewGuid(),
                    Name        = lobbyname,
                    Password    = password,
                    Private     = isprivate,
                    Status      = GFXLobbyStatus.Waiting
                };

                lobbyTable.Insert(session);

                // create the owner's session
                GFXLobbySessionRow playerSession = new GFXLobbySessionRow
                {
                    LobbyID         = session.LobbyID,
                    SessionID       = Guid.Parse(usersessionid),
                    Order           = 1,
                    OrderOriginal   = 1,
                    Owner           = true,
                    Status          = 0,
                    RowId           = lobbySessionTable.Count()
                };

                lobbySessionTable.Insert(playerSession);

                GFXLoginRow loginRow = new List<GFXLoginRow>(loginTable.Select(string.Format("SessionId = '{0}'", usersessionid), 1))[0];

                loginRow.UserStatus = GFXLoginStatus.LOBBY;

                loginTable.Update(string.Format("SessionId = '{0}'", usersessionid), loginRow);

                return constructResponse(GFXResponseType.Normal, session.LobbyID.ToString());
            }
            catch (Exception exp)
            {
                GFXLogger.GetInstance().Log(GFXLoggerLevel.FATAL, "CreateLobby", exp.Message);

                return constructResponse(GFXResponseType.RuntimeError, exp.Message);
            }
        }
コード例 #2
0
        public GFXRestResponse JoinLobby(string lobbyid, string usersessionid)
        {
            try
            {
                if (!sessionExists(usersessionid))
                {
                    GFXLogger.GetInstance().Log(GFXLoggerLevel.WARN, "JoinLobby", "User session ID is invalid.");

                    return constructResponse(GFXResponseType.NotFound, "User session ID is invalid.");
                }

                if (!lobbyExists(lobbyid))
                {
                    GFXLogger.GetInstance().Log(GFXLoggerLevel.FATAL, "JoinLobby", "Lobby id is invalid.");

                    return constructResponse(GFXResponseType.NotFound, "Lobby ID is invalid.");
                }

                int lobbyCount = Convert.ToInt32(GetUserCount(lobbyid).AdditionalData);

                var games   = new List<GFXLobbyRow>(lobbyTable.Select(string.Format("LobbyId='{0}'", lobbyid)))[0];
                var game    = new List<GFXGameRow>(gameTable.Select(string.Format("GameId='{0}'", games.GameID)))[0];

                if (lobbyCount + 1 > game.MaxPlayers)
                {
                    GFXLogger.GetInstance().Log(GFXLoggerLevel.WARN, "JoinLobby", "This lobby is full!");

                    return constructResponse(GFXResponseType.InvalidInput, "This lobby is full!");
                }

                var order = lobbySessionTable.Count(string.Format("LobbyID = '{0}'", lobbyid)) + 1;

                GFXLobbySessionRow session = new GFXLobbySessionRow
                {
                    LobbyID         = Guid.Parse(lobbyid),
                    SessionID       = Guid.Parse(usersessionid),
                    Order           = order,
                    OrderOriginal   = order,
                    Owner           = false,
                    Status          = 0,
                    RowId           = lobbySessionTable.Count()
                };

                lobbySessionTable.Insert(session);

                GFXLoginRow loginRow = new List<GFXLoginRow>(loginTable.Select(string.Format("SessionId = '{0}'", usersessionid), 1))[0];

                loginRow.UserStatus = GFXLoginStatus.LOBBY;

                loginTable.Update(string.Format("SessionId = '{0}'", usersessionid), loginRow);

                return constructResponse(GFXResponseType.Normal, lobbyid);
            }
            catch (Exception exp)
            {
                GFXLogger.GetInstance().Log(GFXLoggerLevel.FATAL, "JoinLobby", exp.Message);

                return constructResponse(GFXResponseType.RuntimeError, exp.Message);
            }
        }
コード例 #3
0
        public GFXRestResponse GetNextPlayer(string lobbyid, string usersessionid, string steps)
        {
            GFXLogger.GetInstance().Log(GFXLoggerLevel.INFO, "GetNextPlayer", "Getting current player for session " + lobbyid);

            try
            {
                // get other users
                List<GFXLobbySessionRow> players = new List<GFXLobbySessionRow>(lobbySessionTable.Select(string.Format("LobbyId = '{0}'", lobbyid)));

                int lobbyCount = lobbySessionTable.Count(string.Format("LobbyId = '{0}'", lobbyid));

                // get the calling player's information
                var callingPlayer = new GFXLobbySessionRow();

                foreach (var item in players)
                {
                    if (item.SessionID == Guid.Parse(usersessionid))
                    {
                        callingPlayer = item;
                    }
                }

                // get the player who has callingplayer.playerorder + steps
                int calledPlayer    = ((callingPlayer.Order + Convert.ToInt32(steps) - 1) % lobbyCount) + 1;
                var selectedPlayer  = new GFXLobbySessionRow();

                foreach (var item in players)
                {
                    if (item.Order == calledPlayer)
                    {
                        selectedPlayer = item;
                    }
                }

                var loggedInUsers   = new List<GFXLoginRow>(loginTable.Select(string.Format("SessionId = '{0}'", selectedPlayer.SessionID)));
                var users           = new List<GFXUserRow>(userTable.Select(string.Format("UserId = '{0}'", loggedInUsers[0].UserId)));

                return constructResponse(GFXResponseType.Normal, JsonConvert.SerializeObject(users[0]));
            }
            catch (Exception exp)
            {
                GFXLogger.GetInstance().Log(GFXLoggerLevel.FATAL, "GetNextPlayer", exp.Message);

                return constructResponse(GFXResponseType.RuntimeError, exp.Message);
            }
        }