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; } } }
//quit button private void button1_Click(object sender, EventArgs e) { PacketData.QuitPacket packet = new PacketData.QuitPacket(); _client.TCPSend(packet); }
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; } } }