Пример #1
0
        static T[] Decode <T>(ByteBuffer buffer, int size, int count, FormatCode formatCode)
        {
            T[]          array      = new T[count];
            EncodingBase encoding   = AmqpEncoding.GetEncoding(formatCode);
            object       descriptor = null;

            if (formatCode == FormatCode.Described)
            {
                descriptor = AmqpEncoding.DecodeObject(buffer);
                formatCode = AmqpEncoding.ReadFormatCode(buffer);
            }

            for (int i = 0; i < count; ++i)
            {
                object value = encoding.DecodeObject(buffer, formatCode);
                if (descriptor != null)
                {
                    value = new DescribedType(descriptor, value);
                }

                array[i] = (T)value;
            }

            return(array);
        }
Пример #2
0
        static int GetValueSize(Array value, Type type)
        {
            if (value.Length == 0)
            {
                return(0);
            }

            if (type == null)
            {
                type = value.GetValue(0).GetType();
            }

            EncodingBase encoding  = AmqpEncoding.GetEncoding(type);
            int          valueSize = 0;

            foreach (object item in value)
            {
                bool arrayEncoding = true;
                if (encoding.FormatCode == FormatCode.Described && valueSize == 0)
                {
                    arrayEncoding = false;
                }

                valueSize += encoding.GetObjectEncodeSize(item, arrayEncoding);
            }

            return(valueSize);
        }
Пример #3
0
        static void Encode(Array value, int width, int encodeSize, ByteBuffer buffer)
        {
            encodeSize -= (FixedWidth.FormatCode + width);
            if (width == FixedWidth.UByte)
            {
                AmqpBitConverter.WriteUByte(buffer, (byte)encodeSize);
                AmqpBitConverter.WriteUByte(buffer, (byte)value.Length);
            }
            else
            {
                AmqpBitConverter.WriteUInt(buffer, (uint)encodeSize);
                AmqpBitConverter.WriteUInt(buffer, (uint)value.Length);
            }

            if (value.Length > 0)
            {
                object       firstItem = value.GetValue(0);
                EncodingBase encoding  = AmqpEncoding.GetEncoding(firstItem);
                AmqpBitConverter.WriteUByte(buffer, (byte)encoding.FormatCode);
                if (encoding.FormatCode == FormatCode.Described)
                {
                    DescribedType describedValue = (DescribedType)firstItem;
                    AmqpEncoding.EncodeObject(describedValue.Descriptor, buffer);
                    AmqpBitConverter.WriteUByte(buffer, (byte)AmqpEncoding.GetEncoding(describedValue.Value).FormatCode);
                }

                foreach (object item in value)
                {
                    encoding.EncodeObject(item, true, buffer);
                }
            }
        }
Пример #4
0
 private static void Encode(Array value, int width, int encodeSize, ByteBuffer buffer)
 {
     encodeSize = encodeSize - (1 + width);
     if (width != 1)
     {
         AmqpBitConverter.WriteUInt(buffer, (uint)encodeSize);
         AmqpBitConverter.WriteUInt(buffer, (uint)value.Length);
     }
     else
     {
         AmqpBitConverter.WriteUByte(buffer, (byte)encodeSize);
         AmqpBitConverter.WriteUByte(buffer, (byte)value.Length);
     }
     if (value.Length > 0)
     {
         object       obj      = value.GetValue(0);
         EncodingBase encoding = AmqpEncoding.GetEncoding(obj);
         AmqpBitConverter.WriteUByte(buffer, encoding.FormatCode);
         if (encoding.FormatCode == 0)
         {
             DescribedType describedType = (DescribedType)obj;
             AmqpEncoding.EncodeObject(describedType.Descriptor, buffer);
             AmqpBitConverter.WriteUByte(buffer, AmqpEncoding.GetEncoding(describedType.Value).FormatCode);
         }
         foreach (object obj1 in value)
         {
             encoding.EncodeObject(obj1, true, buffer);
         }
     }
 }
Пример #5
0
        public static long?Decode(ByteBuffer buffer, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
        {
            if (formatCode == 0)
            {
                Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode1 = AmqpEncoding.ReadFormatCode(buffer);
                formatCode = formatCode1;
                if (formatCode1 == 64)
                {
                    return(null);
                }
            }
            int offset = buffer.Offset;

            Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] formatCodeArray = new Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] { 129, 85 };
            EncodingBase.VerifyFormatCode(formatCode, offset, formatCodeArray);
            return(new long?((formatCode == 85 ? (long)AmqpBitConverter.ReadByte(buffer) : AmqpBitConverter.ReadLong(buffer))));
        }
Пример #6
0
        public static int GetObjectEncodeSize(object value)
        {
            if (value == null)
            {
                return(FixedWidth.NullEncoded);
            }

            IAmqpSerializable serializable = value as IAmqpSerializable;

            if (serializable != null)
            {
                return(serializable.EncodeSize);
            }

            EncodingBase encoding = GetEncoding(value);

            return(encoding.GetObjectEncodeSize(value, false));
        }
Пример #7
0
        public static void EncodeObject(object value, ByteBuffer buffer)
        {
            if (value == null)
            {
                EncodeNull(buffer);
                return;
            }

            IAmqpSerializable serializable = value as IAmqpSerializable;

            if (serializable != null)
            {
                serializable.Encode(buffer);
                return;
            }

            EncodingBase encoding = GetEncoding(value);;

            encoding.EncodeObject(value, false, buffer);
        }
Пример #8
0
        public static bool?Decode(ByteBuffer buffer, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
        {
            if (formatCode == 0)
            {
                Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode1 = AmqpEncoding.ReadFormatCode(buffer);
                formatCode = formatCode1;
                if (formatCode1 == 64)
                {
                    return(null);
                }
            }
            int offset = buffer.Offset;

            Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] formatCodeArray = new Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] { 86, 66, 65 };
            EncodingBase.VerifyFormatCode(formatCode, offset, formatCodeArray);
            if (formatCode == 86)
            {
                return(new bool?(AmqpBitConverter.ReadUByte(buffer) != 0));
            }
            return(new bool?((formatCode == 65 ? true : false)));
        }
Пример #9
0
        public static uint?Decode(ByteBuffer buffer, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
        {
            if (formatCode == 0)
            {
                Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode1 = AmqpEncoding.ReadFormatCode(buffer);
                formatCode = formatCode1;
                if (formatCode1 == 64)
                {
                    return(null);
                }
            }
            int offset = buffer.Offset;

            Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] formatCodeArray = new Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode[] { 112, 82, 67 };
            EncodingBase.VerifyFormatCode(formatCode, offset, formatCodeArray);
            if (formatCode == 67)
            {
                return(new uint?(0));
            }
            return(new uint?((formatCode == 82 ? (uint)AmqpBitConverter.ReadUByte(buffer) : AmqpBitConverter.ReadUInt(buffer))));
        }
Пример #10
0
        public static EncodingBase GetEncoding(Type type)
        {
            EncodingBase encodingBase = null;

            if (AmqpEncoding.encodingsByType.TryGetValue(type, out encodingBase))
            {
                return(encodingBase);
            }
            if (type.IsArray)
            {
                return(AmqpEncoding.arrayEncoding);
            }
            if (typeof(IList).IsAssignableFrom(type))
            {
                return(AmqpEncoding.listEncoding);
            }
            if (!typeof(DescribedType).IsAssignableFrom(type))
            {
                throw AmqpEncoding.GetEncodingException(SRAmqp.AmqpInvalidType(type.ToString()));
            }
            return(AmqpEncoding.describedTypeEncoding);
        }
Пример #11
0
        private static T[] Decode <T>(ByteBuffer buffer, int size, int count, Microsoft.ServiceBus.Messaging.Amqp.Encoding.FormatCode formatCode)
        {
            T[]          tArray   = new T[count];
            EncodingBase encoding = AmqpEncoding.GetEncoding(formatCode);
            object       obj      = null;

            if (formatCode == 0)
            {
                obj        = AmqpEncoding.DecodeObject(buffer);
                formatCode = AmqpEncoding.ReadFormatCode(buffer);
            }
            for (int i = 0; i < count; i++)
            {
                object describedType = encoding.DecodeObject(buffer, formatCode);
                if (obj != null)
                {
                    describedType = new DescribedType(obj, describedType);
                }
                tArray[i] = (T)describedType;
            }
            return(tArray);
        }
Пример #12
0
        public static EncodingBase GetEncoding(object value)
        {
            EncodingBase encodingBase = null;
            Type         type         = value.GetType();

            if (AmqpEncoding.encodingsByType.TryGetValue(type, out encodingBase))
            {
                return(encodingBase);
            }
            if (type.IsArray)
            {
                return(AmqpEncoding.arrayEncoding);
            }
            if (value is IList)
            {
                return(AmqpEncoding.listEncoding);
            }
            if (!(value is DescribedType))
            {
                throw AmqpEncoding.GetEncodingException(SRAmqp.AmqpInvalidType(type.ToString()));
            }
            return(AmqpEncoding.describedTypeEncoding);
        }
Пример #13
0
        public static EncodingBase GetEncoding(Type type)
        {
            EncodingBase encoding = null;

            if (encodingsByType.TryGetValue(type, out encoding))
            {
                return(encoding);
            }
            else if (type.IsArray)
            {
                return(arrayEncoding);
            }
            else if (typeof(IList).IsAssignableFrom(type))
            {
                return(listEncoding);
            }
            else if (typeof(DescribedType).IsAssignableFrom(type))
            {
                return(describedTypeEncoding);
            }

            throw GetEncodingException(type.ToString());
        }
Пример #14
0
        private static int GetValueSize(Array value, Type type)
        {
            if (value.Length == 0)
            {
                return(0);
            }
            if (type == null)
            {
                type = value.GetValue(0).GetType();
            }
            EncodingBase encoding         = AmqpEncoding.GetEncoding(type);
            int          objectEncodeSize = 0;

            foreach (object obj in value)
            {
                bool flag = true;
                if (encoding.FormatCode == 0 && objectEncodeSize == 0)
                {
                    flag = false;
                }
                objectEncodeSize = objectEncodeSize + encoding.GetObjectEncodeSize(obj, flag);
            }
            return(objectEncodeSize);
        }
Пример #15
0
        public static EncodingBase GetEncoding(object value)
        {
            EncodingBase encoding = null;
            Type         type     = value.GetType();

            if (encodingsByType.TryGetValue(type, out encoding))
            {
                return(encoding);
            }
            else if (type.IsArray)
            {
                return(arrayEncoding);
            }
            else if (value is IList)
            {
                return(listEncoding);
            }
            else if (value is DescribedType)
            {
                return(describedTypeEncoding);
            }

            throw GetEncodingException(type.ToString());
        }
Пример #16
0
 public PremitiveType(Type type)
 {
     this.encoder = AmqpEncoding.GetEncoding(type);
 }