private void HandleRequest(Player p, LoginRequest m) { try { if (clients.Count > 100) { p.Send(Serialize(new LoginResponse { Success = false, Reason = "The maximum number of clients has been reached on this server. Please try again later." })); } else { // remove invalid chars m.Username = RemoveInvalidUsernameCharacters(m.Username); bool nameValid = true; lock (clients) { foreach (var client in clients) { if (client.Username == m.Username) { nameValid = false; break; } } // reserve the name for this user if (nameValid) p.Username = m.Username; } if (nameValid) { lock (nextPlayerIDLock) { p.ID = nextPlayerID; nextPlayerID++; } p.State = PlayerState.IN_LOBBY; p.Send(Serialize(new LoginResponse { Success = true })); lock (clients) { foreach (var player in clients.Where(x => IsInLobby(x))) { // tell existing players, that 'p' has connected player.Send(Serialize(new UpdatePlayerMessage { PlayerID = p.ID, Status = p.State.ToString(), Username = p.Username, Reason = String.Format("{0} connected.", p.Username) })); // tell 'p' that each existing player is online if(player.ID != p.ID) { p.Send(Serialize(new UpdatePlayerMessage { PlayerID = player.ID, Status = player.State.ToString(), Username = player.Username })); } } } } else { p.Send(Serialize(new LoginResponse { Success = false, Reason = String.Format("The Username '{0}' is already taken. Please try another Username.", m.Username) })); } } } catch (Exception ex) { Log(ex.ToString()); } }
private void HandleRequest(Player p, ConnectFourMoveRequest m) { bool gameFound = false; ConnectFourGame game = null; foreach (var g in games) { if (g.ID == m.GameID) { game = g as ConnectFourGame; gameFound = true; break; } } if (!gameFound) { p.Send(Serialize(new ConnectFourMoveResponse { Success = false, Reason = String.Format("Move failed. The game was not found on the server.") })); } else { game.TryMove(m.PlayerNumber, m.Column); } }
private void Send(Player p, Message m) { p.Send(Serialize(m)); }
private void HandleRequest(Player p, JoinGameRequest m) { bool gameFound = false; Game game = null; int newPlayerNumber = 0; foreach (var g in games) { if (g.ID == m.GameID) { game = g; lock (game) { game.AddPlayer(p); newPlayerNumber = game.Players.Count; gameFound = true; break; } } } if (!gameFound) { p.Send(Serialize(new JoinGameResponse { Success = false, Reason = String.Format("Failed to join the game. The game was not found on the server.") })); } else { p.Send(Serialize(new JoinGameResponse { Success = true, MaxPlayers = game.MaxPlayers })); // broadcast player joined foreach (var player in game.Players) { player.Send(Serialize(new AddPlayerMessage { GameID = game.ID, Username = p.Username, CanStartGame = game.CanStart, PlayerNumber = newPlayerNumber })); // Tell the joining player what other players are in the game. if (player != p) { p.Send(Serialize(new AddPlayerMessage { GameID = game.ID, PlayerNumber = game.Players.IndexOf(player) + 1, Username = player.Username })); } } } }
private void HandleRequest(Player p, ResetGameRequest m) { Game game = games.FirstOrDefault(x => x.ID == m.GameID); if (game != null) { ConnectFourGame g = game as ConnectFourGame; g.Start(); foreach (var player in g.Players) { player.Send(Serialize(new ResetGameResponse { Success = true, GameID = m.GameID, PlayerNumber = g.Players.IndexOf(player) + 1, FirstTurnPlayerNumber = g.NextTurnPlayerNumber() })); } } else { p.Send(Serialize(new ResetGameResponse { GameID = m.GameID, Success = false, Reason = "The game you attempted to reset was not found on the server." })); } }
private void HandleRequest(Player p, InvitePlayerRequest m) { bool gameFound = false; bool playerFound = false; // find game foreach (var game in games) { if (game.ID == m.GameID) { // game found. find player foreach (var player in clients) { if (player.Username == m.UsernameInvited) { // player found. send invitation player.Send(Serialize(new PlayerInvitationMessage { GameID = game.ID, InvitedByUsername = p.Username })); playerFound = true; break; } } gameFound = true; break; } } if (!gameFound) p.Send(Serialize(new InvitePlayerResponse { Success = false, Reason = String.Format("Failed to invite {0} to the game. The game was not found on the server.", m.UsernameInvited) })); else if (!playerFound) p.Send(Serialize(new InvitePlayerResponse { Success = false, Reason = String.Format("Failed to invite {0} to the game. The user is not currently logged in.", m.UsernameInvited) })); else p.Send(Serialize(new InvitePlayerResponse { Success = true })); }
private void HandleRequest(Player p, StartGameRequest m) { bool gameFound = false; foreach (var game in games) { if (game.ID == m.GameID) { gameFound = true; game.Start(); var response = new StartGameResponse { Success = true }; foreach (var player in game.Players) { player.Send(Serialize(response)); } break; } } if (!gameFound) p.Send(Serialize(new StartGameResponse { Success = false, Reason = "Failed to start the game. The game was not found on the server." })); }
private void HandleRequest(Player p, CreateGameRequest m) { if (games.Count > 100) { p.Send(Serialize(new CreateGameResponse { Success = false, Reason = "The server has reached the maximum number of simultaneous games allowed. Please try to create a game later." })); } else { var game = new ConnectFourGame(p); games.Add(game); game.AddPlayer(p); p.Send(Serialize(new CreateGameResponse { Success = true, GameID = game.ID, MaxPlayers = game.MaxPlayers })); p.Send(Serialize(new AddPlayerMessage { GameID = game.ID, Username = p.Username, PlayerNumber = 1, CanStartGame = false })); } }
private void HandleRequest(Player p, PingRequest m) { p.Send(Serialize(new PingResponse { })); }
private void HandleRequest(Player p, LogoutRequest m) { // free-up username try { p.Username = ""; p.Send(Serialize(new LogoutResponse { })); } catch (Exception ex) { Log(ex.ToString()); } }