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); }
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 } } }); }
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()); }
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()))); }
// 通信結果解凍.サーバーからのレスポンスは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); }
void RoundtripTest <T> (BoxingPacker packer, T obj) { T obj2 = (T)packer.Unpack(packer.Pack(obj)); Assert.AreEqual(obj, obj2); }
public void NullTest() { BoxingPacker packer = new BoxingPacker(); Assert.IsNull(packer.Unpack(packer.Pack(null))); }