public void Rethrow() { var val = new TestRef(); var con = new Dictionary <Type, IPacketConverter> { [typeof(TestRef)] = new TestConverter() }; try { var buf = new PacketRawWriter(con).SetValue(val); Assert.Fail(); } catch (PacketException ex) when(ex.ErrorCode == PacketError.ConvertError && ex.InnerException.Message == TestConverter._BytesErr) { // ignore } try { var res = new PacketRawReader(new byte[4], con).GetValue <TestRef>(); } catch (Exception ex) when(ex.Message == TestConverter._ValueErr) { // ignore } }
public void RawArray() { var src = new[] { 1, 2, 3, 4, 5, 6, 7, 8 }; var arr = PacketWriter.Serialize(src).GetBytes(); var rea = new PacketRawReader(new PacketReader(arr)); var res = new List <int>(); while (rea.Any) { res.Add(rea.GetValue <int>()); } ThrowIfNotSequenceEqual(src, res); }
public void RawObject() { var a = "Hello, world!"; var b = 0xFF; var res = new PacketRawWriter().SetValue(a).SetValue(b).GetBytes(); var rea = new PacketRawReader(res, 0, res.Length); var ra = rea.GetValue <string>(); var rb = rea.GetValue <int>(); Assert.AreEqual(a, ra); Assert.AreEqual(b, rb); rea.Reset(); Assert.AreEqual(a, rea.GetValue(typeof(string))); Assert.AreEqual(b, rea.GetValue(typeof(int))); }
public void RawDynamic() { var a = "Hello, world!"; var b = 0xFF; var raw = new PacketRawWriter().SetValue(a, typeof(string)).SetValue(b, typeof(int)); var wtr = new PacketWriter() as dynamic; wtr.a = a; wtr.b = b; wtr.raw = raw; var res = wtr.GetBytes(); var src = new PacketReader(res) as dynamic; var rea = new PacketRawReader(src.raw); // PacketReader or byte[]? Both of them can work var ra = rea.GetValue <string>(); var rb = rea.GetValue <int>(); Assert.AreEqual(a, (string)src.a); Assert.AreEqual(b, (int)src.b); Assert.AreEqual(a, ra); Assert.AreEqual(b, rb); }
public void Serialize() { var a = 1; var b = "value"; var c = new byte[] { 1, 2, 3, 4 }; var d = new[] { 1, 2, 3, 4 }; var e = new PacketRawWriter().SetValue(a).SetValue(b); var wtr = PacketWriter.Serialize(new { a, c, obj = new { b, d, e, }, sub = new PacketWriter().SetValue("a", a).SetValue("b", b), }); var buf = wtr.GetBytes(); var rea = new PacketReader(buf); var raw = new PacketRawReader(rea["obj/e"]); var ra = rea["a"].GetValue <int>(); var rb = rea["obj/b"].GetValue <string>(); var rc = rea["c"].GetEnumerable <byte>(); var rd = rea["obj/d"].GetEnumerable <int>(); var ta = raw.GetValue <int>(); var tb = raw.GetValue <string>(); var sa = rea["sub/a"].GetValue <int>(); var sb = rea["sub/b"].GetValue <string>(); Assert.AreEqual(a, ra); Assert.AreEqual(b, rb); Assert.AreEqual(a, ta); Assert.AreEqual(b, tb); Assert.AreEqual(a, sa); Assert.AreEqual(b, sb); ThrowIfNotSequenceEqual(c, rc); ThrowIfNotSequenceEqual(d, rd); }
public void MixMode() { var a = 1234; var b = "What the ..."; var wtr = new PacketWriter(). SetValue("a", a). SetValue("b", b). SetItem("c", new PacketRawWriter(). SetValue(a). SetValue(b)); var buf = wtr.GetBytes(); var rea = new PacketReader(buf); var ra = rea["a"].GetValue <int>(); var rb = rea["b"].GetValue <string>(); var rc = new PacketRawReader(rea["c"]); var rca = rc.GetValue <int>(); var rcb = rc.GetValue <string>(); Assert.AreEqual(a, ra); Assert.AreEqual(b, rb); Assert.AreEqual(rca, a); Assert.AreEqual(rcb, b); Assert.AreEqual(false, rc.Any); }