예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }