Пример #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);
        }
Пример #2
0
        void OnPacketAcknowledged(NetMessagePacketACK netMessage, INetworkInterfaceConnection source)
        {
            // Our destination has confirmed a packet receival!

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

            // the message is about our current transfer (we could have more than one in parallel)
            if (netMessage.TransferId != _transferId)
            {
                return;
            }

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

            // the packet is already acknowledged ?
            if (_packetStates[netMessage.PacketIndex] == PacketState.Acknowledged)
            {
                return;
            }

            // mark packet as acknowledged
            _packetStates[netMessage.PacketIndex] = PacketState.Acknowledged;
            _remainingUnacknowledgedPackets--;

            // data transfer complete ?
            if (_remainingUnacknowledgedPackets == 0)
            {
                TerminateWithSuccess();
            }
        }