Example #1
0
        string NetworkStats(ConnectionStats stats, float seconds)
        {
            var bandwidth      = GetHumanBandwdithDisplay(stats.TotalBytesOut);
            var bytesPerSecond = GetHumanBandwdithDisplay(stats.TotalBytesOut / seconds);

            return($"RTT: {stats.CurrentRTT}ms PL:{stats.PacketLossPercent:0}% B: {bandwidth} {bytesPerSecond}");
        }
        public override ConnectionStats GetConnectionStats(int connectionId)
        {
            var  stats = new ConnectionStats();
            byte error;

            stats.TotalBytesOut = NetworkTransport.GetOutgoingFullBytesCountForConnection(HostID, connectionId, out error);
            UNETUtility.HandleError(error);
            stats.CurrentRTT = NetworkTransport.GetCurrentRTT(HostID, connectionId, out error);
            UNETUtility.HandleError(error);
            stats.IncomingPacketsCount = NetworkTransport.GetIncomingPacketCount(HostID, connectionId, out error);
            UNETUtility.HandleError(error);
            stats.IncomingPacketsLost = NetworkTransport.GetIncomingPacketLossCount(HostID, connectionId, out error);
            UNETUtility.HandleError(error);
            return(stats);
        }
Example #3
0
        private string GetConnectionStatsString(NetworkClient client)
        {
            ConnectionStats stats = client.Connection.Stats;
            string          text  = string.Format(
                "up: {0}\ndown: {1}\nping: {2}ms\nloss: {3}%\ntimeout: {4:0.0}s\nstate: {5}\noffset: {6}ms",
                Primitive.SIFormat(stats.BytesSent.PerSecond, "B/s"),
                Primitive.SIFormat(stats.BytesRecieved.PerSecond, "B/s"),
                stats.Latency,
                (int)(stats.PacketLoss * 100),
                ((double)stats.MillisecondsSinceAcknowledgement) / 1000,
                client.State.ToString(),
                stats.NetTimeOffset
                );

            return(text);
        }
Example #4
0
        public void Render(Camera camera)
        {
            long timestamp = NetTime.Now();

            Grid.Render(camera);

            foreach (SyncHandle handle in WorldContent.Handles)
            {
                if (handle.Obj is Entity entity)
                {
                    if (ClientInfo?.Player != entity)
                    {
                        entity.Predict(timestamp);
                        entity.Render(camera);
                    }
                }
            }

            if (LocalPlayer != null)
            {
                LocalPlayer.Predict(timestamp);
                LocalPlayer.Render(camera);
            }

            if ((DebugState & DebugStateFlags.Network) != 0)
            {
                ConnectionStats stats = Network.Connection.Stats;

                string text = string.Format(
                    "Status : {0}{1}\n"
                    + "Latency: {2}ms\n"
                    + "Loss   : {3}%\n"
                    + "Up     : {4}\n"
                    + "Down   : {5}\n",
                    Network.State,
                    Network.State == NetworkClient.ConnectionState.Closed
                        ? string.Format(" - {0}", Network.Connection.ConnectionStatus)
                        : "",
                    stats.Latency,
                    (int)(stats.PacketLoss * 100),
                    NetCode.Util.Primitive.SIFormat(stats.BytesSent.PerSecond, "B/s"),
                    NetCode.Util.Primitive.SIFormat(stats.BytesRecieved.PerSecond, "B/s")
                    );

                Drawing.DrawString(camera.Batch, text, new Vector2(20, 20), Color.White);
            }
        }
Example #5
0
        ///////////////////////////////////////////////////
        // Member Functions
        ///////////////////////////////////////////////////
        /// <summary>
        /// Initializes the new client class
        /// </summary>
        public Client(bool bClientConn)
        {
            _sync        = new object();
            _bClientConn = bClientConn;

            _stats               = new ConnectionStats();
            _stats.clockWander   = new short[10];
            _stats.sendSpeeds    = new int[20];
            _stats.receiveSpeeds = new int[20];

            _CRC_C2S = new CRC32();
            _CRC_S2C = new CRC32();

            _streams = new StreamState[4];
            for (int i = 0; i < 4; ++i)
            {
                _streams[i] = new StreamState(i);
            }

            _packetQueue = new Queue <PacketBase>();

            _rateThreshold = RATETHRESHOLD_BASE / 250;
            _decayRate     = DECAYRATE_BASE / 250;
        }
Example #6
0
        void GetNetworkStats(uint timestep)
        {
            var networkManager = NetworkManager.Instance;

            if (networkManager == null)
            {
                return;
            }
            var seconds = GetSeconds(timestep);

            if (networkManager.IsClient)
            {
                builder.AppendLine($"Client: {NetworkStats(networkManager.Client.Connection.Stats, seconds)}");
            }
            if (networkManager.IsServer)
            {
                var stats = new ConnectionStats();
                foreach (var client in networkManager.Server.Clients)
                {
                    stats.MergeWith(client.Connection.Stats);
                }
                builder.AppendLine($"Server: {NetworkStats(stats, seconds)}");
            }
        }
Example #7
0
        private void ShowConnectionStatsForm()
        {
            if (this.connectionStatsForm == null || this.connectionStatsForm.IsDisposed)
            {
                // If the form has been closed, or never shown before, we need all new stuff
                this.connectionStatsForm = new Form
                {
                    Width = 430,
                    Height = 180,
                    MaximizeBox = false,
                    MinimizeBox = false,
                    FormBorderStyle = FormBorderStyle.FixedDialog,
                    Text = "Link Stats"
                };
                // Change the connection stats control, so that when/if the connection stats form is showing,
                // there will be something to see
                this.connectionStatsForm.Controls.Clear();
                _connectionStats = new ConnectionStats(comPort);
                this.connectionStatsForm.Controls.Add(_connectionStats);
                this.connectionStatsForm.Width = _connectionStats.Width;
            }

            this.connectionStatsForm.Show();
            ThemeManager.ApplyThemeTo(this.connectionStatsForm);
        }
Example #8
0
 private void ResetConnectionStats()
 {
     // If the form has been closed, or never shown before, we need do nothing, as
     // connection stats will be reset when shown
     if (this.connectionStatsForm != null && connectionStatsForm.Visible)
     {
         // else the form is already showing.  reset the stats
         this.connectionStatsForm.Controls.Clear();
         _connectionStats = new ConnectionStats(comPort);
         this.connectionStatsForm.Controls.Add(_connectionStats);
         ThemeManager.ApplyThemeTo(this.connectionStatsForm);
     }
 }