using UnityEngine; using Unity.Netcode; namespace Northbound { /// /// Simple monitor for network restarts /// Detects if Unity Netcode is shutting down repeatedly /// 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() { } } }