Beispiel #1
0
        void OnPaquetReceived(NetMessagePacket netMessage, INetworkInterfaceConnection source)
        {
            // Our source has sent us a paquet!

            // the message comes from our source ?
            if (source != _connection)
            {
                return;
            }

            // the message is about our transfer ? (we could have many in parallel)
            if (netMessage.TransferId != _transferInfo.TransferId)
            {
                return;
            }

            // the paquet index is valid ?
            if (netMessage.PacketIndex < 0 || netMessage.PacketIndex >= _paquetStates.Length)
            {
                return;
            }

            // the paquet is already acknowledged ?
            if (_paquetStates[netMessage.PacketIndex] == PacketState.Received)
            {
                return;
            }

            // mark paquet as acknowledged
            if (_paquetStates[netMessage.PacketIndex] != PacketState.Received)
            {
                _paquetStates[netMessage.PacketIndex] = PacketState.Received;
                _remainingUnreceivedPaquets--;

                // copy paquet data into _data
                int startPos = netMessage.Data.Length * netMessage.PacketIndex;
                int endPos   = Mathf.Min(startPos + netMessage.Data.Length, _data.Length);

                Array.Copy(
                    sourceArray: netMessage.Data,
                    sourceIndex: 0,
                    destinationArray: _data,
                    destinationIndex: startPos,
                    length: endPos - startPos);
            }

            // notify our source that the paquet was received
            NetMessagePacketACK acknowledgeMessage = new NetMessagePacketACK()
            {
                TransferId  = _transferInfo.TransferId,
                PacketIndex = netMessage.PacketIndex
            };

            _sessionInterface.SendNetMessage(acknowledgeMessage, source);
        }
Beispiel #2
0
        void SendPacket(INetworkInterfaceConnection destination, int packetIndex)
        {
            // create message
            NetMessagePacket netMessage = new NetMessagePacket()
            {
                PacketIndex = packetIndex,
                Data        = s_cachedPacketData,
                TransferId  = _transferId
            };

            // copy slice of array into message data
            int byteIndex = packetIndex * Transfers.PAQUET_BYTE_ARRAY_SIZE;

            Array.Copy(
                sourceArray: _data,
                sourceIndex: byteIndex,
                destinationArray: netMessage.Data,
                destinationIndex: 0,
                length: Mathf.Min(_data.Length - byteIndex, Transfers.PAQUET_BYTE_ARRAY_SIZE));

            // send message
            _sessionInterface.SendNetMessage(netMessage, destination, reliableAndOrdered: false);
        }