Files
2026-02-21 16:45:37 +08:00

105 lines
3.5 KiB
C#

using ExitGames.Client.Photon;
using UnityEngine;
public class PhotonStatsGui : MonoBehaviour
{
public bool statsWindowOn = true;
public bool statsOn = true;
public bool healthStatsVisible;
public bool trafficStatsOn;
public bool buttonsOn;
public Rect statsRect = new Rect(0f, 100f, 200f, 50f);
public int WindowId = 100;
public void Start()
{
if (statsRect.x <= 0f)
{
statsRect.x = (float)Screen.width - statsRect.width;
}
}
public void Update()
{
}
public void OnGUI()
{
if (PhotonNetwork.networkingPeer.TrafficStatsEnabled != statsOn)
{
PhotonNetwork.networkingPeer.TrafficStatsEnabled = statsOn;
}
if (statsWindowOn)
{
statsRect = GUILayout.Window(WindowId, statsRect, TrafficStatsWindow, "Messages (shift+tab)");
}
}
public void TrafficStatsWindow(int windowID)
{
bool flag = false;
TrafficStatsGameLevel trafficStatsGameLevel = PhotonNetwork.networkingPeer.TrafficStatsGameLevel;
long num = PhotonNetwork.networkingPeer.TrafficStatsElapsedMs / 1000;
if (num == 0)
{
num = 1L;
}
GUILayout.BeginHorizontal();
buttonsOn = GUILayout.Toggle(buttonsOn, "buttons");
healthStatsVisible = GUILayout.Toggle(healthStatsVisible, "health");
trafficStatsOn = GUILayout.Toggle(trafficStatsOn, "traffic");
GUILayout.EndHorizontal();
string text = string.Format("Out {0,4} | In {1,4} | Sum {2,4}", trafficStatsGameLevel.TotalOutgoingMessageCount, trafficStatsGameLevel.TotalIncomingMessageCount, trafficStatsGameLevel.TotalMessageCount);
string text2 = string.Format("{0}sec average:", num);
string text3 = string.Format("Out {0,4} | In {1,4} | Sum {2,4}", trafficStatsGameLevel.TotalOutgoingMessageCount / num, trafficStatsGameLevel.TotalIncomingMessageCount / num, trafficStatsGameLevel.TotalMessageCount / num);
GUILayout.Label(text);
GUILayout.Label(text2);
GUILayout.Label(text3);
if (buttonsOn)
{
GUILayout.BeginHorizontal();
statsOn = GUILayout.Toggle(statsOn, "stats on");
if (GUILayout.Button("Reset"))
{
PhotonNetwork.networkingPeer.TrafficStatsReset();
PhotonNetwork.networkingPeer.TrafficStatsEnabled = true;
}
flag = GUILayout.Button("To Log");
GUILayout.EndHorizontal();
}
string text4 = string.Empty;
string text5 = string.Empty;
if (trafficStatsOn)
{
GUILayout.Box("Traffic Stats");
text4 = "Incoming: \n" + PhotonNetwork.networkingPeer.TrafficStatsIncoming.ToString();
text5 = "Outgoing: \n" + PhotonNetwork.networkingPeer.TrafficStatsOutgoing.ToString();
GUILayout.Label(text4);
GUILayout.Label(text5);
}
string text6 = string.Empty;
if (healthStatsVisible)
{
GUILayout.Box("Health Stats");
text6 = string.Format("ping: {6}[+/-{7}]ms resent:{8} \n\nmax ms between\nsend: {0,4} \ndispatch: {1,4} \n\nlongest dispatch for: \nev({3}):{2,3}ms \nop({5}):{4,3}ms", trafficStatsGameLevel.LongestDeltaBetweenSending, trafficStatsGameLevel.LongestDeltaBetweenDispatching, trafficStatsGameLevel.LongestEventCallback, trafficStatsGameLevel.LongestEventCallbackCode, trafficStatsGameLevel.LongestOpResponseCallback, trafficStatsGameLevel.LongestOpResponseCallbackOpCode, PhotonNetwork.networkingPeer.RoundTripTime, PhotonNetwork.networkingPeer.RoundTripTimeVariance, PhotonNetwork.networkingPeer.ResentReliableCommands);
GUILayout.Label(text6);
}
if (flag)
{
string message = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}", text, text2, text3, text4, text5, text6);
Debug.Log(message);
}
if (GUI.changed)
{
statsRect.height = 100f;
}
GUI.DragWindow();
}
}