public IEnumerator ProtobufLayerRecvTest() { var recvPack = new DataPack(); var msgObj = new Person { Email = "*****@*****.**", Id = 1, Name = "Meow", Phone = new List <Person.PhoneNumber> { new Person.PhoneNumber { Number = "13512347890", Type = Person.PhoneType.HOME }, new Person.PhoneNumber { Number = "13823455678", Type = Person.PhoneType.MOBILE }, new Person.PhoneNumber { Number = "15867893456", Type = Person.PhoneType.WORK } } }; var bytes = Person.SerializeToBytes(msgObj); recvPack.Position = 8; recvPack.Writer.Write(bytes); recvPack.TryAddDataToDict("MsgBody", -1, bytes.Length, null, typeof(Person)); recvPack.Position = 8; try { _protobuf = new ProtobufLayer(8) { Recv = pack => { _deserializedObj = pack.DataDict["MsgBody"].Data as Person; } }; _protobuf.Input(recvPack); } catch (Exception e) { Assert.Fail(e.Message); } yield return(null); Assert.AreEqual("*****@*****.**", _deserializedObj.Email); Assert.AreEqual(1, _deserializedObj.Id); Assert.AreEqual("Meow", _deserializedObj.Name); Assert.AreEqual("13512347890", _deserializedObj.Phone[0].Number); Assert.AreEqual(Person.PhoneType.HOME, _deserializedObj.Phone[0].Type); Assert.AreEqual("13823455678", _deserializedObj.Phone[1].Number); Assert.AreEqual(Person.PhoneType.MOBILE, _deserializedObj.Phone[1].Type); Assert.AreEqual("15867893456", _deserializedObj.Phone[2].Number); Assert.AreEqual(Person.PhoneType.WORK, _deserializedObj.Phone[2].Type); }
public IEnumerator ProtobufLayerSendTest() { var sendPack = new DataPack(); var msgObj = new Person { Email = "*****@*****.**", Id = 1, Name = "Meow", Phone = new List <Person.PhoneNumber> { new Person.PhoneNumber { Number = "13512347890", Type = Person.PhoneType.HOME }, new Person.PhoneNumber { Number = "13823455678", Type = Person.PhoneType.MOBILE }, new Person.PhoneNumber { Number = "15867893456", Type = Person.PhoneType.WORK } } }; sendPack.TryAddDataToDict("MsgBody", -1, -1, msgObj, msgObj.GetType()); try { _protobuf = new ProtobufLayer(8) { OutPut = pack => { _serializedBytes = pack.ReadAllBytes(); _serializedLength = pack.DataDict["MsgBody"].Length; _serializedIndex = pack.DataDict["MsgBody"].Index; } }; _protobuf.Send(sendPack); } catch (Exception e) { Assert.Fail(e.Message); } yield return(null); var exceptedBytes = Person.SerializeToBytes(msgObj); Assert.AreEqual(exceptedBytes, _serializedBytes); Assert.AreEqual(exceptedBytes.Length, _serializedLength); Assert.AreEqual(8, _serializedIndex); }
public IEnumerator CombineTest() { try { _dispatcher = new MessageDispatcher(1); _protobuf = new ProtobufLayer(12); _head = new HeadLayer(); _kcp = new KcpLayer(0); _udp = new UdpLayer(); _dispatcher.Link(_protobuf); _protobuf.Link(_head); _head.Link(_kcp); _kcp.Link(_udp); _dispatcher.AddListener <Person>(0, person => { _receivedObj = person; }); _head.BindMsgNumToType(0, typeof(Person)); _udp2 = new UdpLayer(); _udp2.Recv += pack => { var bytes = pack.ReadAllBytes(); var newPack = DataPackPool.GetDataPack(0, bytes); _udp2.Send(newPack); }; _udp.Connect("127.0.0.1", 10001, 10000); yield return(null); _udp2.Connect("127.0.0.1", 10000, 10001); yield return(null); var msgObj = new Person { Email = "*****@*****.**", Id = 1, Name = "Meow", Phone = new List <Person.PhoneNumber> { new Person.PhoneNumber { Number = "13512347890", Type = Person.PhoneType.HOME }, new Person.PhoneNumber { Number = "13823455678", Type = Person.PhoneType.MOBILE }, new Person.PhoneNumber { Number = "15867893456", Type = Person.PhoneType.WORK } } }; _dispatcher.Send(0, msgObj); yield return(null); for (var i = 0; i < 50; i++) { _kcp.Update(); _udp.Update(); _udp2.Update(); yield return(null); } } finally { _kcp.Dispose(); _udp.Dispose(); _udp2.Dispose(); } Assert.AreEqual("*****@*****.**", _receivedObj.Email); Assert.AreEqual(1, _receivedObj.Id); Assert.AreEqual("Meow", _receivedObj.Name); Assert.AreEqual("13512347890", _receivedObj.Phone[0].Number); Assert.AreEqual(Person.PhoneType.HOME, _receivedObj.Phone[0].Type); Assert.AreEqual("13823455678", _receivedObj.Phone[1].Number); Assert.AreEqual(Person.PhoneType.MOBILE, _receivedObj.Phone[1].Type); Assert.AreEqual("15867893456", _receivedObj.Phone[2].Number); Assert.AreEqual(Person.PhoneType.WORK, _receivedObj.Phone[2].Type); }