public static BrokeredMessage Decode(ByteBuffer buffer) { var message = new BrokeredMessage(); while (buffer.LengthAvailableToRead > 0) { int offOfDescribedList = buffer.ReadOffset; // peak at the type of the described list var formatCode = AmqpCodec.DecodeFormatCode(buffer); if (formatCode != FormatCode.Described) { throw new AmqpException(ErrorCode.FramingError, $"Expected Format Code = {FormatCode.Described.ToHex()} but was {formatCode.ToHex()}"); } var descriptor = AmqpCodec.DecodeDescriptor(buffer); if (descriptor == DescribedTypeCodec.Header) { message.Header = (Header)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.DeliveryAnnotations) { message.DeliveryAnnotations = (DeliveryAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.MessageAnnotations) { message.MessageAnnotations = (MessageAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Footer) { message.Footer = (Footer)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Properties) { message.Properties = (Properties)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.ApplicationProperties) { message.ApplicationProperties = (ApplicationProperties)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Data) { throw new NotImplementedException("TODO: Decode Described amqp:data:binary"); // continue; } if (descriptor == DescribedTypeCodec.AmqpValue) { throw new NotImplementedException("TODO: Decode Described amqp:amqp-value:*"); // continue; } if (descriptor == DescribedTypeCodec.AmqpSequence) { throw new NotImplementedException("TODO: Decode Described amqp:amqp-sequence:list"); //continue; } } return(message); }
public static BrokeredMessage Decode(ByteBuffer buffer) { var message = new BrokeredMessage(); while (buffer.LengthAvailableToRead > 0) { int offOfDescribedList = buffer.ReadOffset; // peak at the type of the described list var formatCode = AmqpCodec.DecodeFormatCode(buffer); if (formatCode != FormatCode.Described) throw new AmqpException(ErrorCode.FramingError, $"Expected Format Code = {FormatCode.Described.ToHex()} but was {formatCode.ToHex()}"); var descriptor = AmqpCodec.DecodeDescriptor(buffer); if (descriptor == DescribedTypeCodec.Header) { message.Header = (Header)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.DeliveryAnnotations) { message.DeliveryAnnotations = (DeliveryAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.MessageAnnotations) { message.MessageAnnotations = (MessageAnnotations)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Footer) { message.Footer = (Footer)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Properties) { message.Properties = (Properties)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.ApplicationProperties) { message.ApplicationProperties = (ApplicationProperties)AmqpCodec.DecodeKnownDescribedType(buffer, descriptor); continue; } if (descriptor == DescribedTypeCodec.Data) { throw new NotImplementedException("TODO: Decode Described amqp:data:binary"); // continue; } if (descriptor == DescribedTypeCodec.AmqpValue) { throw new NotImplementedException("TODO: Decode Described amqp:amqp-value:*"); // continue; } if (descriptor == DescribedTypeCodec.AmqpSequence) { throw new NotImplementedException("TODO: Decode Described amqp:amqp-sequence:list"); //continue; } } return message; }