public void RemovePlayer(string name, player player_pack = null) { players_in_server--; playerlist.Items.Remove(name); chat_box.AppendText("[Server Notice]: " + name + " has left the lobby!\r\n"); player_count.Text = "Players: " + players_in_server + " / 16"; if (host) { Host_Options_Pack.LobbySnapshot.Players.Remove(player_pack); lobby_server.PlayerToPack.Remove(name); Packet quit_pack = new Packet(); quit_pack.Type = QuitMessage; quit_pack.PlayerStatus = player_pack; lobby_server.SendPacketToAll(quit_pack); } }
public void ReadData(Socket client_sock) { Packet pack; NetworkStream clientStream = null; try { clientStream = new NetworkStream(client_sock); pack = Packet.Parser.ParseDelimitedFrom(clientStream); } catch (Exception) { return; } string PlayerName; switch (pack.Type) { case QuitMessage: lobby.Invoke(() => { lobby.RemovePlayer(pack.PlayerStatus.Name, pack.PlayerStatus); }); break; case HostSnapshot: lobby.Invoke(() => { lobby.UpdateLobby(pack); }); break; case JoinMessage: PlayerName = pack.PlayerStatus.Name; lobby.Invoke(() => { lobby.AddPlayer(PlayerName, clientStream); }); if (ishost) { //Create socket->player map to remove them and track them by name for chat and such. lobby_server.PlayerSocketMap.Add(client_sock, PlayerName); lobby_server.SendPacketToAll(pack); } break; case ChatMessage: PlayerName = pack.Chat.Name; if (ishost) { PlayerName = lobby_server.PlayerSocketMap[client_sock]; //Send packet to all other players. pack.Chat.Name = PlayerName; lobby_server.SendPacketToAll(pack); } lobby.Invoke(() => { lobby.AddChatText(PlayerName, pack.Chat.Message); }); break; case StartGame: lobby.Invoke(() => { lobby.GameStart(); }); break; } }