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