Example #1
0
        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);
        }
Example #2
0
        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;
        }