Tx.Bond.BinaryEtwParser.ParseV2 C# (CSharp) Method

ParseV2() private method

private ParseV2 ( Tx.Windows.EtwNativeEvent etwNativeEvent ) : Envelope
etwNativeEvent Tx.Windows.EtwNativeEvent
return System.Reactive.Envelope
        private Envelope ParseV2(EtwNativeEvent etwNativeEvent)
        {
            uint packageId = etwNativeEvent.ReadUInt32();
            long occurenceFileTimeUtc = etwNativeEvent.ReadInt64();
            long receiveFileTimeUtc = etwNativeEvent.ReadInt64();
            string protocol = etwNativeEvent.ReadUnicodeString();
            string source = etwNativeEvent.ReadUnicodeString();
            string manifestId = etwNativeEvent.ReadUnicodeString();
            uint chunkCount = etwNativeEvent.ReadUInt32();
            uint currentChunkNumber = etwNativeEvent.ReadUInt32();
            uint eventPayloadLength = etwNativeEvent.ReadUInt32(); // There is a side-effect being used here with the binary length.
            etwNativeEvent.ReadUInt32();
            byte[] eventPayload = etwNativeEvent.ReadBytes();

            if (chunkCount == 1)
            {
                this.eventCache.Clear();

                return new Envelope(
                    occurenceFileTimeUtc >= 0
                        ? DateTimeOffset.FromFileTime(occurenceFileTimeUtc)
                        : DateTimeOffset.MinValue,
                    receiveFileTimeUtc >= 0
                        ? DateTimeOffset.FromFileTime(receiveFileTimeUtc)
                        : DateTimeOffset.MinValue,
                    protocol,
                    source,
                    manifestId,
                    eventPayload,
                    null);
            }
            else if (chunkCount > currentChunkNumber)
            {
                if (this.currentEventPackageId != packageId || this.eventCache.Count != currentChunkNumber)
                {
                    this.eventCache.Clear();
                    this.currentEventPackageId = packageId;
                }

                this.eventCache.Add(eventPayload);

                if (chunkCount == (currentChunkNumber + 1))
                {
                    var payload = ByteArrayHelper.Join(this.eventCache);
                    this.eventCache.Clear();

                    return new Envelope(
                        occurenceFileTimeUtc >= 0
                            ? DateTimeOffset.FromFileTime(occurenceFileTimeUtc)
                            : DateTimeOffset.MinValue,
                        receiveFileTimeUtc >= 0
                            ? DateTimeOffset.FromFileTime(receiveFileTimeUtc)
                            : DateTimeOffset.MinValue,
                        protocol,
                        source,
                        manifestId,
                        eventPayload,
                        null);
                }
            }
            else
            {
                this.eventCache.Clear();
            }

            return null;
        }