Protogame.MxReliability.ClientOnMessageReceived C# (CSharp) Метод

ClientOnMessageReceived() приватный Метод

Called when we have received a fragment from the underlying client.
private ClientOnMessageReceived ( object sender, Protogame.MxMessageReceiveEventArgs mxMessageEventArgs ) : void
sender object /// The sender. ///
mxMessageEventArgs Protogame.MxMessageReceiveEventArgs /// The message event args. ///
Результат void
        private void ClientOnMessageReceived(object sender, MxMessageReceiveEventArgs mxMessageEventArgs)
        {
            if (mxMessageEventArgs.ProtocolID != MxMessage.ReliableProtocol)
            {
                return;
            }

            var data = mxMessageEventArgs.Payload;

            // Format of a packet is:
            // Byte 0 - 3: message ID
            // Byte 4 - 5: length
            // Byte 6: current index
            // Byte 7: total packets
            // Remaining bytes are the fragment data
            var messageID = BitConverter.ToInt32(data, 0);
            var length = BitConverter.ToUInt16(data, 4);
            var currentIndex = (int)data[6];
            var totalPackets = (int)data[7];

            if (!this.m_ActiveReceiveMessages.ContainsKey(messageID))
            {
                // Add a new entry in the active receive messages dictionary.
                this.m_ActiveReceiveMessages.Add(
                    messageID,
                    new MxReliabilityReceiveState(messageID, totalPackets));
            }

            // Check for invalid payload.
            if ((length - 1) + DataOffset >= data.Length)
            {
                var errorMessage = 
                    "The payload data received had an invalid length for the " +
                    "data that was present. ";
                errorMessage += "\r\n";
                errorMessage += "\r\n";
                errorMessage += "Client Endpoint: " + mxMessageEventArgs.Client.Endpoint + "\r\n";
                errorMessage += "Message ID: " + messageID + "\r\n";
                errorMessage += "Message Protocol: " + mxMessageEventArgs.ProtocolID + "\r\n";
                errorMessage += "Length: " + length + "\r\n";
                errorMessage += "Current Index: " + currentIndex + "\r\n";
                errorMessage += "Total Packets: " + totalPackets + "\r\n";
                errorMessage += "Payload Length: " + data.Length + "\r\n";
                errorMessage += "Payload Length minus Offset: " + (data.Length - DataOffset) + "\r\n";

                var exception = new InvalidDataException(errorMessage);
                exception.Data.Add("Payload", data);

                throw exception;
            }

            // Extract the fragment data.
            var fragmentData = new byte[length];
            for (var i = 0; i < length; i++)
            {
                fragmentData[i] = data[i + DataOffset];
            }

            // Set the fragment data into the received message.
            this.m_ActiveReceiveMessages[messageID].SetFragment(currentIndex, new Fragment(fragmentData, FragmentStatus.Received));

            // Perform the receive update to fire events and finalize state if we have all the fragments.
            this.UpdateReceive();
        }