Files
Northbound/Assets/Scripts/SimpleNetworkMonitor.cs
2026-02-16 22:17:37 +09:00

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()
{
}
}
}