public void UDPSend(PacketData.Packet packet) { binaryFormatter.Serialize(memoryStream, packet); memoryStream.Flush(); byte[] buffer = memoryStream.GetBuffer(); memoryStream.SetLength(0); udpClient.Send(buffer, buffer.Length); }
public void UDPSend(PacketData.Packet packet, Client client) { binaryFormatter.Serialize(memoryStream, packet); memoryStream.Flush(); byte[] buffer = memoryStream.GetBuffer(); memoryStream.SetLength(0); client.udpSocket.SendTo(buffer, client.udpSocket.LocalEndPoint); }
public void TCPSend(PacketData.Packet data) { binaryFormatter.Serialize(memoryStream, data); memoryStream.Flush(); byte[] buffer = memoryStream.GetBuffer(); memoryStream.SetLength(0); writer.Write(buffer.Length); writer.Write(buffer); writer.Flush(); }
public void TCPSendPacket(PacketData.Packet packet) { 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; binaryFormatter.Serialize(memoryStream, packet); byte[] buffer = memoryStream.GetBuffer(); _binaryWriter.Write(buffer.Length); _binaryWriter.Write(buffer); }
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; } } }
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; } } }
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; } } }
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(); }
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; } } }
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; } } }