private IEnumerator WaitForBoltShutdown(Action postBoltShutdownAction) { yield return(null); yield return(YieldPresets.WaitPointFiveSeconds); if (CoopLobby.IsInLobby) { if (CoopLobby.Instance.Info.IsOwner) { CoopLobby.Instance.Destroy(); } CoopLobby.LeaveActive(); } if (BoltNetwork.isRunning) { if (BoltNetwork.isClient) { BoltNetwork.server.Disconnect(); Debug.Log("DISCONNECT FROM SERVER"); if (SteamClientDSConfig.isDedicatedClient) { SteamUser.TerminateGameConnection(SteamClientDSConfig.EndPoint.Address.Packed, SteamClientDSConfig.EndPoint.Port); } } else { BoltLauncher.Shutdown(); } int loopCount = 0; float timer = Time.realtimeSinceStartup; while (BoltNetwork.isRunning) { loopCount++; yield return(null); } Debug.Log(string.Concat(new object[] { "BoltShutdown took (", loopCount, " frames) ", Time.realtimeSinceStartup - timer, "s" })); } if (postBoltShutdownAction != null) { postBoltShutdownAction(); } yield break; }
public override void Disconnected(BoltConnection connection) { CoopKickToken coopKickToken = connection.DisconnectToken as CoopKickToken; if (coopKickToken != null) { SteamClientConfig.Banned = coopKickToken.Banned; SteamClientConfig.KickMessage = UiTranslationDatabase.TranslateKey(coopKickToken.KickMessage, "Kicked/Banned", false); CoopSteamClientStarter coopSteamClientStarter = UnityEngine.Object.FindObjectOfType <CoopSteamClientStarter>(); if (coopSteamClientStarter) { coopSteamClientStarter.CancelInvoke("OnDisconnected"); } CoopClientCallbacks.OnDisconnected = null; if (SteamClientDSConfig.isDedicatedClient) { BoltLauncher.Shutdown(); UnityEngine.Object.Destroy(base.gameObject); SteamUser.TerminateGameConnection(SteamClientDSConfig.EndPoint.Address.Packed, SteamClientDSConfig.EndPoint.Port); this.ReturnToTitle(); } else if (!TheForest.Utils.Scene.FinishGameLoad) { this.ReturnToTitle(); } } else { SteamClientConfig.Banned = false; SteamClientConfig.KickMessage = string.Empty; if (SteamClientDSConfig.isDedicatedClient) { CoopJoinDedicatedServerFailed coopJoinDedicatedServerFailed = connection.DisconnectToken as CoopJoinDedicatedServerFailed; if (coopJoinDedicatedServerFailed != null) { CoopClientCallbacks.OnDisconnected = null; CoopPlayerCallbacks.WasDisconnectedFromServer = true; CoopSteamClientStarter coopSteamClientStarter2 = UnityEngine.Object.FindObjectOfType <CoopSteamClientStarter>(); if (coopSteamClientStarter2) { coopSteamClientStarter2._connectionAttempts = 3; coopSteamClientStarter2.CancelInvoke("OnDisconnected"); UnityEngine.Object.Destroy(coopSteamClientStarter2.gameObject); } BoltLauncher.Shutdown(); SteamClientConfig.KickMessage = "Incorrect password"; UnityEngine.Object.Destroy(base.gameObject); this.ReturnToTitle(); } } if (CoopClientCallbacks.OnDisconnected != null) { CoopClientCallbacks.OnDisconnected(); } } if (SteamClientDSConfig.isDedicatedClient) { SteamUser.TerminateGameConnection(SteamClientDSConfig.EndPoint.Address.Packed, SteamClientDSConfig.EndPoint.Port); this.ReturnToTitle(); } }