124 lines
3.9 KiB
C#
124 lines
3.9 KiB
C#
using UnityEngine;
|
|
using Unity.Netcode;
|
|
|
|
namespace Northbound
|
|
{
|
|
/// <summary>
|
|
/// Simple monitor for network restarts
|
|
/// Detects if Unity Netcode is shutting down repeatedly
|
|
/// </summary>
|
|
public class SimpleNetworkMonitor : MonoBehaviour
|
|
{
|
|
[Header("Settings")]
|
|
[SerializeField] private bool enableOnStart = true;
|
|
[SerializeField] private float checkInterval = 2f;
|
|
|
|
private NetworkManager _networkManager;
|
|
private float _lastCheckTime;
|
|
private int _serverStopCount = 0;
|
|
private int _serverStartCount = 0;
|
|
private float _lastServerStartTime = 0f;
|
|
private int _eventsLogged = 0;
|
|
|
|
private void Start()
|
|
{
|
|
if (enableOnStart)
|
|
{
|
|
_networkManager = NetworkManager.Singleton;
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (_networkManager == null)
|
|
{
|
|
_networkManager = NetworkManager.Singleton;
|
|
}
|
|
|
|
if (Time.time - _lastCheckTime >= checkInterval)
|
|
{
|
|
_lastCheckTime = Time.time;
|
|
CheckNetworkStatus();
|
|
}
|
|
}
|
|
|
|
private void CheckNetworkStatus()
|
|
{
|
|
if (_networkManager == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
bool isServer = _networkManager.IsServer;
|
|
bool isClient = _networkManager.IsClient;
|
|
bool isHost = _networkManager.IsHost;
|
|
|
|
if (isServer && !isClient && _eventsLogged < 3)
|
|
{
|
|
_serverStartCount++;
|
|
_lastServerStartTime = Time.time;
|
|
_eventsLogged++;
|
|
}
|
|
|
|
if (!isServer && !isClient && _lastServerStartTime > 0f && _eventsLogged < 50)
|
|
{
|
|
float uptime = Time.time - _lastServerStartTime;
|
|
_serverStopCount++;
|
|
_eventsLogged++;
|
|
|
|
if (_serverStopCount >=3)
|
|
{
|
|
}
|
|
}
|
|
|
|
if (isServer && _serverStartCount > 0)
|
|
{
|
|
if (_eventsLogged % 10 ==0)
|
|
{
|
|
float uptime = Time.time - _lastServerStartTime;
|
|
_eventsLogged++;
|
|
}
|
|
}
|
|
|
|
if (!isServer && !isClient && _lastServerStartTime > 0f && _eventsLogged < 50)
|
|
{
|
|
float uptime = Time.time - _lastServerStartTime;
|
|
_serverStopCount++;
|
|
Debug.LogWarning("[SimpleMonitor] Server stopped (Count: " + _serverStopCount + ", Uptime: " + uptime.ToString("F1") + "s)");
|
|
_eventsLogged++;
|
|
|
|
if (_serverStopCount >= 3)
|
|
{
|
|
Debug.LogError("[SimpleMonitor] SERVER STOPPED " + _serverStopCount + " TIMES!");
|
|
Debug.LogError("[SimpleMonitor] This is why port closes!");
|
|
Debug.LogError("[SimpleMonitor] Something is calling NetworkManager.Shutdown()");
|
|
}
|
|
}
|
|
|
|
if (isServer && _serverStartCount > 0)
|
|
{
|
|
if (_eventsLogged % 10 == 0)
|
|
{
|
|
float uptime = Time.time - _lastServerStartTime;
|
|
Debug.Log("[SimpleMonitor] Server uptime: " + uptime.ToString("F1") + "s");
|
|
_eventsLogged++;
|
|
}
|
|
}
|
|
}
|
|
|
|
[ContextMenu("Reset Counters")]
|
|
public void ResetCounters()
|
|
{
|
|
_serverStopCount = 0;
|
|
_serverStartCount = 0;
|
|
_lastServerStartTime = 0f;
|
|
_eventsLogged = 0;
|
|
}
|
|
|
|
[ContextMenu("Show Stats")]
|
|
public void ShowStats()
|
|
{
|
|
}
|
|
}
|
|
}
|