Exemple #1
0
        // We will have problem with binary blobs greater than int.MaxValue bytes.
        public byte[] Read(IMsgPackReader reader, MsgPackContext context, Func <byte[]> creator)
        {
            var type = reader.ReadDataType();

            uint length;

            switch (type)
            {
            case DataTypes.Null:
                return(null);

            case DataTypes.Bin8:
                length = IntConverter.ReadUInt8(reader);
                break;

            case DataTypes.Bin16:
                length = IntConverter.ReadUInt16(reader);
                break;

            case DataTypes.Bin32:
                length = IntConverter.ReadUInt32(reader);
                break;

            default:
                throw ExceptionUtils.BadTypeException(type, DataTypes.Bin8, DataTypes.Bin16, DataTypes.Bin32, DataTypes.Null);
            }

            return(ReadByteArray(reader, length));
        }
        public override TArray Read(IMsgPackReader reader, MsgPackContext context, Func <TArray> creator)
        {
            var type = reader.ReadDataType();

            switch (type)
            {
            case DataTypes.Null:
                return(default(TArray));

            case DataTypes.Array16:
                return(ReadArray(reader, context, creator, IntConverter.ReadUInt16(reader)));

            case DataTypes.Array32:
                return(ReadArray(reader, context, creator, IntConverter.ReadUInt32(reader)));
            }

            uint length;

            if (TryGetLengthFromFixArray(type, out length))
            {
                return(ReadArray(reader, context, creator, length));
            }

            throw ExceptionUtils.BadTypeException(type, DataTypes.Array16, DataTypes.Array32, DataTypes.FixArray);
        }
Exemple #3
0
        private void WriteStringHeaderAndLength(IMsgPackWriter writer, int length)
        {
            if (length <= 31)
            {
                writer.Write((byte)(((byte)DataTypes.FixStr + length) % 256));
                return;
            }

            if (length <= byte.MaxValue)
            {
                writer.Write(DataTypes.Str8);
                IntConverter.WriteValue((byte)length, writer);
                return;
            }

            if (length <= ushort.MaxValue)
            {
                writer.Write(DataTypes.Str16);
                IntConverter.WriteValue((ushort)length, writer);
            }
            else
            {
                writer.Write(DataTypes.Str32);
                IntConverter.WriteValue((uint)length, writer);
            }
        }
Exemple #4
0
        public string Read(IMsgPackReader reader, MsgPackContext context, Func <string> creator)
        {
            var type = reader.ReadDataType();

            switch (type)
            {
            case DataTypes.Null:
                return(null);

            case DataTypes.Str8:
                return(ReadString(reader, IntConverter.ReadUInt8(reader)));

            case DataTypes.Str16:
                return(ReadString(reader, IntConverter.ReadUInt16(reader)));

            case DataTypes.Str32:
                return(ReadString(reader, IntConverter.ReadUInt32(reader)));
            }

            uint length;

            if (TryGetFixstrLength(type, out length))
            {
                return(ReadString(reader, length));
            }

            throw ExceptionUtils.BadTypeException(type, DataTypes.FixStr, DataTypes.Str8, DataTypes.Str16, DataTypes.Str32);
        }
        protected void WriteMapHeaderAndLength(int length, IMsgPackWriter reader)
        {
            if (length <= 15)
            {
                IntConverter.WriteValue((byte)((byte)DataTypes.FixMap + length), reader);
                return;
            }

            if (length <= ushort.MaxValue)
            {
                reader.Write(DataTypes.Map16);
                IntConverter.WriteValue((ushort)length, reader);
            }
            else
            {
                reader.Write(DataTypes.Map32);
                IntConverter.WriteValue((uint)length, reader);
            }
        }
Exemple #6
0
        protected void WriteArrayHeaderAndLength(int length, IMsgPackWriter writer)
        {
            if (length <= 15)
            {
                IntConverter.WriteValue((byte)((byte)DataTypes.FixArray + length), writer);
                return;
            }

            if (length <= ushort.MaxValue)
            {
                writer.Write(DataTypes.Array16);
                IntConverter.WriteValue((ushort)length, writer);
            }
            else
            {
                writer.Write(DataTypes.Array32);
                IntConverter.WriteValue((uint)length, writer);
            }
        }
Exemple #7
0
        private void WriteBinaryHeaderAndLength(int length, IMsgPackWriter writer)
        {
            if (length <= byte.MaxValue)
            {
                writer.Write(DataTypes.Bin8);
                IntConverter.WriteValue((byte)length, writer);
                return;
            }

            if (length <= ushort.MaxValue)
            {
                writer.Write(DataTypes.Bin16);
                IntConverter.WriteValue((ushort)length, writer);
            }
            else
            {
                writer.Write(DataTypes.Bin32);
                IntConverter.WriteValue((uint)length, writer);
            }
        }