예제 #1
0
    protected override void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
    {
        base.OnClientDisconnectedFromHost(conn, out sceneChange);
        Debug.Log("OnClientDisconnectedFromHost");
        DisablePlayerObjects();
        FindNewHost(out m_NewHostInfo, out autoNetworkManager.isHost);
        Debug.Log("New host :- " + autoNetworkManager.isHost);

        if (autoNetworkManager.isHost)
        {
            BecomeNewHost(autoNetworkManager.networkPort);
            discovery.StartAsServer();
            Debug.Log("You become a new host at port :- " + autoNetworkManager.networkPort);
        }

        else
        {
            Reset(this.oldServerConnectionId);
            waitingReconnectToNewHost         = true;
            autoNetworkManager.networkAddress = m_NewHostInfo.address;
            autoNetworkManager.client.ReconnectToNewHost(m_NewHostInfo.address, autoNetworkManager.networkPort);
            Debug.Log("You become a new client reconnect port -------> " + autoNetworkManager.networkPort);
            Debug.Log("new server ip :- " + m_NewHostInfo.address);
        }
    }
예제 #2
0
        protected override void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
        {
            sceneChange = SceneChangeOption.StayInOnlineScene;

            PeerInfoMessage hostInfo;
            bool            newHost;

            if (FindNewHost(out hostInfo, out newHost))
            {
                newHostAddress = hostInfo.address;
                if (newHost)
                {
                    waitingToBecomeNewHost = true;
                }
                else
                {
                    waitingReconnectToNewHost = true;
                }
            }
            else
            {
                if (LogFilter.logError)
                {
                    Debug.LogError("No Host found.");
                }

                NetworkManager.singleton.SetupMigrationManager(null);
                NetworkManager.singleton.StopHost();
                Reset(ClientScene.ReconnectIdInvalid);
            }

            //if (LogFilter.logDebug) Debug.Log("BecomeHost: " + waitingToBecomeNewHost + ", ReconnectToNewHost: " + waitingReconnectToNewHost);

            if (waitingToBecomeNewHost)
            {
                BecomeNewHost(NetworkManager.singleton.networkPort);
            }
            else if (waitingReconnectToNewHost)
            {
                Reset(oldServerConnectionId);
                Reset(ClientScene.ReconnectIdHost);
                NetworkManager.singleton.networkAddress = newHostAddress;
                NetworkManager.singleton.client.ReconnectToNewHost(newHostAddress, NetworkManager.singleton.networkPort);
            }
        }
예제 #3
0
    protected override void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
    {
        base.OnClientDisconnectedFromHost(conn, out sceneChange);
        if (m_WaitingToBecomeNewHost)
        {
            if (NetworkManager.singleton != null)
            {
                BecomeNewHost(NetworkManager.singleton.networkPort);
            }
            else
            {
                Debug.LogWarning("MigrationManager Client BecomeNewHost - No NetworkManager.");
            }
        }
        else if (m_WaitingReconnectToNewHost)
        {
            Reset(m_OldServerConnectionId);

            if (NetworkManager.singleton != null)
            {
                NetworkManager.singleton.networkAddress = m_NewHostAddress;
                NetworkManager.singleton.client.ReconnectToNewHost(m_NewHostAddress, NetworkManager.singleton.networkPort);
            }
            else
            {
                Debug.LogWarning("MigrationManager Client reconnect - No NetworkManager.");
            }
        }
        else
        {
            bool youAreNewHost;
            if (FindNewHost(out m_NewHostInfo, out youAreNewHost))
            {
                m_NewHostAddress = m_NewHostInfo.address;
                if (youAreNewHost)
                {
                    m_WaitingToBecomeNewHost = true;
                }
                else
                {
                    m_WaitingReconnectToNewHost = true;
                }
            }
        }
    }
예제 #4
0
    protected override void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
    {
        //base.OnClientDisconnectedFromHost(conn, out sceneChange);
        sceneChange = SceneChangeOption.StayInOnlineScene;

        PeerInfoMessage infoMessage;
        bool            isNewHost;

        if (FindNewHost(out infoMessage, out isNewHost))
        {
            if (isNewHost)
            {
                BecomeNewHost(infoMessage.port);
            }
            else
            {
                reconnectCoroutine = AttemptReconnect(reconnectDelay, infoMessage.address, infoMessage.port);
                StartCoroutine(reconnectCoroutine);
            }
        }
    }
예제 #5
0
 protected virtual void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
 {
     sceneChange = SceneChangeOption.StayInOnlineScene;
 }
예제 #6
0
    public void ClientHost()
    {
        SceneChangeOption option = SceneChangeOption.StayInOnlineScene;

        OnClientDisconnectedFromHost(client.connection, out option);
    }
예제 #7
0
 void OnGUI()
 {
     if (!showGUI)
     {
         return;
     }
     SChange = SceneChangeOption.StayInOnlineScene;
     if (lobbyreconnect == true)
     {
         if (manager.disconnectedHost == true)
         {
             if (lobbyrepick == false)
             {
                 if (GUI.Button(new Rect(5, 20, 80, 20), "<<-back"))
                 {
                     lobbyrepick = true;
                 }
             }
             if (lobbyrepick == true)
             {
                 if (GUI.Button(new Rect(5, 20, 80, 20), "<<-back"))
                 {
                     lobbyrepick = false;
                 }
             }
             if (NetworkClient.active)
             {
                 if (lobbyrepick == true)
                 {
                     LobbyrepicknewHost();
                 }
                 if (this.waitToBecomeNewHost == true)
                 {
                     LobbyYouArenewHost();
                 }
             }
             if (NetworkServer.active)
             {
                 if (lobbyrepick)
                 {
                     repicknewHost();
                 }
                 if (this.waitReconnectToNewHost == true)
                 {
                     LobbyReconnectAsClient();
                 }
             }
         }
     }
     if (NetworkServer.active || NetworkClient.active)
     {
         if (lobbyreconnect == false)
         {
             if (repick == false)
             {
                 if (GUI.Button(new Rect(5, 20, 80, 20), "<<-back"))
                 {
                     repick = true;
                 }
             }
             else
             {
                 if (GUI.Button(new Rect(5, 20, 80, 20), "<<-back"))
                 {
                     repick = false;
                 }
             }
             if (NetworkServer.active)
             {
                 if (repick == true)
                 {
                     repicknewHost();
                 }
                 if (this.waitReconnectToNewHost == true)
                 {
                     print("waitReconnectToNewHost=true");
                     ReconnectAsClient();
                 }
             }
             if (NetworkClient.active)
             {
                 if (repick == true)
                 {
                     picknewHost();
                 }
                 if (this.waitToBecomeNewHost == true)
                 {
                     GUI.Label(new Rect(720, 20, 140, 20), "You are new host");
                     YouArenewHost();
                 }
             }
         }
     }
 }
        /// <summary>
        /// Override for the callback received when a connection to the match host is lost.
        /// Integrates the host migration workflow found in the UNET source, but in an automated manner.
        /// </summary>
        protected override void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
        {
            //stay in the current game scene
            sceneChange = SceneChangeOption.StayInOnlineScene;

            //determine the new host
            PeerInfoMessage hostInfo;
            bool            newHost;

            if (FindNewHost(out hostInfo, out newHost))
            {
                //if this client is determined to be the new host, wait for the switch
                //otherwise wait for another client taking over the hosting functionality
                newHostAddress = hostInfo.address;
                if (newHost)
                {
                    waitingToBecomeNewHost = true;
                }
                else
                {
                    waitingReconnectToNewHost = true;
                }
            }
            else
            {
                //we didn't find a host, leave the game
                if (LogFilter.logError)
                {
                    Debug.LogError("No Host found.");
                }

                NetworkManager.singleton.SetupMigrationManager(null);
                NetworkManager.singleton.StopHost();
                Reset(ClientScene.ReconnectIdInvalid);
            }

            if (LogFilter.logDebug)
            {
                Debug.Log("BecomeHost: " + waitingToBecomeNewHost + ", ReconnectToNewHost: " + waitingReconnectToNewHost);
            }

            //we were chosen for hosting the new game
            if (waitingToBecomeNewHost)
            {
                //take over hosting functionality
                bool success = BecomeNewHost(NetworkManager.singleton.networkPort);

                if (success && (NetworkMode)PlayerPrefs.GetInt(PrefsKeys.networkMode) == NetworkMode.LAN)
                {
                    NetworkDiscovery discovery = GetComponent <NetworkDiscovery>();
                    discovery.Initialize();
                    discovery.StartAsServer();
                }
            }
            else if (waitingReconnectToNewHost)
            {
                //clear old host network data
                Reset(oldServerConnectionId);
                Reset(ClientScene.ReconnectIdHost);
                //choose different host address and reconnect
                NetworkManager.singleton.networkAddress = newHostAddress;
                NetworkManager.singleton.client.ReconnectToNewHost(newHostAddress, NetworkManager.singleton.networkPort);
            }
        }
예제 #9
0
 protected override void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
 {
     Debug.Log("###### OnClientDisconnectedFromHost");
     base.OnClientDisconnectedFromHost(conn, out sceneChange);
 }
예제 #10
0
 private void Start()
 {
     _sceneChange = SceneChangeOption.StayInOnlineScene;
 }
 protected virtual void OnClientDisconnectedFromHost(NetworkConnection conn, out SceneChangeOption sceneChange)
 {
     sceneChange = SceneChangeOption.StayInOnlineScene;
 }