quakeball/Assets/Scripts/Interface/NetDebugScreen.cs

64 lines
2.8 KiB
C#

using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
using NeonTea.Quakeball.Networking;
using NeonTea.Quakeball.TeaNet.Peers;
using System;
public class NetDebugScreen : MonoBehaviour {
public RectTransform BackgroundPanel;
public TMP_Text ReceivedText;
public TMP_Text SentText;
public float UpdateInterval = 5f;
private InputAction ToggleNetDebug;
private float LastUpdate;
private bool IsOpen;
private void Start() {
ToggleNetDebug = new InputAction("Toggle Net Debug", binding: "<Keyboard>/F3");
ToggleNetDebug.Enable();
ToggleNetDebug.performed += _ => {
IsOpen = !IsOpen;
BackgroundPanel.gameObject.SetActive(IsOpen);
};
}
private void Update() {
bool NetworkingAvailable = Net.Singleton.Instance != null && Net.Singleton.Instance.Peer.Running;
if (IsOpen && !NetworkingAvailable) {
ReceivedText.text = "No networking data to show";
SentText.text = "";
} else if (IsOpen && NetworkingAvailable) {
var Peer = Net.Singleton.Instance.Peer;
if (Time.time - LastUpdate > UpdateInterval) {
LastUpdate = Time.time;
TrafficData data = Peer.TrafficData;
float ToSeconds = 1f / (Peer.TrafficDataInterval / 1000f);
string received = $"Total incoming traffic: {data.Received * ToSeconds} B/s";
received += $"\n{data.TotalMessagesReceived * ToSeconds} total messages";
received += $"\n{data.ReliableReceived * ToSeconds} reliable Packets/s";
received += $"\n{data.UnreliableReceived * ToSeconds} unreliable Packets/s";
received += "\nPer packet received traffic:";
foreach (Type t in data.ReceivedByPacket.Keys) {
PerPacketData packetData = data.ReceivedByPacket[t];
received += $"\n{t.Name} {packetData.Packets * ToSeconds} P/s - {packetData.Bytes * ToSeconds} B/s";
}
ReceivedText.text = received;
string sent = $"Total outgoing traffic: {data.Sent * ToSeconds} B/s";
sent += $"\n{data.TotalMessagesSent * ToSeconds} total messages";
sent += $"\n{data.ReliableSent * ToSeconds} reliable Packets/s";
sent += $"\n{data.UnreliableSent * ToSeconds} unreliable Packets/s";
sent += "\nPer packet sent traffic:";
foreach (Type t in data.SentByPacket.Keys) {
PerPacketData packetData = data.SentByPacket[t];
sent += $"\n{t.Name} {packetData.Packets * ToSeconds} P/s - {data.SentByPacket[t].Bytes * ToSeconds} B/s";
}
SentText.text = sent;
}
}
}
}