Example #1
0
        private void TcpProcessServerResponse()
        {
            try
            {
                int numberOfBytes = 0;
                while ((numberOfBytes = reader.ReadInt32()) != -1)
                {
                    byte[]       buffer       = reader.ReadBytes(numberOfBytes);
                    MemoryStream memoryStream = new MemoryStream(buffer);
                    Packet       packet       = formatter.Deserialize(memoryStream) as Packet;
                    switch (packet.packetType)
                    {
                    case PacketType.LOGIN:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Login' Packet Received");
                        LoginPacket loginPacket = (LoginPacket)packet;
                        ServerKey = loginPacket.PublicKey;
                        break;

                    case PacketType.ENCRYPTED_ADMIN:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Admin' Packet Received");
                        EncryptedAdminPacket adminPacket = (EncryptedAdminPacket)packet;
                        clientForm.adminConnected = BitConverter.ToBoolean(adminPacket.adminConnected, 0);
                        break;

                    case PacketType.ENCRYPTED_SERVER:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Server' Packet Received");
                        EncryptedServerPacket serverPacket = (EncryptedServerPacket)packet;
                        clientForm.UpdateCommandWindow(DecryptString(serverPacket.message), Color.Black, Color.MediumPurple);
                        break;

                    case PacketType.ENCRYPTED_MESSAGE:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Message' Packet Received");
                        EncryptedMessagePacket encryptedPacket = (EncryptedMessagePacket)packet;
                        clientForm.UpdateChatWindow(DecryptString(encryptedPacket.message), "left", Color.Black, Color.MediumPurple);
                        break;

                    case PacketType.ENCRYPTED_PRIVATE_MESSAGE:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Private Message' Packet Received");
                        EncryptedPrivateMessagePacket privatePacket = (EncryptedPrivateMessagePacket)packet;
                        clientForm.UpdateChatWindow(DecryptString(privatePacket.message), "left", Color.Black, Color.LightPink);
                        break;

                    case PacketType.ENCRYPTED_NICKNAME:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Nickname' Packet Received");
                        EncryptedNicknamePacket namePacket = (EncryptedNicknamePacket)packet;
                        clientName = DecryptString(namePacket.name);
                        break;

                    case PacketType.ENCRYPTED_CLIENT_LIST:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Client List' Packet Received");
                        EncryptedClientListPacket clientListPacket = (EncryptedClientListPacket)packet;
                        clientForm.UpdateClientList(DecryptString(clientListPacket.name), BitConverter.ToBoolean(clientListPacket.removeText, 0));
                        break;

                    case PacketType.ENCRYPTED_GLOBAL_MUTE:
                        Console.WriteLine("Client [" + clientName + "] TCP 'Global Mute' Packet Received");
                        EncryptedGlobalMutePacket mutePacket = (EncryptedGlobalMutePacket)packet;
                        string mutedClient = DecryptString(mutePacket.clientToMute);
                        if (clientForm.mutedClientsGlobal.Contains(mutedClient))
                        {
                            clientForm.mutedClientsGlobal.Remove(mutedClient);
                            if (mutedClient == clientName)
                            {
                                clientForm.UpdateCommandWindow("You have been unmuted by the Admin.", Color.Black, Color.SkyBlue);
                            }
                        }
                        else
                        {
                            clientForm.mutedClientsGlobal.Add(mutedClient);
                            if (mutedClient == clientName)
                            {
                                clientForm.UpdateCommandWindow("You have been muted globally by the Admin.", Color.Black, Color.IndianRed);
                            }
                        }
                        break;
                    }
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine("Client TCP Read Method Exception: " + exception.Message);
            }
        }
Example #2
0
        private void TcpClientMethod(Client client)
        {
            try
            {
                Packet packet;
                while ((packet = client.TcpRead()) != null)
                {
                    if (packet != null)
                    {
                        switch (packet.packetType)
                        {
                        case PacketType.LOGIN:
                            Console.WriteLine("Server TCP 'Login' Packet Received");
                            LoginPacket loginPacket = (LoginPacket)packet;
                            clients[index - 1].endPoint  = loginPacket.EndPoint;
                            clients[index - 1].ClientKey = loginPacket.PublicKey;
                            client.TcpSend(new LoginPacket(null, client.PublicKey));
                            foreach (KeyValuePair <int, Client> c in clients)
                            {
                                for (int i = 0; i < clientNames.Count; i++)
                                {
                                    if (i == 0)
                                    {
                                        c.Value.TcpSend(new EncryptedClientListPacket(c.Value.EncryptString(clientNames[i]),
                                                                                      BitConverter.GetBytes(true)));
                                    }
                                    else
                                    {
                                        c.Value.TcpSend(new EncryptedClientListPacket(c.Value.EncryptString(clientNames[i]),
                                                                                      BitConverter.GetBytes(false)));
                                    }
                                }
                                c.Value.TcpSend(new EncryptedAdminPacket(BitConverter.GetBytes(adminIsConnected)));
                            }
                            break;

                        case PacketType.ENCRYPTED_ADMIN:
                            Console.WriteLine("Server TCP 'Admin' Packet Received");
                            EncryptedAdminPacket adminPacket = (EncryptedAdminPacket)packet;
                            adminIsConnected = BitConverter.ToBoolean(adminPacket.adminConnected, 0);
                            foreach (KeyValuePair <int, Client> c in clients)
                            {
                                c.Value.TcpSend(adminPacket);
                            }
                            break;

                        case PacketType.ENCRYPTED_MESSAGE:
                            Console.WriteLine("Server TCP 'Message' Packet Received");
                            EncryptedMessagePacket encryptedPacket = (EncryptedMessagePacket)packet;
                            string decryptedMessage = client.DecryptString(encryptedPacket.message);
                            foreach (KeyValuePair <int, Client> c in clients)
                            {
                                if (c.Value != client)
                                {
                                    byte[] encryptedMessage = c.Value.EncryptString("[" + client.name + "]: " + decryptedMessage);
                                    c.Value.TcpSend(new EncryptedMessagePacket(encryptedMessage));
                                }
                            }
                            break;

                        case PacketType.ENCRYPTED_PRIVATE_MESSAGE:
                            Console.WriteLine("Server TCP 'Private Message' Packet Received");
                            EncryptedPrivateMessagePacket inPrivatePacket = (EncryptedPrivateMessagePacket)packet;
                            string inPrivateMessage = client.DecryptString(inPrivatePacket.message);
                            string inPrivateName    = client.DecryptString(inPrivatePacket.name);
                            foreach (KeyValuePair <int, Client> c in clients)
                            {
                                if (c.Value.name == inPrivateName)
                                {
                                    c.Value.TcpSend(new EncryptedPrivateMessagePacket(c.Value.EncryptString(inPrivateMessage), null));
                                }
                            }
                            break;

                        case PacketType.ENCRYPTED_NICKNAME:
                            Console.WriteLine("Server TCP 'Nickname' Packet Received");
                            EncryptedNicknamePacket namePacket = (EncryptedNicknamePacket)packet;
                            client.name = client.DecryptString(namePacket.name);
                            if (client.name != "")
                            {
                                client.TcpSend(new EncryptedNicknamePacket(client.EncryptString(client.name)));
                            }
                            else
                            {
                                client.TcpSend(new EncryptedNicknamePacket(null));
                            }
                            break;

                        case PacketType.ENCRYPTED_CLIENT_LIST:
                            Console.WriteLine("Server TCP 'Client List' Packet Received");
                            EncryptedClientListPacket clientListPacket = (EncryptedClientListPacket)packet;
                            string clientListName = client.DecryptString(clientListPacket.name);
                            bool   clientListBool = BitConverter.ToBoolean(clientListPacket.removeText, 0);
                            if (!clientListBool)
                            {
                                clientNames.Add(clientListName);
                            }
                            else
                            {
                                clientNames.Remove(clientListName);
                            }
                            foreach (KeyValuePair <int, Client> c in clients)
                            {
                                for (int i = 0; i < clientNames.Count; i++)
                                {
                                    if (i == 0)
                                    {
                                        c.Value.TcpSend(new EncryptedClientListPacket(c.Value.EncryptString(clientNames[i]),
                                                                                      BitConverter.GetBytes(true)));
                                    }
                                    else
                                    {
                                        c.Value.TcpSend(new EncryptedClientListPacket(c.Value.EncryptString(clientNames[i]),
                                                                                      BitConverter.GetBytes(false)));
                                    }
                                }
                            }
                            break;

                        case PacketType.ENCRYPTED_GLOBAL_MUTE:
                            Console.WriteLine("Server TCP 'Global Mute' Packet Received");
                            EncryptedGlobalMutePacket mutePacket = (EncryptedGlobalMutePacket)packet;
                            string mutedClient = client.DecryptString(mutePacket.clientToMute);
                            foreach (KeyValuePair <int, Client> c in clients)
                            {
                                c.Value.TcpSend(new EncryptedGlobalMutePacket(c.Value.EncryptString(mutedClient)));
                            }
                            break;

                        case PacketType.ENCRYPTED_GAME:
                            Console.WriteLine("Server TCP 'Game' Packet Received");
                            EncryptedGamePacket gamePacket = (EncryptedGamePacket)packet;
                            string userGuess = client.DecryptString(gamePacket.userGuess);
                            if (gameStarted)
                            {
                                if (userGuess.Equals(choiceToWin, StringComparison.InvariantCultureIgnoreCase))
                                {
                                    gameStarted = false;
                                    client.TcpSend(new EncryptedServerPacket(client.EncryptString("Correct! You have won the game!\nEnter '/game start' to start new game.")));
                                    foreach (KeyValuePair <int, Client> c in clients)
                                    {
                                        if (c.Value != client)
                                        {
                                            c.Value.TcpSend(new EncryptedServerPacket(c.Value.EncryptString(client.name + " has won the game!")));
                                        }
                                    }
                                }
                                else
                                {
                                    client.TcpSend(new EncryptedServerPacket(client.EncryptString("Incorrect! Keep guessing.")));
                                }
                            }
                            else if (userGuess.Equals("start", StringComparison.InvariantCultureIgnoreCase))
                            {
                                StartNewGame();
                                gameStarted = true;
                                client.TcpSend(new EncryptedServerPacket(client.EncryptString("You have started a new game.\nChoose from [rock], [paper] [scissors].")));
                                foreach (KeyValuePair <int, Client> c in clients)
                                {
                                    if (c.Value != client)
                                    {
                                        c.Value.TcpSend(new EncryptedServerPacket(c.Value.EncryptString(client.name + " has started a new game.\nChoose from [rock], [paper] [scissors].")));
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine("Server TCP Read Method Exception: " + exception.Message);
            }
            finally
            {
                client.Close();
                clients[index - 1].Close();
                clients.TryRemove(index, out client);
            }
        }