コード例 #1
0
ファイル: AmqpCodec.cs プロジェクト: jdaigle/LightRail
        /// <summary>
        /// Reads a described type descriptor from the buffer. It may return a known static Descriptor.
        /// </summary>
        /// <param name="buffer"></param>
        public static Descriptor DecodeDescriptor(ByteBuffer buffer)
        {
            var descriptorFormatCode = DecodeFormatCode(buffer);

            if (descriptorFormatCode == FormatCode.ULong ||
                descriptorFormatCode == FormatCode.SmallULong)
            {
                ulong      code       = Encoder.ReadULong(buffer, descriptorFormatCode);
                Descriptor descriptor = null;
                if (DescribedTypeCodec.TryGetKnownDescribedType(code, out descriptor))
                {
                    return(descriptor);
                }
                return(new Descriptor(code));
            }
            if (descriptorFormatCode == FormatCode.Symbol8 ||
                descriptorFormatCode == FormatCode.Symbol32)
            {
                string symbol = Encoder.ReadSymbol(buffer, descriptorFormatCode);
                return(new Descriptor(symbol));
            }
            throw new AmqpException(ErrorCode.FramingError, $"Invalid Descriptor Format Code{descriptorFormatCode.ToHex()}");
        }