/// <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; }
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."); } } }