Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
            }
        }