Esempio n. 1
0
        void Snake(string name, Client client)
        {
            bool found = false;

            foreach (Client element in clients)
            {
                if (element.name == name && element.gameID == -1)
                {
                    found = true;
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You have challanged " + element.name);
                    send(packet1, client);
                    packet1 = new PacketData.ChatMessagePacket(client.name + " has challanged you to a game of Snake. Do you accept? /accept or /decline");
                    send(packet1, element);

                    games.Add(new Game(GameType.GT_SNAKE, client.id, element.id));

                    client.gameID  = games.Count - 1;
                    element.gameID = games.Count - 1;
                }
            }

            if (found == false)
            {
                PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("Person you are trying to play with is either in a game or do not exist");
                send(packet1, client);
            }
        }
Esempio n. 2
0
        private void ProcessEndConnectionCommand(List <String> commandParameters, int clientID, ref List <int> recievers, ref List <String> messages)
        {
            String name = _clients[clientID].GetName();

            SendPacket(new PacketData.Packet(PacketData.PacketType.TERMINATE_CLIENT), _clients[clientID]);

            Console.WriteLine(name + " disconnected.");

            for (int i = 0; i < _games.Count; i++)
            {
                if (_games[i].GetClient1().GetID() == clientID || _games[i].GetClient2().GetID() == clientID)
                {
                    _games[i].Close();
                    _games.RemoveAt(i);
                    break;
                }
            }

            _clients[clientID].SetShouldTerminate(true);

            PacketData.ChatMessagePacket sendPacket = new PacketData.ChatMessagePacket("<AAAA00[" + name + "]><777700 left the server>");

            for (int i = 0; i < _clients.Count; i++)
            {
                SendPacket(sendPacket, _clients[i]);
            }

            return;
        }
Esempio n. 3
0
        public void Start()
        {
            while (true)
            {
                tcpListener.Start(backlog);
                Console.WriteLine("started listening");

                Socket tcpSocket = tcpListener.AcceptSocket();
                Client client    = new Client(tcpSocket);
                client.id   = clients.Count;
                client.name = "Client " + client.id.ToString();
                clients.Add(client);

                Console.WriteLine("Connection Accepted");

                foreach (Client element in clients)
                {
                    PacketData.ChatMessagePacket packet = new PacketData.ChatMessagePacket(client.name + " joined the chat");
                    send(packet, element);
                }

                Thread tcp = new Thread(new ParameterizedThreadStart(TCPClientMethod));
                tcp.Start(client);
            }
        }
Esempio n. 4
0
        //submit text button
        private void SubmitButton_Click(object sender, EventArgs e)
        {
            string input = SubmitText.Text;

            PacketData.ChatMessagePacket packet = new PacketData.ChatMessagePacket(SubmitText.Text);
            _client.TCPSend(packet);
            SubmitText.Clear();
        }
Esempio n. 5
0
        private void ProcessServerResponse()
        {
            int numOfIncomingBytes = 0;

            while ((numOfIncomingBytes = _binaryReader.ReadInt32()) != 0)
            {
                byte[] buffer = _binaryReader.ReadBytes(numOfIncomingBytes);
                System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                memoryStream.Position = 0;
                memoryStream.Write(buffer, 0, numOfIncomingBytes);
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                memoryStream.Position = 0;
                PacketData.Packet rawPacket = binaryFormatter.Deserialize(memoryStream) as PacketData.Packet;

                switch (rawPacket.type)
                {
                case PacketData.PacketType.CHAT_MESSAGE:
                    PacketData.ChatMessagePacket chatPacket = (PacketData.ChatMessagePacket)rawPacket;
                    _chatWindow.UpdateChatWindow(chatPacket.message);
                    break;

                case PacketData.PacketType.CLEAR_WINDOW:
                    _chatWindow.ClearChatWindow();
                    break;

                case PacketData.PacketType.TERMINATE_CLIENT:
                    _listenerThread.Abort();
                    break;

                case PacketData.PacketType.BOMBERMAN_SERVER_TO_CLIENT:
                    PacketData.BombermanServerToClientPacket bombermanServerToClientPacket = (PacketData.BombermanServerToClientPacket)rawPacket;
                    _gameWindow.UpdateOtherPlayerWithPacket(bombermanServerToClientPacket.otherPlayer);
                    _gameWindow.AddOtherPlayersBombs(bombermanServerToClientPacket.otherPlayerBombs);
                    break;

                case PacketData.PacketType.OPEN_BOMBERMAN_WINDOW:
                    PacketData.OpenBombermanWindowPacket openBomberManWindowPacket = (PacketData.OpenBombermanWindowPacket)rawPacket;
                    _gameWindowThread = new System.Threading.Thread(() => RunBombermanGame(openBomberManWindowPacket.isPlayerOne));
                    _gameWindowThread.Start();
                    break;
                }
            }
        }
Esempio n. 6
0
        public void ProcessServerResponse()
        {
            int numOfIncomingBytes = 0;

            while ((numOfIncomingBytes = reader.ReadInt32()) != 0)
            {
                byte[] buffer = 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;
                    messageForm.UpdateChatWindow(packet.message);
                    break;

                case PacketData.PacketType.GAME:
                    startSnakeGame();
                    break;

                case PacketData.PacketType.SNAKEGAME:
                    Socket udpSocket = udpClient.Client;
                    PacketData.LoginPacket loginpacket = new PacketData.LoginPacket((IPEndPoint)udpSocket.LocalEndPoint);
                    TCPSend(loginpacket);
                    PacketData.GameMovement gamemovement = (PacketData.GameMovement)rawPacket;
                    snakeGame.UpdateSnake(gamemovement.input);
                    break;

                case PacketData.PacketType.SCORE:
                    PacketData.Score score = (PacketData.Score)rawPacket;
                    snakeGame.UpdateScore(score.input);
                    break;

                case PacketData.PacketType.APPLEPOS:
                    PacketData.ApplePos pos = (PacketData.ApplePos)rawPacket;
                    snakeGame.SetApplePos(pos.pos);
                    break;

                case PacketData.PacketType.PLAYER:
                    PacketData.Player player = (PacketData.Player)rawPacket;
                    snakeGame.startingText(player.player);
                    break;

                case PacketData.PacketType.STOPGAME:
                    snakeGame.Close();
                    break;

                case PacketData.PacketType.QUIT:

                    TCPStop();
                    //PacketData.QuitPacket quitPacket = (PacketData.QuitPacket)rawPacket;
                    //messageForm.UpdateChatWindow(quitPacket.message);
                    break;

                default:

                    break;
                }
            }
        }
Esempio n. 7
0
        void UDPServerResponse()
        {
            //IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
            //Byte[] receiveBytes = udpClient.Receive(ref remoteIpEndPoint);

            int numOfIncomingBytes = 0;

            byte[] bytes = new byte[256];

            while ((numOfIncomingBytes = reader.ReadInt32()) != 0)
            {
                byte[] buffer = 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.LOGIN:
                    PacketData.LoginPacket loginPacket = (PacketData.LoginPacket)rawPacket;
                    HandlePacket(loginPacket.endPoint);
                    break;

                case PacketData.PacketType.CHATMESSAGE:
                    PacketData.ChatMessagePacket packet = (PacketData.ChatMessagePacket)rawPacket;
                    messageForm.UpdateChatWindow(packet.message);
                    break;

                case PacketData.PacketType.GAME:
                    startSnakeGame();
                    break;

                case PacketData.PacketType.SNAKEGAME:
                    PacketData.GameMovement gameMovement = (PacketData.GameMovement)rawPacket;
                    snakeGame.UpdateSnake(gameMovement.input);
                    break;

                case PacketData.PacketType.SCORE:
                    PacketData.Score score = (PacketData.Score)rawPacket;
                    snakeGame.UpdateScore(score.input);
                    break;

                case PacketData.PacketType.APPLEPOS:
                    PacketData.ApplePos pos = (PacketData.ApplePos)rawPacket;
                    snakeGame.SetApplePos(pos.pos);
                    break;

                case PacketData.PacketType.PLAYER:
                    PacketData.Player player = (PacketData.Player)rawPacket;
                    snakeGame.startingText(player.player);
                    break;

                case PacketData.PacketType.STOPGAME:
                    snakeGame.CloseForm();
                    //PacketData.StopGame stopgame = new PacketData.StopGame();
                    //TCPSend(stopgame);
                    //snakeGame.Close();
                    break;

                case PacketData.PacketType.QUIT:
                    UDPStop();
                    break;
                }
            }
        }
Esempio n. 8
0
        private void ClientMethod(object clientObj)
        {
            Client client = (Client)clientObj;

            List <int>    recievers = new List <int>();
            List <String> messages  = new List <String>();

            int numOfIncomingBytes = 0;

            while ((numOfIncomingBytes = client._binaryReader.ReadInt32()) != 0)
            {
                byte[] buffer = client._binaryReader.ReadBytes(numOfIncomingBytes);
                System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
                System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                memoryStream.Position = 0;
                memoryStream.Write(buffer, 0, numOfIncomingBytes);
                memoryStream.Position = 0;
                memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
                PacketData.Packet rawPacket = binaryFormatter.Deserialize(memoryStream) as PacketData.Packet;
                memoryStream.SetLength(0);

                switch (rawPacket.type)
                {
                case PacketData.PacketType.LOGIN:
                    PacketData.LogInPacket loginPacket = (PacketData.LogInPacket)rawPacket;
                    Console.WriteLine(loginPacket.username + " connected.");

                    client.SetName(loginPacket.username);

                    for (int i = 0; i < _clients.Count; i++)
                    {
                        recievers.Add(i);
                        if (i != client.GetID())
                        {
                            messages.Add("<AAAA00[" + loginPacket.username + "]><777700 has joined the server>");
                        }
                        else
                        {
                            String newPlayerMessage = _newPlayerInfo + GetCurrentUsers(client.GetID());
                            messages.Add(newPlayerMessage);
                        }
                    }

                    for (int i = 0; i < recievers.Count; i++)
                    {
                        PacketData.ChatMessagePacket sendPacket = new PacketData.ChatMessagePacket(messages[i]);
                        SendPacket(sendPacket, _clients[recievers[i]]);
                    }

                    break;

                case PacketData.PacketType.END_CONNECTION:
                    List <String> commandParams = new List <String>();
                    ProcessEndConnectionCommand(commandParams, client.GetID(), ref recievers, ref messages);
                    break;

                case PacketData.PacketType.BOMBERMAN_CLIENT_TO_SERVER:
                    PacketData.BombermanClientToServerPacket bombermanClientToServerPacket = (PacketData.BombermanClientToServerPacket)rawPacket;
                    if (client.GetCurrentGame().GetClient1() == client)
                    {
                        SendPacket(new PacketData.BombermanServerToClientPacket(bombermanClientToServerPacket.bombsPlaced, bombermanClientToServerPacket.player), client.GetCurrentGame().GetClient2());
                        //SendPacket(new PacketData.BombermanServerToClientPacket(bombermanClientToServerPacket.player), client.GetCurrentGame().GetClient2());
                    }
                    else
                    {
                        SendPacket(new PacketData.BombermanServerToClientPacket(bombermanClientToServerPacket.bombsPlaced, bombermanClientToServerPacket.player), client.GetCurrentGame().GetClient1());
                        //SendPacket(new PacketData.BombermanServerToClientPacket(bombermanClientToServerPacket.player), client.GetCurrentGame().GetClient1());
                    }
                    break;

                case PacketData.PacketType.CHAT_MESSAGE:
                    PacketData.ChatMessagePacket packet = (PacketData.ChatMessagePacket)rawPacket;

                    recievers.Clear();
                    messages.Clear();

                    GetRefinedMessage(packet.message, client.GetID(), ref recievers, ref messages);

                    bool sendToAll = false;
                    if (recievers.Count == 0)
                    {
                        sendToAll = true;
                    }

                    if (sendToAll)
                    {
                        PacketData.ChatMessagePacket sendPacket = new PacketData.ChatMessagePacket(messages[0]);

                        for (int i = 0; i < _clients.Count; i++)
                        {
                            SendPacket(sendPacket, _clients[i]);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < recievers.Count; i++)
                        {
                            PacketData.ChatMessagePacket sendPacket = new PacketData.ChatMessagePacket(messages[i]);
                            SendPacket(sendPacket, _clients[recievers[i]]);
                        }
                    }
                    break;
                }

                if (_clients[client.GetID()].GetShouldTerminate())
                {
                    System.Threading.Thread listenerThread = _clients[client.GetID()]._listenerThread;
                    _clients.Remove(_clients[client.GetID()]);

                    for (int i = client.GetID(); i < _clients.Count; i++)
                    {
                        _clients[i].SetID(_clients[i].GetID() - 1);
                    }

                    listenerThread.Abort();
                }
            }
            client.Close();
        }
Esempio n. 9
0
        void UDPClientMethod(object clientObj)
        {
            int    numOfIncomingBytes = 0;
            Client client             = (Client)clientObj;

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

                IPEndPoint endpoint     = (IPEndPoint)(client.udpSocket.RemoteEndPoint);
                int        receiveBytes = client.udpSocket.Receive(buffer);
                memoryStream.Write(buffer, 0, receiveBytes);

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

                memoryStream.SetLength(0);

                switch (rawPacket.type)
                {
                case PacketData.PacketType.LOGIN:
                    PacketData.LoginPacket packet = (PacketData.LoginPacket)rawPacket;
                    HandlePacket(client, packet.endPoint);
                    break;

                case PacketData.PacketType.CHATMESSAGE:
                    PacketData.ChatMessagePacket chatMessage = (PacketData.ChatMessagePacket)rawPacket;

                    if (chatMessage.message.Substring(0, 1) == "/")
                    {
                        Commands(chatMessage, 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 = chatMessage.message;
                            }
                            if (client.id == games[client.gameID].clientID2 && games[client.gameID].client2Input == null)
                            {
                                games[client.gameID].client2Input = chatMessage.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 + ": " + chatMessage.message);
                                UDPSend(packet1, 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.NICKNAME:
                    PacketData.NickNamePakcet    nickNamePacket = (PacketData.NickNamePakcet)rawPacket;
                    PacketData.ChatMessagePacket newPacket      = new PacketData.ChatMessagePacket(client.Rename(client, nickNamePacket.nickName));

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

                    break;

                case PacketData.PacketType.STOPGAME:
                    PacketData.QuitPacket stop = (PacketData.QuitPacket)rawPacket;
                    send(stop, client);
                    break;
                }
            }
        }
Esempio n. 10
0
        void PlayRPS(int clientID1, int clientID2)
        {
            string rock     = "rock";
            string paper    = "paper";
            string scissors = "scissors";

            string player1 = games[clients[clientID1].gameID].client1Input;
            string player2 = games[clients[clientID1].gameID].client2Input;

            if (games[clients[clientID1].gameID].state == GameState.GS_ACTIVE)
            {
                if (player1 == null || player2 == null)
                {
                    if (player1 == null && player2 == null)
                    {
                        PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("Rock, Paper or Scissors");
                        send(packet1, clients[clientID1]);

                        packet1 = new PacketData.ChatMessagePacket("Rock, Paper or Scissors");
                        send(packet1, clients[clientID2]);
                    }
                }

                else if (player1 == player2)
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("Draw. You both picked " + player1);
                    send(packet1, clients[clientID1]);

                    packet1 = new PacketData.ChatMessagePacket("Draw. You both picked " + player2);
                    send(packet1, clients[clientID2]);

                    games[clients[clientID1].gameID].state = GameState.GS_GAMEOVER;
                }
                else if (player1 == rock && player2 == scissors || player1 == paper && player2 == rock || player1 == scissors && player2 == paper)
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You Win. You picked " + player1 + " and " + clients[clientID2].name + " picked " + player2);
                    send(packet1, clients[clientID1]);

                    packet1 = new PacketData.ChatMessagePacket("You Lose. You picked " + player2 + " and " + clients[clientID1].name + " picked " + player1);
                    send(packet1, clients[clientID2]);

                    games[clients[clientID1].gameID].client1Score++;

                    games[clients[clientID1].gameID].state = GameState.GS_GAMEOVER;
                }
                else if (player2 == rock && player1 == scissors || player2 == paper && player1 == rock || player2 == scissors && player1 == paper)
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("You Lose. You picked " + player1 + " and " + clients[clientID2].name + " picked " + player2);
                    send(packet1, clients[clientID1]);

                    packet1 = new PacketData.ChatMessagePacket("You Win. You picked " + player2 + " and " + clients[clientID1].name + " picked " + player1);
                    send(packet1, clients[clientID2]);

                    games[clients[clientID2].gameID].client2Score++;

                    games[clients[clientID1].gameID].state = GameState.GS_GAMEOVER;
                }
                else
                {
                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("Someone played a invalid option. please re-enter choice");
                    send(packet1, clients[clientID1]);

                    packet1 = new PacketData.ChatMessagePacket("Someone played a invalid option. please re-enter choice");
                    send(packet1, clients[clientID2]);

                    games[clients[clientID1].gameID].client1Input = null;
                    games[clients[clientID2].gameID].client2Input = null;
                }

                if (games[clients[clientID1].gameID].state == GameState.GS_GAMEOVER)
                {
                    games[clients[clientID1].gameID].client1Input = null;
                    games[clients[clientID2].gameID].client2Input = null;

                    PacketData.ChatMessagePacket packet1 = new PacketData.ChatMessagePacket("Points: " + clients[clientID1].name + ": " + games[clients[clientID1].gameID].client1Score + " " + clients[clientID2].name + ": " + games[clients[clientID1].gameID].client2Score);
                    send(packet1, clients[clientID1]);

                    packet1 = new PacketData.ChatMessagePacket("Points: " + clients[clientID1].name + ": " + games[clients[clientID1].gameID].client1Score + " " + clients[clientID2].name + ": " + games[clients[clientID1].gameID].client2Score);
                    send(packet1, clients[clientID2]);

                    packet1 = new PacketData.ChatMessagePacket("To stop playing enter /stop or to contiue enter /continue");
                    send(packet1, clients[clientID1]);

                    packet1 = new PacketData.ChatMessagePacket("To stop playing enter /stop or to contiue enter /continue");
                    send(packet1, clients[clientID2]);
                }
            }
        }
Esempio n. 11
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);
            }
        }
Esempio n. 12
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;
                }
            }
        }