示例#1
0
        public void PingPackageDeserializationTest()
        {
            PingPackage expected = new PingPackage
            {
                Value = 10
            };

            var buffer = expected.ToByteArray();

            PingPackage       actual      = new PingPackage();
            int               len         = 0;
            ClientPackageType packageType = ClientPackageType.None;

            using (var stream = new MemoryStream(buffer))
            {
                using (var reader = new BinaryReader(stream))
                {
                    len         = reader.ReadInt32();
                    packageType = (ClientPackageType)reader.ReadByte();
                    actual.FromByteArray(reader.ReadBytes(len - 1));
                }
            }

            Assert.AreEqual(5, len);
            Assert.AreEqual(ClientPackageType.Ping, packageType);
            Assert.AreEqual(9, buffer.Length);
            Assert.AreEqual(expected.Value, actual.Value);
        }
示例#2
0
        public override void HandlePackage()
        {
            PingPackage pingPackage = (PingPackage)Package;

            Client.SendPackage(new PongPackage
            {
                Value = pingPackage.Value
            });
        }
示例#3
0
        public void PingConstructorTest()
        {
            var packageBase = new PingPackage
            {
                Value = 10
            };

            Assert.AreEqual(10, packageBase.Value);
            Assert.AreEqual(ClientPackageType.Ping, packageBase.Type);
        }
示例#4
0
        public void PingSerializationTest()
        {
            var packageBase = new PingPackage
            {
                Value = 10
            };

            var buffer = packageBase.ToByteArray();

            Assert.AreEqual(9, buffer.Length);
        }
        public void GetPingPackageTest()
        {
            var package = new PingPackage {
                Value = 10
            };
            var data = package.ToByteArray();

            ClientPackage clientPackage = _factory.GetNextPackage(data);

            Assert.NotNull(clientPackage);
            Assert.AreEqual(data, clientPackage.ToByteArray());
            Assert.AreEqual(package.Type, clientPackage.Type);
        }
示例#6
0
        private void ConnectionCallback(IAsyncResult ar)
        {
            Debug.Log("Connected");
            _tcpClient.EndConnect(ar);
            _stream = _tcpClient.GetStream();

            var pingPackage = new PingPackage {
                Value = 10
            };

            SendPackage(pingPackage);

            _isNotMoreToRead = true;
            ReceivePackage();
        }
示例#7
0
        /// <summary>
        /// Sets the latency of a connection.
        /// </summary>
        /// <param name="pingPackage">The PingPackage.</param>
        private void SetLatency(PingPackage pingPackage)
        {
            DateTime        timeNow    = DateTime.Now;
            TimeSpan        dif        = timeNow - pingPackage.TimeStamp;
            LocalConnection connection = GetConnection(pingPackage.Receiver);

            connection.Latency = (float)dif.TotalMilliseconds;

            //Kick the client if the latency is to high
            if (!(connection.Latency > TimeOutLatency))
            {
                return;
            }
            SendNotificationPackage(NotificationMode.TimeOut,
                                    new IConnection[] { SerializableConnection.FromIConnection(connection) });
            connection.Client.Close();
            _connections.Remove(connection);
        }
示例#8
0
        private void SendPacket()
        {
            PingPackage pingPackage = new PingPackage
            {
                Value = value
            };

            var arr = pingPackage.ToByteArray();

            _stream.Write(arr, 0, arr.Length);
            _stream.BeginWrite(arr, 0, arr.Length,
                               ar =>
            {
                _stream.EndWrite(ar);
                Debug.Log("Date Sendet!");
            },
                               _stream);
        }
示例#9
0
        /// <summary>
        /// Sending a ping request every 30 seconds to all clients.
        /// </summary>
        private void PingRequestLoop()
        {
            while (IsActive)
            {
                IConnection[] connectionList = SerializableConnection.FromIConnection(_connections.ToArray());
                //Send a ping request to all clients
                for (int i = 0; i <= _connections.Count - 1; i++)
                {
                    var pingPackage = new PingPackage {
                        Receiver = _connections[i].IPAddress
                    };
                    Send(pingPackage, _connections[i].IPAddress);
                    //add the ping request to the connection manager.
                    _connectionManager.AddPingRequest(new UdpPingRequest(_connections[i].IPAddress,
                                                                         pingPackage.TimeStamp));

                    //Also update the client list.
                    SendNotificationPackage(NotificationMode.ClientList, connectionList);
                }
                //Idle for 15 seconds
                Thread.Sleep(15000);
            }
        }
示例#10
0
        /// <summary>
        /// Sending a ping request every 30 seconds to all clients.
        /// </summary>
        private void PingRequestLoop()
        {
            while (IsActive)
            {
                IConnection[] connectionList = SerializableConnection.FromIConnection(_connections.ToArray());
                //Send a ping request to all clients
                for (int i = 0; i <= _connections.Count - 1; i++)
                {
                    var pingPackage = new PingPackage {
                        Receiver = _connections[i].IPAddress
                    };
                    NetworkStream networkStream = _connections[i].Client.GetStream();
                    PackageSerializer.Serialize(pingPackage, networkStream);
                    //May not be neccessary
                    networkStream.Flush();

                    //Also update the client list.
                    SendNotificationPackage(NotificationMode.ClientList, connectionList);
                }
                //Idle for 15 seconds
                Thread.Sleep(15000);
            }
        }