static ClientBombChangePacket GetBombRequestPacketFromBytes(byte[] buffer) { ClientBombChangePacket packet = new ClientBombChangePacket(); int size = Marshal.SizeOf(packet); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(buffer, 0, ptr, size); packet = (ClientBombChangePacket)Marshal.PtrToStructure(ptr, packet.GetType()); Marshal.FreeHGlobal(ptr); return(packet); }
public static void RequestHandler(int bytesRead, StateObject state, Socket handler) { int RequestSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(ClientRequestPacket)); int BombRequestSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(ClientBombChangePacket)); if (bytesRead == RequestSize) { ClientRequestPacket dataReceived = GetRequestPacketFromBytes(state.buffer); if (!CheckPlayerLogged(dataReceived.ID)) { return; } ClientRequest request = (ClientRequest)dataReceived.request; if (request == ClientRequest.Request_GetPlayersInfo) { GetPlayersInfoHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_DisconnectPlayer) { LogOutHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_StartBattleScene) { StartBattleSceneHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_PlayerReady) { StartBattleHandler(handler, dataReceived.ID); } else if (request == ClientRequest.Request_TimeOver) { TimeOverHandler(handler, dataReceived.ID); } } else if (bytesRead == BombRequestSize) { ClientBombChangePacket dataReceived = GetBombRequestPacketFromBytes(state.buffer); ChangePlayerBombHandler(handler, dataReceived); } else { ServerMessagePacket packet; packet.msg = (uint)ServerMessage.Server_Denied; SendTCP(handler, GetBytesFromPacket(packet)); } }
public static void ChangePlayerBombHandler(Socket handler, ClientBombChangePacket data) { Console.WriteLine("Received 'Change Player Bomb' Request from {0}:{1}", ((IPEndPoint)handler.RemoteEndPoint).Address, ((IPEndPoint)handler.RemoteEndPoint).Port); bool confirmed = true; if (CheckPlayerLogged(data.ID) && CheckPlayerLogged(data.otherID)) { if (CheckPlayerBomb(data.ID) && !CheckPlayerBomb(data.otherID)) { for (int i = 0; i < players.Count; i++) { if (players[i].ID == data.ID) { players[i] = SetPlayerBomb(players[i], 0); } else if (players[i].ID == data.otherID) { players[i] = SetPlayerBomb(players[i], 1); } } ServerChangeBombPacket packet; packet.fromID = data.ID; packet.toID = data.otherID; packet.msg = (uint)ServerMessage.Server_BombPossession; Broadcast(ConnectionType.TCP, GetBytesFromPacket(packet)); } else { confirmed = false; } } else { confirmed = false; } if (!confirmed) { ServerMessagePacket packet; packet.msg = (uint)ServerMessage.Server_Denied; SendTCP(handler, GetBytesFromPacket(packet)); } }