/// <summary> /// Constructs a InboundBaseStreamWireMessage from the Wire message (Byte segments) /// </summary> /// <param name="wireMessage">Wire Message</param> internal InboundBaseStreamWireMessage(IOperationData wireMessage) { // Retreive message header var wireMessageSegmentEnumerator = wireMessage.GetEnumerator(); var headerExists = wireMessageSegmentEnumerator.MoveNext(); Diagnostics.Assert(headerExists, "InboundStableParameters wire message missing header segment"); this.headerSegment = wireMessageSegmentEnumerator.Current; // is this the right check regardless of version? Diagnostics.Assert(this.headerSegment.Count == EncodedByteLength, "Header segment in stream wire message incorrect length"); // Decode Header this.DecodeHeaderSegment(); // Retreive message payload var segmentExists = wireMessageSegmentEnumerator.MoveNext(); if (segmentExists) { var payloadSegment = wireMessageSegmentEnumerator.Current; // We rely on the fact that the managed session layer will return a whole byte array not a segment // The asserts verify that assumption this.Payload = payloadSegment.Array; Diagnostics.Assert(payloadSegment.Offset == 0, "Payload segment in inbound session message not whole array"); Diagnostics.Assert(payloadSegment.Count == this.Payload.Length, "Payload segment in inbound session message not whole array"); } else { this.Payload = null; } }