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); }
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); }
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); } }
/////////////////////////////////////////////////// // 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; }
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)}"); } }
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); }
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); } }