示例#1
0
        public void PrimitiveTypeTest()
        {
            BoxingPacker packer = new BoxingPacker();

            RoundtripTest <int> (packer, 12345);
            RoundtripTest <ulong> (packer, 1234567890123456789UL);
            RoundtripTest <double> (packer, Math.PI);
            RoundtripTest <bool> (packer, true);
            RoundtripTest <bool> (packer, false);
        }
示例#2
0
        public void ArrayTest()
        {
            BoxingPacker packer = new BoxingPacker();

            RoundtripTest <object[]> (packer, new object[0]);
            RoundtripTest <object[]> (packer, new object[] {
                int.MinValue, int.MaxValue, 1234567890123456789UL, ulong.MaxValue,
                float.MinValue, float.MaxValue, float.Epsilon, float.NaN, float.PositiveInfinity, float.NegativeInfinity,
                double.MinValue, double.MaxValue, double.Epsilon, double.NaN, double.PositiveInfinity, double.NegativeInfinity,
                null, true, false, new object[] {
                    new object[] { 1, 2, 3 },
                    new object[] { Math.PI, true }
                }
            });
        }
示例#3
0
        public static byte[] Pack(JToken token, byte[] key)
        {
            RijndaelManaged aes = new RijndaelManaged
            {
                Mode      = CipherMode.CBC,
                KeySize   = 256,
                BlockSize = 128,
                Padding   = PaddingMode.PKCS7
            };

            var transform = aes.CreateEncryptor(key, Encoding.UTF8.GetBytes("ha4nBYA2APUD6Uv1"));

            Func <JToken, object> mapper = null;

            mapper = o =>
            {
                if (o is JArray arr)
                {
                    return(arr.Select(mapper).ToArray());
                }
                else if (o is JObject obj)
                {
                    var dict = new Dictionary <string, object>();
                    foreach (var prop in obj.Properties())
                    {
                        dict.Add(prop.Name, mapper(prop.Value));
                    }
                    return(dict);
                }
                else
                {
                    return(o.ToObject <object>());
                }
            };

            var mapped = mapper(token);

            var buf = new BoxingPacker().Pack(mapped);

            return(transform.TransformFinalBlock(buf, 0, buf.Length).Concat(key).ToArray());
        }
示例#4
0
        public void MapTest()
        {
            BoxingPacker packer              = new BoxingPacker();
            Dictionary <object, object> dic  = new Dictionary <object, object> ();
            Dictionary <object, object> dic2 = new Dictionary <object, object> ();

            RoundtripTest <IDictionary <object, object> > (packer, dic);

            dic2.Add(123, 456);
            dic2.Add(234, 567);
            dic2.Add(345, 678);

            dic.Add(0, 0.123);
            dic.Add(Math.PI, true);
            dic.Add(false, new object[] { 1, 2, 3 });
            dic.Add(1, new Dictionary <object, object> (dic2));
            RoundtripTest <IDictionary <object, object> > (packer, dic);

            dic[1] = ((Dictionary <object, object>)dic[1]).ToArray();
            Assert.AreEqual(dic, packer.Unpack(packer.Pack(dic.ToArray())));
        }
示例#5
0
        // 通信結果解凍.サーバーからのレスポンスはzip圧縮されて返ってくる想定.
        private System.Object[] UnpackObject(byte[] data)
        {
            if (data == null || data.Length <= 0)
            {
                this.IsServerError = true;
                return(null);
            }
            for (int i = 0; i < data.Length; ++i)
            {
                data[i] = (byte)(data[i] ^ 0x9A);
            }
            this.ResultObjectBytes = ZlibStream.UncompressBuffer(data);                         // 解凍にはIonic.Zlib.dllを使用.

            var packer = new BoxingPacker();
            var result = packer.Unpack(this.ResultObjectBytes) as System.Object[];              // IMsgPackのデシリアライズ

            if (result == null)
            {
                this.IsServerError = true;
            }
            return(result);
        }
示例#6
0
        void RoundtripTest <T> (BoxingPacker packer, T obj)
        {
            T obj2 = (T)packer.Unpack(packer.Pack(obj));

            Assert.AreEqual(obj, obj2);
        }
示例#7
0
        public void NullTest()
        {
            BoxingPacker packer = new BoxingPacker();

            Assert.IsNull(packer.Unpack(packer.Pack(null)));
        }