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; } }
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; } }