Пример #1
0
    /// <summary>
    /// Disconnect from either the lobby or in-game.
    /// </summary>
    public void Disconnect(bool isServer, NetworkType nwType, bool isHostTimeout = false)
    {
        if (NwMgr.IsRunning)
        {
            NwMgr.NetworkHost.Disconnected -= new ConnectionDisconnectedHandler(ClientDisconnectEvent);
        }

        this.isServer = isServer;
        SetNetworkType(nwType);

        // If in the lobby or in-game, and still connected to host
        if ((toggle_InLobbyClientLogic || toggle_InLobbyHostLogic) && !isHostTimeout)
        {
            // Before sending disconnect signal, ensure another player is present to receive it.
            if (TrueLobbyState.NumActivePlayers > 1)
            {
                LobbyPlayerDisconnectPacket sendPkt = new LobbyPlayerDisconnectPacket(isServer);
                NwMgr.SendPacket <LobbyPlayerDisconnectPacket>("info", sendPkt);
            }

            HostLobby_ToggleLobbyHostLogic(false);
            JoinLobby_ToggleLobbyClientLogic(false);

            myIdStatus = PlayerIdStatus.None;
        }

        // Empty lobby state.
        TrueLobbyState = new LobbyStatePacket(true);

        // Trigger nwMgr.Stop() and this.serverLookup.Cancel() to be called in 2 seconds.
        nwMgrShutdownCurStatus = nwMgrShutdownStatus.Triggered;
    }
Пример #2
0
    protected void Update_Disconnect()
    {
        if (nwMgrShutdownCurStatus == nwMgrShutdownStatus.Triggered)
        {
            if (IsDebug)
            {
                Debug.Log("Lobby.cs :: NwMgr shutdown has commenced.");
            }
            nwMgrShutdownDelayTimeFinish = Time.time + nwMgrShutdownDelayTime;
            nwMgrShutdownCurStatus       = nwMgrShutdownStatus.ShuttingDown;
        }
        else if (nwMgrShutdownCurStatus == nwMgrShutdownStatus.ShuttingDown)
        {
            if (Time.time > nwMgrShutdownDelayTimeFinish)
            {
                if (IsDebug)
                {
                    Debug.Log("Lobby.cs :: NwMgr shutdown is invoked.");
                }
                NwMgr.Stop();

                SetNetworkType(nwType);
                if (nwType == NetworkType.InternetIP || (nwType == NetworkType.InternetRoomCode && !this.isServer))
                {
                    ;
                }
                else
                {
                    this.serverLookup.Cancel();
                }

                nwMgrShutdownCurStatus = nwMgrShutdownStatus.Done;

                Debug.Log("Update_Disconnect() invoked.");
            }
        }
    }