private void HandleSegmentedPayload(int startSequenceNumber, int totalLength, int fragmentLength, int fragmentOffset, byte[] source, ref int offset) { SegmentedPackage segmentedPackage = GetSegmentedPackage(startSequenceNumber, totalLength); Buffer.BlockCopy(source, offset, segmentedPackage.TotalPayload, fragmentOffset, fragmentLength); offset += fragmentLength; segmentedPackage.BytesWritten += fragmentLength; if (segmentedPackage.BytesWritten >= segmentedPackage.TotalLength) { _pendingSegments.Remove(startSequenceNumber); HandleFinishedSegmentedPackage(segmentedPackage.TotalPayload); } }
private SegmentedPackage GetSegmentedPackage(int startSequenceNumber, int totalLength) { if (_pendingSegments.TryGetValue(startSequenceNumber, out SegmentedPackage segmentedPackage)) { return(segmentedPackage); } segmentedPackage = new SegmentedPackage { TotalLength = totalLength, TotalPayload = new byte[totalLength], }; _pendingSegments.Add(startSequenceNumber, segmentedPackage); return(segmentedPackage); }