Пример #1
0
        void TCPClientMethod(object clientObj)
        {
            int    numOfIncomingBytes = 0;
            Client client             = (Client)clientObj;

            while ((numOfIncomingBytes = client.reader.ReadInt32()) != 0)
            {
                byte[] buffer = client.reader.ReadBytes(numOfIncomingBytes);
                memoryStream.Write(buffer, 0, numOfIncomingBytes);
                memoryStream.Position = 0;

                binaryFormatter.Binder = new MyBinder.MyBinder();
                PacketData.Packet rawPacket = (PacketData.Packet)binaryFormatter.Deserialize(memoryStream);

                memoryStream.SetLength(0);
                switch (rawPacket.type)
                {
                case PacketData.PacketType.CHATMESSAGE:
                    PacketData.ChatMessagePacket packet = (PacketData.ChatMessagePacket)rawPacket;

                    if (packet.message.Substring(0, 1) == "/")
                    {
                        Commands(packet, client);
                    }
                    if (client.gameID != -1 && games[client.gameID].state == GameState.GS_ACTIVE)
                    {
                        if (games[client.gameID].type == GameType.GT_RPS)
                        {
                            if (client.id == games[client.gameID].clientID1 && games[client.gameID].client1Input == null)
                            {
                                games[client.gameID].client1Input = packet.message;
                            }
                            if (client.id == games[client.gameID].clientID2 && games[client.gameID].client2Input == null)
                            {
                                games[client.gameID].client2Input = packet.message;
                            }
                            PlayRPS(games[client.gameID].clientID1, games[client.gameID].clientID2);
                        }
                    }
                    else
                    {
                        foreach (Client element in clients)
                        {
                            if (element.gameID == -1)
                            {
                                PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket(client.name + ": " + packet.message);
                                send(packet1, element);
                            }
                        }
                    }
                    break;

                case PacketData.PacketType.NICKNAME:
                    PacketData.NickNamePakcet    nickNamePacket = (PacketData.NickNamePakcet)rawPacket;
                    PacketData.ChatMessagePacket newPacket      = new PacketData.ChatMessagePacket(client.Rename(client, nickNamePacket.nickName));

                    foreach (Client element in clients)
                    {
                        send(newPacket, element);
                    }

                    break;

                case PacketData.PacketType.SNAKEGAME:

                    foreach (Game element in games)
                    {
                        if (element.clientID1 == client.id)
                        {
                            PacketData.GameMovement gamePacket = (PacketData.GameMovement)rawPacket;
                            PlaySnake(element.clientID1, element.clientID2, gamePacket.input, "1");
                        }
                        else if (element.clientID2 == client.id)
                        {
                            PacketData.GameMovement gamePacket = (PacketData.GameMovement)rawPacket;
                            PlaySnake(element.clientID1, element.clientID2, gamePacket.input, "2");
                        }
                    }

                    break;

                case PacketData.PacketType.SCORE:
                    foreach (Game element in games)
                    {
                        if (element.clientID1 == client.id || element.clientID2 == client.id)
                        {
                            PacketData.Score scorepacket = (PacketData.Score)rawPacket;
                            SnakeScore(element.clientID1, element.clientID2, scorepacket, client);
                        }
                    }
                    break;

                case PacketData.PacketType.APPLEPOS:
                    foreach (Game element in games)
                    {
                        if (element.clientID1 == client.id || element.clientID2 == client.id)
                        {
                            SnakeGameApple(element.clientID1, element.clientID2);
                        }
                    }
                    break;

                case PacketData.PacketType.PLAYER:
                    foreach (Game element in games)
                    {
                        if (element.clientID1 == client.id)
                        {
                            PacketData.Player playerPacket = new PacketData.Player(1);
                            send(playerPacket, client);
                        }
                        else if (element.clientID2 == client.id)
                        {
                            PacketData.Player playerPacket = new PacketData.Player(2);
                            send(playerPacket, client);
                        }
                    }
                    break;

                case PacketData.PacketType.LOGIN:
                    PacketData.LoginPacket login = (PacketData.LoginPacket)rawPacket;
                    HandlePacket(client, login.endPoint);
                    break;

                case PacketData.PacketType.STOPGAME:
                    PacketData.StopGame stop = (PacketData.StopGame)rawPacket;
                    send(stop, client);
                    break;

                case PacketData.PacketType.QUIT:

                    PacketData.QuitPacket quit = (PacketData.QuitPacket)rawPacket;
                    string message             = client.name + " " + quit.message;
                    PacketData.ChatMessagePacket newMessage = new PacketData.ChatMessagePacket(message);
                    //PacketData.QuitPacket quitMessage = new PacketData.QuitPacket(client.name + quit.message);
                    //send(quitMessage, client);
                    client.tcpSocket.Close();
                    clients.Remove(client);

                    foreach (Client element in clients)
                    {
                        send(newMessage, element);
                    }
                    break;
                }
            }
        }
Пример #2
0
        void Commands(PacketData.ChatMessagePacket packet, Client client)
        {
            string command;
            int    space = -1;

            if (packet.message.Contains(" "))
            {
                space   = packet.message.IndexOf(" ");
                command = packet.message.Substring(0, space);
            }
            else
            {
                command = packet.message;
            }

            if (command == "/rps")
            {
                string name = packet.message.Substring(space + 1, packet.message.Length - 5);
                RPS(name, client);
            }
            else if (command == "/snakeGame")
            {
                string name = packet.message.Substring(space + 1, packet.message.Length - 11);
                Snake(name, client);
            }
            else if (command == "/accept")
            {
                if (client.gameID == -1)
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have nothing to accept");
                    send(packet1, client);
                }
                else
                {
                    games[client.gameID].state = GameState.GS_ACTIVE;
                    if (games[client.gameID].type == GameType.GT_RPS)
                    {
                        PlayRPS(games[client.gameID].clientID1, games[client.gameID].clientID2);
                    }
                    else if (games[client.gameID].type == GameType.GT_SNAKE)
                    {
                        StartSnake(games[client.gameID].clientID1, games[client.gameID].clientID2);
                    }
                }
            }
            else if (command == "/decline")
            {
                if (client.gameID != -1)
                {
                    foreach (Client element in clients)
                    {
                        if (element.gameID == client.gameID)
                        {
                            PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("Game has been declined");
                            send(packet1, element);
                        }
                    }

                    if (client.id == games[client.gameID].clientID1)
                    {
                        clients[games[client.gameID].clientID2].gameID = -1;
                        games.Remove(games[client.gameID]);
                        client.gameID = -1;
                    }
                    else if (client.id == games[client.gameID].clientID2)
                    {
                        clients[games[client.gameID].clientID1].gameID = -1;
                        games.Remove(games[client.gameID]);
                        client.gameID = -1;
                    }
                }
                else
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have nothing to decline");
                    send(packet1, client);
                }
            }
            else if (command == "/continue")
            {
                if (client.gameID != -1)
                {
                    games[client.gameID].state = GameState.GS_ACTIVE;
                    PlayRPS(games[client.gameID].clientID1, games[client.gameID].clientID2);
                }
                else
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have noting to continue");
                    send(packet1, client);
                }
            }
            else if (command == "/stop")
            {
                if (client.gameID != -1)
                {
                    if (games[client.gameID].type == GameType.GT_RPS)
                    {
                        PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have stopped playing RPS");
                        send(packet1, client);

                        packet1 = new PacketData.ChatMessagePacket(client.name + " has to stop playing RPS.  You have stopped playing RPS");
                        foreach (Client element in clients)
                        {
                            if (client.gameID == element.gameID && client.id != element.id)
                            {
                                send(packet1, element);
                            }
                        }

                        if (client.id == games[client.gameID].clientID1)
                        {
                            clients[games[client.gameID].clientID2].gameID = -1;
                            games.Remove(games[client.gameID]);
                            client.gameID = -1;
                        }
                        else if (client.id == games[client.gameID].clientID2)
                        {
                            clients[games[client.gameID].clientID1].gameID = -1;
                            games.Remove(games[client.gameID]);
                            client.gameID = -1;
                        }
                    }
                    if (games[client.gameID].type == GameType.GT_SNAKE)
                    {
                        PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have stopped playing snake");
                        send(packet1, client);

                        packet1 = new PacketData.ChatMessagePacket(client.name + " has to stop playing snake.  You have stopped playing RPS");
                        foreach (Client element in clients)
                        {
                            if (client.gameID == element.gameID && client.id != element.id)
                            {
                                send(packet1, element);
                            }
                        }

                        PacketData.StopGame stop = new PacketData.StopGame();
                        send(stop, clients[games[client.gameID].clientID1]);
                        send(stop, clients[games[client.gameID].clientID2]);

                        if (client.id == games[client.gameID].clientID1)
                        {
                            clients[games[client.gameID].clientID2].gameID = -1;
                            games.Remove(games[client.gameID]);
                            client.gameID = -1;
                        }
                        else if (client.id == games[client.gameID].clientID2)
                        {
                            clients[games[client.gameID].clientID1].gameID = -1;
                            games.Remove(games[client.gameID]);
                            client.gameID = -1;
                        }
                    }
                }
                else
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have nothing to stop");
                    send(packet1, client);
                }
            }
            else
            {
                PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("INVALID COMMAND");
                send(packet1, client);
            }
        }
Пример #3
0
 public void CloseForm()
 {
     _client.UdpReaderThread.Abort();
     PacketData.StopGame stop = new PacketData.StopGame();
     _client.TCPSend(stop);
 }