示例#1
0
        private void ProcessMessage(QueuedMessage queuedMessage)
        {
            Protocol.IncomingMessageBuffer buffer      = new Protocol.IncomingMessageBuffer(queuedMessage.messageData);
            Protocol.MessageType           messageType = (Protocol.MessageType)buffer.NextByte;


            switch (messageType)
            {
            case Protocol.MessageType.ID_PING_OPEN_CONNECTIONS:
                Protocol.PingOpenConnections message = new Protocol.PingOpenConnections();
                if (!message.Parse(buffer))
                {
                    return;
                }

                Protocol.UnconnectedPongOpenConnections response = new Protocol.UnconnectedPongOpenConnections();
                response.PingId = message.PingId;
                Network.UdpReceiver.Instance.Broadcast(response, queuedMessage.source);
                break;

            default:
                Client client = ConnectionHandler.Instance.GetClient(queuedMessage.source);
                if (client != null)
                {
                    client.ProcessMessage(messageType, buffer);
                }
                break;
            }
        }
示例#2
0
        public void ProcessMessage(MessageType messageType, Protocol.IncomingMessageBuffer buffer)
        {
            switch (messageType)
            {
            case MessageType.ID_OPEN_CONNECTION_REQUEST_1:
                if (State == ConnectionState.Waiting || State == ConnectionState.Connecting)
                {
                    OpenConnectionRequest1 message = new OpenConnectionRequest1();
                    if (!message.Parse(buffer))
                    {
                        return;
                    }

                    if (message.IncompatibleProtocol)
                    {
                        IncompatibleVersion incompatibleVersion = new IncompatibleVersion();
                        Network.UdpReceiver.Instance.Broadcast(incompatibleVersion, mSource);
                    }

                    OpenConnectionReply1 response = new OpenConnectionReply1();
                    response.MTU = message.NullPayloadLength;
                    UdpReceiver.Instance.Broadcast(response, mSource);

                    State = ConnectionState.Connecting;
                }
                break;

            case Protocol.MessageType.ID_OPEN_CONNECTION_REQUEST_2:
                if (State == ConnectionState.Connecting)
                {
                    OpenConnectionRequest2 message = new OpenConnectionRequest2();
                    if (!message.Parse(buffer))
                    {
                        return;
                    }

                    OpenConnectionReply2 response = new OpenConnectionReply2();
                    response.MTUSize       = message.MTUSize;
                    response.ClientAddress = message.ClientAddress;
                    Network.UdpReceiver.Instance.Broadcast(response, mSource);

                    State = ConnectionState.Handshaking;
                }
                break;

            case Protocol.MessageType.ID_CUSTOM_PACKET_0:
            case Protocol.MessageType.ID_CUSTOM_PACKET_1:
            case Protocol.MessageType.ID_CUSTOM_PACKET_2:
            case Protocol.MessageType.ID_CUSTOM_PACKET_3:
            case Protocol.MessageType.ID_CUSTOM_PACKET_4:
            case Protocol.MessageType.ID_CUSTOM_PACKET_5:
            case Protocol.MessageType.ID_CUSTOM_PACKET_6:
            case Protocol.MessageType.ID_CUSTOM_PACKET_7:
            case Protocol.MessageType.ID_CUSTOM_PACKET_8:
            case Protocol.MessageType.ID_CUSTOM_PACKET_9:
            case Protocol.MessageType.ID_CUSTOM_PACKET_A:
            case Protocol.MessageType.ID_CUSTOM_PACKET_B:
            case Protocol.MessageType.ID_CUSTOM_PACKET_C:
            case Protocol.MessageType.ID_CUSTOM_PACKET_D:
            case Protocol.MessageType.ID_CUSTOM_PACKET_E:
            case Protocol.MessageType.ID_CUSTOM_PACKET_F:
                if (State == ConnectionState.Connected || State == ConnectionState.Handshaking)
                {
                    FrameSet message = new FrameSet(messageType);
                    if (!message.Parse(buffer))
                    {
                        return;
                    }

                    foreach (Frame frame in message.Frames)
                    {
                        ProcessFrame(frame);
                    }
                }
                break;

            default:
                //Unknown message
                break;
            }
        }