/// <summary> /// Disconnects the network system. You should kill threads ONLY from main thread /// </summary> /// <param name="reason">Reason</param> public static void Disconnect(string reason = "unknown") { lock (DisconnectLock) { if (MainSystem.NetworkState > ClientState.Disconnected) { LunaLog.Log($"[LMP]: Disconnected, reason: {reason}"); if (!HighLogic.LoadedSceneIsEditor && !HighLogic.LoadedSceneIsFlight) { SystemsContainer.Get <MainSystem>().ForceQuit = true; } else { //User is in flight so just display a message but don't force him to main menu... NetworkSystem.DisplayDisconnectMessage = true; } SystemsContainer.Get <MainSystem>().Status = $"Disconnected: {reason}"; //DO NOT set networkstate as disconnected as we are in another thread! MainSystem.NetworkState = ClientState.DisconnectRequested; NetworkMain.ClientConnection.Disconnect(reason); NetworkMain.ClientConnection.Shutdown(reason); NetworkMain.ResetConnectionStaticsAndQueues(); } } }
/// <summary> /// Disconnects the network system. You should kill threads ONLY from main thread /// </summary> /// <param name="reason">Reason</param> public static void Disconnect(string reason = "unknown") { lock (DisconnectLock) { if (MainSystem.Singleton.NetworkState != ClientState.DISCONNECTED) { Debug.Log("[LMP]: Disconnected, reason: " + reason); if (!HighLogic.LoadedSceneIsEditor && !HighLogic.LoadedSceneIsFlight) { MainSystem.Singleton.ForceQuit = true; } else { //User is in flight so just display a message but don't force him to main menu... MainSystem.Singleton.DisplayDisconnectMessage = true; } MainSystem.Singleton.GameRunning = false; MainSystem.Singleton.Status = "Disconnected: " + reason; MainSystem.Singleton.NetworkState = ClientState.DISCONNECTED; NetworkMain.ClientConnection.Disconnect(reason); NetworkMain.ClientConnection.Shutdown(reason); NetworkMain.ResetConnectionStaticsAndQueues(); } } }