Exemplo n.º 1
0
        public override IDictionary <K, V> Deserialize(IByteBuffer buffer, TarsConvertOptions options)
        {
            switch (options.TarsType)
            {
            case TarsStructType.Map:
            {
                int size = buffer.ReadInt();
                var dict = new Dictionary <K, V>(size);
                var op   = options.Create();
                for (int i = 0; i < size; ++i)
                {
                    headHandler.ReadHead(buffer, op);
                    var k = convert.Deserialize <K>(buffer, op);
                    headHandler.ReadHead(buffer, op);
                    var v = convert.Deserialize <V>(buffer, op);
                    if (dict.ContainsKey(k))
                    {
                        dict[k] = v;
                    }
                    else
                    {
                        dict.Add(k, v);
                    }
                }
                return(dict);
            }

            default:
                throw new TarsDecodeException($"DictionaryTarsConvert can not deserialize {options}");
            }
        }
Exemplo n.º 2
0
        public void WhenIntEnumShouldEqualExpect(short version, Codec codec, int tag)
        {
            var enums = new IntEnum[] { IntEnum.A, IntEnum.B, IntEnum.C };
            var types = new byte[] { TarsStructType.Zero, TarsStructType.Short, TarsStructType.Int };

            for (int i = 0; i < enums.Length; i++)
            {
                var item    = enums[i];
                var buffer  = Unpooled.Buffer(1);
                var options = new TarsConvertOptions()
                {
                    Codec   = codec,
                    Version = version,
                    Tag     = tag,
                };
                sut.Serialize(item, buffer, options);
                Assert.True(options.HasValue);
                Assert.True(buffer.ReadableBytes > 0);
                options.Tag = 0;
                headHandler.ReadHead(buffer, options);
                Assert.Equal(types[i], options.TarsType);
                Assert.Equal(tag, options.Tag);
                Assert.Equal(item, sut.Deserialize <IntEnum>(buffer, options));
            }
        }
Exemplo n.º 3
0
        public void ShouldEqualExpect(byte obj, short version, Codec codec, int tag, int length)
        {
            var buffer  = Unpooled.Buffer(1);
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = version,
                Tag     = tag
            };

            sut.Serialize(obj, buffer, options);
            Assert.Equal(length, buffer.ReadableBytes);
            var bytes = new byte[length];

            buffer.ReadBytes(bytes);
            Assert.Equal(obj, bytes.Last());
            options.Tag = 0;
            buffer      = buffer.ResetReaderIndex();
            headHandler.ReadHead(buffer, options);
            var result = sut.Deserialize <byte>(buffer, options);

            Assert.Equal(result, obj);
            Assert.Equal(tag, options.Tag);
            Assert.Equal(TarsStructType.Byte, options.TarsType);
        }
Exemplo n.º 4
0
        public void Deserialize(IByteBuffer buffer, TarsConvertOptions options)
        {
            var contentBuffer = convert.Deserialize <IByteBuffer>(buffer, options);

            headHandler.ReadHead(contentBuffer, options);
            Temp = convert.Deserialize <IDictionary <string, IByteBuffer> >(contentBuffer, options);
        }
Exemplo n.º 5
0
        public void ShouldEqualExpect(long obj, short version, Codec codec, int tag, byte tarsStructType)
        {
            var buffer  = Unpooled.Buffer(1);
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = version,
                Tag     = tag
            };

            sut.Serialize(obj, buffer, options);
            headHandler.ReadHead(buffer, options);
            var result = sut.Deserialize <long>(buffer, options);

            Assert.Equal(obj, result);
            Assert.Equal(tag, options.Tag);
            Assert.Equal(tarsStructType, options.TarsType);
        }
Exemplo n.º 6
0
        public void WhenEmptyShouldBeEmpty(short version, Codec codec, int tag)
        {
            var buffer  = Unpooled.Buffer(1);
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = version,
                Tag     = tag,
            };

            sut.Serialize(Unpooled.Empty, buffer, options);
            Assert.True(options.HasValue);
            Assert.True(buffer.ReadableBytes > 0);
            options.Tag = 0;
            headHandler.ReadHead(buffer, options);
            Assert.Equal(TarsStructType.ByteArray, options.TarsType);
            Assert.Equal(tag, options.Tag);
            Assert.Equal(Unpooled.Empty, sut.Deserialize <IByteBuffer>(buffer, options));
        }
Exemplo n.º 7
0
        public void ShouldEqualExpect(byte type, int tag)
        {
            var buffer = Unpooled.Buffer(2);

            sut.WriteHead(buffer, type, tag);
            var options = new TarsConvertOptions();

            sut.ReadHead(buffer, options);
            Assert.Equal(type, options.TarsType);
            Assert.Equal(tag, options.Tag);
        }
Exemplo n.º 8
0
 public override T Deserialize(IByteBuffer buffer, TarsConvertOptions options)
 {
     if (options.TarsType == TarsStructType.StructBegin)
     {
         var op = options.Create();
         headHandler.ReadHead(buffer, op);
         var result = new T();
         while (op.TarsType != TarsStructType.StructEnd)
         {
             var p = properties[op.Tag];
             p.SetValue(result, convert.Deserialize(buffer, p.GetMemberInfo().PropertyType, op));
             headHandler.ReadHead(buffer, op);
         }
         return(result);
     }
     else
     {
         throw new TarsDecodeException($"StructTarsConvert can not deserialize {options}");
     }
 }
Exemplo n.º 9
0
        public override IByteBuffer Deserialize(IByteBuffer buffer, TarsConvertOptions options)
        {
            switch (options.TarsType)
            {
            case TarsStructType.ByteArray:
                headHandler.ReadHead(buffer, options);
                int size = buffer.ReadInt();
                return(buffer.ReadBytes(size));

            default:
                throw new TarsDecodeException($"ByteBufferTarsConvert can not deserialize {options}");
            }
        }
Exemplo n.º 10
0
        public void ShouldEqualExpect(short version, Codec codec, int tag)
        {
            var buffer  = Unpooled.Buffer(1);
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = version,
                Tag     = tag
            };
            var dict = new Dictionary <string, string>
            {
                { "str", "ok" }
            } as IDictionary <string, string>;

            sut.Serialize(dict, buffer, options);
            headHandler.ReadHead(buffer, options);
            var result = sut.Deserialize <IDictionary <string, string> >(buffer, options);

            Assert.Single(result);
            Assert.Equal("ok", result["str"]);
            Assert.Equal(tag, options.Tag);
            Assert.Equal(TarsStructType.Map, options.TarsType);
        }
Exemplo n.º 11
0
        public void ShouldEqualExpect(short version, Codec codec, int tag)
        {
            var buffer  = Unpooled.Buffer(1);
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = version,
                Tag     = tag
            };
            var list = new List <string>()
            {
                "str", "ok"
            } as IList <string>;

            sut.Serialize(list, buffer, options);
            headHandler.ReadHead(buffer, options);
            var result = sut.Deserialize <IList <string> >(buffer, options);

            Assert.Equal(2, result.Count);
            Assert.Equal("str", result[0]);
            Assert.Equal("ok", result[1]);
            Assert.Equal(tag, options.Tag);
            Assert.Equal(TarsStructType.List, options.TarsType);
        }
Exemplo n.º 12
0
        public override Response Deserialize(IByteBuffer buffer, TarsConvertOptions options)
        {
            var resp = new Response();

            headHandler.ReadHead(buffer, options);
            options.Version = resp.Version = shortConvert.Deserialize(buffer, options);
            switch (options.Version)
            {
            case TarsCodecsVersion.V2:
            case TarsCodecsVersion.V3:
                DeserializeV2OrV3(buffer, options, resp);
                break;

            default:
                DeserializeV1(buffer, options, resp);
                break;
            }
            return(resp);
        }
Exemplo n.º 13
0
        public override IList <T> Deserialize(IByteBuffer buffer, TarsConvertOptions options)
        {
            switch (options.TarsType)
            {
            case TarsStructType.List:
            {
                int size = buffer.ReadInt();
                var list = new List <T>(size);
                var op   = options.Create();
                for (int i = 0; i < size; ++i)
                {
                    headHandler.ReadHead(buffer, op);
                    var t = convert.Deserialize(buffer, op);
                    list.Add(t);
                }
                return(list);
            }

            default:
                throw new TarsDecodeException($"DictionaryTarsConvert can not deserialize {options}");
            }
        }
Exemplo n.º 14
0
        public void UniAttributeTest(Codec codec, int tag)
        {
            var test = new TestTarsConvert();
            var sut  = new UniAttributeV2(test.ConvertRoot, test.HeadHandler)
            {
                Temp = new Dictionary <string, IDictionary <string, IByteBuffer> >(3)
            };
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = TarsCodecsVersion.V2,
                Tag     = tag,
            };

            sut.Put(string.Empty, 1, typeof(int), options);
            sut.Put("23", "66", typeof(string), options);
            sut.Put("23", "23", typeof(string), options);
            sut.Put("dd", 0d, typeof(double), options);
            sut.Put("ddd", 0d, typeof(double), options);
            sut.Put("ddd", null, typeof(double), options);
            var buf = Unpooled.Buffer(128);

            sut.Serialize(buf, options);
            sut.Temp = null;
            headHandler.ReadHead(buf, options);
            sut.Deserialize(buf, options);
            Assert.Equal(3, sut.Temp.Count);
            var buffer = sut.Temp[string.Empty][string.Empty];

            test.HeadHandler.ReadHead(buffer, options);
            Assert.Equal(1, test.ConvertRoot.Deserialize <int>(buffer, options));
            buffer = sut.Temp["23"][string.Empty];
            test.HeadHandler.ReadHead(buffer, options);
            Assert.Equal("23", test.ConvertRoot.Deserialize <string>(buffer, options));
            buffer = sut.Temp["dd"][string.Empty];
            test.HeadHandler.ReadHead(buffer, options);
            Assert.Equal(0d, test.ConvertRoot.Deserialize <double>(buffer, options));
        }
Exemplo n.º 15
0
        public void ShouldEqualExpect(short version, Codec codec, int tag, int age, string name)
        {
            var buffer  = Unpooled.Buffer(1);
            var options = new TarsConvertOptions()
            {
                Codec   = codec,
                Version = version,
                Tag     = tag
            };
            TestData data = new TestData()
            {
                Age  = age,
                Name = name
            };

            sut.Serialize(data, buffer, options);
            headHandler.ReadHead(buffer, options);
            var result = sut.Deserialize <TestData>(buffer, options);

            Assert.Equal(tag, options.Tag);
            Assert.Equal(age, result.Age);
            Assert.Equal(name, result.Name);
        }
Exemplo n.º 16
0
        public override Request Deserialize(IByteBuffer buffer, TarsConvertOptions options)
        {
            var req = new Request();
            var tag = options.Tag = 1;

            while (tag != 0 && buffer.IsReadable())
            {
                headHandler.ReadHead(buffer, options);
                tag = options.Tag;
                switch (tag)
                {
                case 1:
                    req.Version     = shortConvert.Deserialize(buffer, options);
                    options.Version = req.Version;
                    break;

                case 2:
                    req.PacketType = byteConvert.Deserialize(buffer, options);
                    break;

                case 3:
                    req.MessageType = intConvert.Deserialize(buffer, options);
                    break;

                case 4:
                    req.RequestId = intConvert.Deserialize(buffer, options);
                    break;

                case 5:
                    req.ServantName = stringConvert.Deserialize(buffer, options);
                    break;

                case 6:
                    req.FuncName = stringConvert.Deserialize(buffer, options);
                    var(method, isOneway, outParameters, codec, version, serviceType) = rpcMetadata.FindRpcMethod(req.ServantName, req.FuncName);
                    req.IsOneway             = isOneway;
                    req.Mehtod               = method;
                    req.ReturnParameterTypes = outParameters;
                    req.ServiceType          = serviceType;
                    req.ParameterTypes       = method.GetParameters();
                    break;

                case 7 when options.Version == TarsCodecsVersion.V1:
                {
                    var contentBuffer = bufferConvert.Deserialize(buffer, options);
                    req.Parameters = new object[req.ParameterTypes.Length];
                    while (contentBuffer.IsReadable())
                    {
                        headHandler.ReadHead(contentBuffer, options);
                        var index = options.Tag - 1;
                        var type  = req.ParameterTypes[index];
                        req.Parameters[index] = convertRoot.Deserialize(contentBuffer, type.ParameterType, options);
                    }
                }
                break;

                case 7 when options.Version == TarsCodecsVersion.V2:
                {
                    var uni = new UniAttributeV2(convertRoot, headHandler);
                    uni.Deserialize(buffer, options);
                    req.Parameters = new object[req.ParameterTypes.Length];
                    foreach (var pt in req.ParameterTypes)
                    {
                        var pBuffer = uni.Temp[pt.Name].Values.First();
                        headHandler.ReadHead(pBuffer, options);
                        req.Parameters[pt.Position] = convertRoot.Deserialize(pBuffer, pt.ParameterType, options);
                    }
                }
                break;

                case 7 when options.Version == TarsCodecsVersion.V3:
                {
                    var uni = new UniAttributeV3(convertRoot, headHandler);
                    uni.Deserialize(buffer, options);
                    req.Parameters = new object[req.ParameterTypes.Length];
                    foreach (var pt in req.ParameterTypes)
                    {
                        var pBuffer = uni.Temp[pt.Name];
                        headHandler.ReadHead(pBuffer, options);
                        req.Parameters[pt.Position] = convertRoot.Deserialize(pBuffer, pt.ParameterType, options);
                    }
                }
                break;

                case 8:
                    req.Timeout = intConvert.Deserialize(buffer, options);
                    break;

                case 9:
                    req.Context = dictConvert.Deserialize(buffer, options);
                    break;

                case 10:
                    req.Status = dictConvert.Deserialize(buffer, options);
                    tag        = 0;
                    break;

                default:
                    break;
                }
            }
            return(req);
        }