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); } }
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); } }
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); } }