105 lines
3.5 KiB
C#
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();
|
|
}
|
|
}
|