示例#1
0
    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);
    }
示例#2
0
    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));
        }
    }
示例#3
0
    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));
        }
    }