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)); client.TcpSend(new PenPacket(startColor)); foreach (KeyValuePair <int, Client> c in clients) { if (c.Value != client) { c.Value.TcpSend(new PenPacket(Color.Black)); } 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_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.PEN: Console.WriteLine("Server TCP 'Pen' Packet Received"); PenPacket penPacket = (PenPacket)packet; startColor = penPacket.penColor; foreach (KeyValuePair <int, Client> c in clients) { c.Value.TcpSend(penPacket); } break; case PacketType.ENCRYPTED_ENABLE_PAINTING: Console.WriteLine("Server TCP 'Enable Painting' Packet Received"); EncryptedEnablePaintingPacket enablePaintingPacket = (EncryptedEnablePaintingPacket)packet; string enablePaintingString = client.DecryptString(enablePaintingPacket.playerName); bool enablePaintingBool = BitConverter.ToBoolean(enablePaintingPacket.enablePainting, 0); foreach (KeyValuePair <int, Client> c in clients) { if (c.Value != client) { c.Value.TcpSend(new EncryptedEnablePaintingPacket(c.Value.EncryptString(enablePaintingString), BitConverter.GetBytes(enablePaintingBool))); } } break; case PacketType.ENCRYPTED_CLEAR_SINGLE: Console.WriteLine("Server TCP 'Clear Single' Packet Received"); EncryptedClearSinglePacket clearSinglePacket = (EncryptedClearSinglePacket)packet; string clearSingleString = client.DecryptString(clearSinglePacket.playerName); foreach (KeyValuePair <int, Client> c in clients) { if (c.Value != client) { c.Value.TcpSend(new EncryptedClearSinglePacket(c.Value.EncryptString(clearSingleString))); } } break; case PacketType.CLEAR_GLOBAL: Console.WriteLine("Server TCP 'Clear Global' Packet Received"); ClearGlobalPacket clearGlobalPacket = (ClearGlobalPacket)packet; foreach (KeyValuePair <int, Client> c in clients) { c.Value.TcpSend(clearGlobalPacket); } break; } } } } catch (Exception exception) { Console.WriteLine("Server TCP Read Method Exception: " + exception.Message); } finally { client.Close(); clients.TryRemove(index, out client); } }
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); } }
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; paintForm.adminConnected = BitConverter.ToBoolean(adminPacket.adminConnected, 0); break; case PacketType.ENCRYPTED_CLIENT_LIST: Console.WriteLine("Client [" + clientName + "] TCP 'Client List' Packet Received"); EncryptedClientListPacket clientListPacket = (EncryptedClientListPacket)packet; paintForm.UpdatePlayerList(DecryptString(clientListPacket.name), BitConverter.ToBoolean(clientListPacket.removeText, 0)); break; case PacketType.PEN: Console.WriteLine("Client [" + clientName + "] TCP 'Pen' Packet Received"); PenPacket penPacket = (PenPacket)packet; paintForm.UpdatePen(penPacket.penColor); break; case PacketType.ENCRYPTED_ENABLE_PAINTING: Console.WriteLine("Client [" + clientName + "] TCP 'Enable Painting' Packet Received"); EncryptedEnablePaintingPacket enablePaintingPacket = (EncryptedEnablePaintingPacket)packet; string enablePaintingString = DecryptString(enablePaintingPacket.playerName); bool enablePaintingBool = BitConverter.ToBoolean(enablePaintingPacket.enablePainting, 0); if (enablePaintingString == clientName) { paintForm.penEnabled = enablePaintingBool; if (enablePaintingBool == true) { paintForm.UpdateServerWindow("Admin has enabled painting!", Color.Black, Color.SkyBlue); } else { paintForm.UpdateServerWindow("Admin has disabled painting!", Color.Black, Color.IndianRed); } } break; case PacketType.ENCRYPTED_CLEAR_SINGLE: Console.WriteLine("Client [" + clientName + "] TCP 'Clear Single' Packet Received"); EncryptedClearSinglePacket clearSinglePacket = (EncryptedClearSinglePacket)packet; string clearSingleString = DecryptString(clearSinglePacket.playerName); if (clearSingleString == clientName) { paintForm.UpdateServerWindow("Admin cleared the canvas!", Color.Black, Color.IndianRed); paintForm.ClearCanvas(); } break; case PacketType.CLEAR_GLOBAL: Console.WriteLine("Client [" + clientName + "] TCP 'Clear Global' Packet Received"); paintForm.UpdateServerWindow("Admin cleared the canvas!", Color.Black, Color.IndianRed); paintForm.ClearCanvas(); break; } } } catch (Exception exception) { Console.WriteLine("Client TCP Read Method Exception: " + exception.Message); } }
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); } }