Пример #1
0
    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;
    }
Пример #2
0
    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();
        }
    }