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

ParseV0() private static method

private static ParseV0 ( Tx.Windows.EtwNativeEvent etwNativeEvent ) : Envelope
etwNativeEvent Tx.Windows.EtwNativeEvent
return System.Reactive.Envelope
        private static Envelope ParseV0(EtwNativeEvent etwNativeEvent)
        {
            // Reading like this ensures that if exception is thrown, we know what failed
            long occurenceFileTimeUtc = etwNativeEvent.ReadInt64();
            long receiveFileTimeUtc = etwNativeEvent.ReadInt64();
            string protocol = etwNativeEvent.ReadUnicodeString();

            bool isValid = !(protocol ?? string.Empty).StartsWith(@"rceException: ", StringComparison.OrdinalIgnoreCase);

            string source;
            string manifestId;
            uint eventPayloadLength;
            byte[] eventPayload;

            if (isValid)
            {
                source = etwNativeEvent.ReadUnicodeString();
                manifestId = etwNativeEvent.ReadUnicodeString();
                eventPayloadLength = etwNativeEvent.ReadUInt32(); // There is a side-effect being used here with the binary length.
                // Payload overflow events also could be saved with event Id 0
                eventPayload = (eventPayloadLength < 65000) ? etwNativeEvent.ReadBytes() : new byte[0];
            }
            else
            {
                protocol = string.Empty;
                source = string.Empty;
                manifestId = string.Empty;
                eventPayloadLength = 0;
                eventPayload = new byte[0];
            }

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