Пример #1
0
        internal static SqlInfo ReadSqlInfo(IMsgPackReader reader, IMsgPackConverter <Key> keyConverter, IMsgPackConverter <int> intConverter)
        {
            var length = reader.ReadMapLength();

            if (length == null)
            {
                return(null);
            }

            var result = default(SqlInfo);

            for (var i = 0; i < length; i++)
            {
                switch (keyConverter.Read(reader))
                {
                case Key.SqlRowCount:
                    result = new SqlInfo(intConverter.Read(reader));
                    break;

                default:
                    reader.SkipToken();
                    break;
                }
            }

            return(result);
        }
Пример #2
0
        public EmptyResponse Read(IMsgPackReader reader)
        {
            var length = reader.ReadMapLength();

            if (length > 1)
            {
                throw ExceptionHelper.InvalidMapLength(length, 0, 1);
            }

            if (length == 1)
            {
                var dataKey = _keyConverter.Read(reader);
                if (dataKey != Key.Data)
                {
                    throw ExceptionHelper.UnexpectedKey(dataKey, Key.Data);
                }

                var arrayLength = reader.ReadArrayLength();
                if (arrayLength != 0)
                {
                    throw ExceptionHelper.InvalidArrayLength(0, length);
                }
            }

            return(new EmptyResponse());
        }
Пример #3
0
        private IndexPart ReadFromMap(IMsgPackReader reader, uint length)
        {
            uint?         fieldNo       = null;
            IndexPartType?indexPartType = null;

            for (var i = 0; i < length; i++)
            {
                switch (_stringConverter.Read(reader))
                {
                case "field":
                    fieldNo = _uintConverter.Read(reader);
                    break;

                case "type":
                    indexPartType = _indexPartTypeConverter.Read(reader);
                    break;

                default:
                    reader.SkipToken();
                    break;
                }
            }

            if (fieldNo.HasValue && indexPartType.HasValue)
            {
                return(new IndexPart(fieldNo.Value, indexPartType.Value));
            }

            throw new SerializationException("Can't read fieldNo or indexPart from map of index metadata");
        }
Пример #4
0
        public DataResponse Read(IMsgPackReader reader)
        {
            var length = reader.ReadMapLength();

            if (!(1u <= length && length <= 3))
            {
                throw ExceptionHelper.InvalidMapLength(length, 1u, 2u);
            }

            var sqlInfo = default(SqlInfo);

            for (var i = 0; i < length; i++)
            {
                var dataKey = _keyConverter.Read(reader);
                switch (dataKey)
                {
                case Key.SqlInfo:
                    sqlInfo = ReadSqlInfo(reader, _keyConverter, _intConverter);
                    break;

                default:
                    throw ExceptionHelper.UnexpectedKey(dataKey, Key.Data, Key.Metadata);
                }
            }

            return(new DataResponse(sqlInfo));
        }
Пример #5
0
        public ErrorResponse Read(IMsgPackReader reader)
        {
            string errorMessage = null;
            var    length       = reader.ReadMapLength();

            for (var i = 0; i < length; i++)
            {
                var errorKey = _keyConverter.Read(reader);

                switch (errorKey)
                {
                case Key.Error24:
                    errorMessage = _stringConverter.Read(reader);
                    break;

                case Key.Error:
                    // TODO: add parsing of new error metadata
                    reader.SkipToken();
                    break;

                default:
                    reader.SkipToken();
                    break;
                }
            }

            return(new ErrorResponse(errorMessage));
        }
Пример #6
0
        public IndexPart Read(IMsgPackReader reader)
        {
            var type = reader.ReadDataType();

            switch (type)
            {
            case DataTypes.Map16:
                return(ReadFromMap(reader, ReadUInt16(reader)));

            case DataTypes.Map32:
                return(ReadFromMap(reader, ReadUInt32(reader)));

            case DataTypes.Array16:
                return(ReadFromArray(reader, ReadUInt16(reader)));

            case DataTypes.Array32:
                return(ReadFromArray(reader, ReadUInt32(reader)));
            }

            var length = TryGetLengthFromFixMap(type);

            if (length.HasValue)
            {
                return(ReadFromMap(reader, length.Value));
            }

            length = TryGetLengthFromFixArray(type);
            if (length != null)
            {
                return(ReadFromArray(reader, length.Value));
            }

            throw ExceptionUtils.BadTypeException(type, DataTypes.Map16, DataTypes.Map32, DataTypes.FixMap, DataTypes.Array16, DataTypes.Array32, DataTypes.FixArray);
        }
Пример #7
0
        public sbyte Read(IMsgPackReader reader, MsgPackContext context, Func <sbyte> creator)
        {
            var type = reader.ReadDataType();

            byte temp;

            if (TryGetFixPositiveNumber(type, out temp))
            {
                return((sbyte)temp);
            }

            sbyte tempInt8;

            if (TryGetNegativeNumber(type, out tempInt8))
            {
                return(tempInt8);
            }

            if (type == DataTypes.Int8)
            {
                return(ReadInt8(reader));
            }

            throw ExceptionUtils.IntDeserializationFailure(type);
        }
Пример #8
0
        public byte Read(IMsgPackReader reader, MsgPackContext context, Func <byte> creator)
        {
            var type = reader.ReadDataType();

            byte temp;

            if (TryGetFixPositiveNumber(type, out temp))
            {
                return(temp);
            }

            sbyte tempInt8;

            if (TryGetNegativeNumber(type, out tempInt8))
            {
                return((byte)tempInt8);
            }

            switch (type)
            {
            case DataTypes.UInt8:
                return(ReadUInt8(reader));

            case DataTypes.Int8:
                return((byte)ReadInt8(reader));

            default:
                throw ExceptionUtils.IntDeserializationFailure(type);
            }
        }
Пример #9
0
            public InnerClass Read(IMsgPackReader reader)
            {
                var instance = new InnerClass();
                var nullable = reader.ReadMapLength();

                if (!nullable.HasValue)
                {
                    return(null);
                }
                for (var index = 0; index < nullable.Value; ++index)
                {
                    var str = _stringConverter.Value.Read(reader);
                    switch (str)
                    {
                    case "Qwer":
                        instance.B = _stringConverter.Value.Read(reader);
                        break;

                    default:
                        reader.SkipToken();
                        break;
                    }
                }
                return(instance);
            }
Пример #10
0
        private static byte[] ReadBytes(IMsgPackReader reader, int length)
        {
            var bytes = new byte[length];

            reader.ReadBytes(bytes);
            return(bytes);
        }
        public T?Read(IMsgPackReader reader, MsgPackContext context, Func <T?> creator)
        {
            var type = reader.ReadDataType();

            if (type == DataTypes.Null)
            {
                return(null);
            }

            var structConverter = context.GetConverter <T>();

            Func <T> nullableCreator;

            if (creator == null)
            {
                nullableCreator = null;
            }
            else
            {
                nullableCreator = () =>
                {
                    var result = creator();
                    return(result ?? default(T));
                };
            }

            reader.Seek(-1, SeekOrigin.Current);

            return(structConverter.Read(reader, context, nullableCreator));
        }
Пример #12
0
        public ushort Read(IMsgPackReader reader)
        {
            var type = reader.ReadDataType();

            if (TryGetFixPositiveNumber(type, out byte temp))
            {
                return(temp);
            }

            if (TryGetNegativeNumber(type, out sbyte tempInt8))
            {
                return((ushort)tempInt8);
            }

            switch (type)
            {
            case DataTypes.UInt8:
                return(ReadUInt8(reader));

            case DataTypes.UInt16:
                return(ReadUInt16(reader));

            case DataTypes.Int8:
                return((ushort)ReadInt8(reader));

            case DataTypes.Int16:
                return((ushort)ReadInt16(reader));

            default:
                throw ExceptionUtils.IntDeserializationFailure(type);
            }
        }
Пример #13
0
        public SpaceField Read(IMsgPackReader reader)
        {
            var dictLength = reader.ReadMapLength();

            string name = null;
            var    type = (FieldType)(-1);

            for (int i = 0; i < dictLength.Value; i++)
            {
                var key = _stringConverter.Read(reader);
                switch (key)
                {
                case "name":
                    name = _stringConverter.Read(reader);
                    break;

                case "type":
                    type = _typeConverter.Read(reader);
                    break;

                default:
                    reader.SkipToken();
                    break;
                }
            }

            return(new SpaceField(name, type));
        }
        public DateTimeOffset Read(IMsgPackReader reader, MsgPackContext context, Func <DateTimeOffset> creator)
        {
            var longConverter = context.GetConverter <long>();
            var longValue     = longConverter.Read(reader, context, null);

            return(DateTimeUtils.ToDateTimeOffset(longValue));
        }
        IMegaImageInfo IMsgPackConverter <IMegaImageInfo> .Read(IMsgPackReader reader)
        {
            var imageInfo = new MegaImageInfo();
            var nullable  = reader.ReadMapLength();

            if (!nullable.HasValue)
            {
                return(null);
            }
            for (var index = 0; index < nullable.Value; ++index)
            {
                var str = _stringConverter.Value.Read(reader);
                if (ReadImageInfoBody(str, imageInfo, reader))
                {
                    continue;
                }

                if (str == "CreationDate")
                {
                    imageInfo.SomeDate = _dateTimeConverter.Value.Read(reader);
                }
                else
                {
                    reader.SkipToken();
                }
            }

            return(imageInfo);
        }
Пример #16
0
        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);
        }
        public BigImageInfo Read(IMsgPackReader reader)
        {
            var imageInfo = new BigImageInfo();
            var nullable  = reader.ReadMapLength();

            if (!nullable.HasValue)
            {
                return(null);
            }
            for (var index = 0; index < nullable.Value; ++index)
            {
                var str = _stringConverter.Value.Read(reader);
                if (ReadImageInfoBody(str, imageInfo, reader))
                {
                    continue;
                }

                if (str == "Size2")
                {
                    imageInfo.Size = _intConverter.Value.Read(reader);
                }
                else
                {
                    reader.SkipToken();
                }
            }

            return(imageInfo);
        }
Пример #18
0
        public string Read(IMsgPackReader reader)
        {
            var type = reader.ReadDataType();

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

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

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

            case DataTypes.Str32:
                return(ReadString(reader, NumberConverter.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);
        }
Пример #19
0
        public void Test(byte[] data, int objectsCount)
        {
            var msgPackReaders = new IMsgPackReader[]
            {
                // new MsgPackMemoryStreamReader(new MemoryStream(data)),
                new MsgPackByteArrayReader(data)
            };

            var readTokenBytes = new List <byte>();

            foreach (var msgPackReader in msgPackReaders)
            {
                for (var i = 0; i < objectsCount; i++)
                {
                    var tokenBytes = msgPackReader.ReadToken();
                    readTokenBytes.AddRange(tokenBytes);
                }
                var endOfStream = false;
                try
                {
                    msgPackReader.ReadDataType();
                }
                catch (Exception e)
                {
                    endOfStream = e != null;
                }

                endOfStream.ShouldBe(true);
            }

            readTokenBytes.ToArray().ShouldBe(data);
        }
Пример #20
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));
        }
Пример #21
0
        public Space Read(IMsgPackReader reader)
        {
            var        actual   = reader.ReadArrayLength();
            const uint expected = 7u;

            if (actual != expected)
            {
                throw ExceptionHelper.InvalidArrayLength(expected, actual);
            }

            var id = _uintConverter.Read(reader);

            //TODO Find what skipped number means
            reader.SkipToken();

            var name       = _stringConverter.Read(reader);
            var engine     = _engineConverter.Read(reader);
            var fieldCount = _uintConverter.Read(reader);

            //TODO Find what skipped dictionary used for
            reader.SkipToken();

            var fields = _fieldConverter.Read(reader);

            return(new Space(id, fieldCount, name, engine, fields.AsReadOnly()));
        }
        public IndexCreationOptions Read(IMsgPackReader reader)
        {
            var optionsCount    = reader.ReadMapLength();
            var stringConverter = context.GetConverter <string>();
            var boolConverter   = context.GetConverter <bool>();

            var unique = false;

            for (int i = 0; i < optionsCount.Value; i++)
            {
                var key = stringConverter.Read(reader);
                switch (key)
                {
                case "unique":
                    unique = boolConverter.Read(reader);
                    break;

                default:
                    reader.SkipToken();
                    break;
                }
            }

            return(new IndexCreationOptions(unique));
        }
Пример #23
0
        public void Test(byte[] data, int objectsCount)
        {
            var msgPackReaders = new IMsgPackReader[]
            {
                new MsgPackMemoryStreamReader(new MemoryStream(data)),
                new MsgPackByteArrayReader(data)
            };

            foreach (var msgPackReader in msgPackReaders)
            {
                for (var i = 0; i < objectsCount; i++)
                {
                    msgPackReader.SkipToken();
                }
                var endOfStream = false;
                try
                {
                    msgPackReader.ReadDataType();
                }
                catch (Exception e)
                {
                    endOfStream = e != null;
                }

                endOfStream.ShouldBe(true);
            }
        }
Пример #24
0
        internal static byte[] ReadByteArray(IMsgPackReader reader, uint length)
        {
            var buffer = new byte[length];

            reader.ReadBytes(buffer);

            return(buffer);
        }
Пример #25
0
        internal static uint ReadUInt32(IMsgPackReader reader)
        {
            var temp = (uint)(reader.ReadByte() << 24);

            temp += (uint)reader.ReadByte() << 16;
            temp += (uint)reader.ReadByte() << 8;
            temp += reader.ReadByte();

            return(temp);
        }
Пример #26
0
        private static short ReadInt16(IMsgPackReader reader)
        {
            var temp = ReadUInt16(reader);

            if (temp <= short.MaxValue)
            {
                return((short)temp);
            }

            return((short)(temp - 1 - ushort.MaxValue));
        }
Пример #27
0
        private TArray ReadList(IMsgPackReader reader, uint length)
        {
            var array = (TArray)Context.GetObjectActivator(typeof(TArray))();

            for (var i = 0u; i < length; i++)
            {
                array.Add(ElementConverter.Read(reader));
            }

            return(array);
        }
Пример #28
0
        private static long ReadInt64(IMsgPackReader reader)
        {
            var temp = ReadUInt64(reader);

            if (temp <= long.MaxValue)
            {
                return((long)temp);
            }

            return((long)(temp - 1 - ulong.MaxValue));
        }
Пример #29
0
        private static int ReadInt32(IMsgPackReader reader)
        {
            var temp = ReadUInt32(reader);

            if (temp <= int.MaxValue)
            {
                return((int)temp);
            }

            return((int)(temp - 1 - uint.MaxValue));
        }
Пример #30
0
        private static sbyte ReadInt8(IMsgPackReader reader)
        {
            var temp = reader.ReadByte();

            if (temp <= sbyte.MaxValue)
            {
                return((sbyte)temp);
            }

            return((sbyte)(temp - byte.MaxValue - 1));
        }