public override void Deserialize(SectionFlag desiredSections) { if (!this.deserialized) { BufferListStream stream = (BufferListStream)this.bufferStream.Clone(); AmqpMessageReader reader = new AmqpMessageReader(stream); reader.ReadMessage(this, desiredSections); stream.Dispose(); this.deserialized = true; } }
protected override void OnInitialize() { // mask off immutable sections except footer this.properties = null; this.applicationProperties = null; this.footer = null; BufferListStream stream = this.messageStream as BufferListStream; if (stream != null && !this.ownStream) { stream = (BufferListStream)stream.Clone(); } else { int length = 0; ArraySegment <byte>[] buffers = AmqpMessage.ReadStream(this.messageStream, 512, out length); stream = new BufferListStream(buffers); } AmqpMessageReader reader = new AmqpMessageReader(stream); AmqpMessage emptyMessage = AmqpMessage.Create(); reader.ReadMessage(emptyMessage, SectionFlag.Header | SectionFlag.DeliveryAnnotations | SectionFlag.MessageAnnotations); this.UpdateHeader(emptyMessage.header); this.UpdateDeliveryAnnotations(emptyMessage.deliveryAnnotations); this.UpdateMessageAnnotations(emptyMessage.messageAnnotations); // read out the remaining buffers bool unused = false; this.buffers = stream.ReadBuffers(int.MaxValue, true, out unused); stream.Dispose(); if (this.ownStream) { this.messageStream.Dispose(); } }