/// <summary>
 /// <para>This causes objects for known players to be disabled.</para>
 /// </summary>
 public void DisablePlayerObjects()
 {
     if (LogFilter.logDev)
     {
         Debug.Log("NetworkMigrationManager DisablePlayerObjects");
     }
     if (this.m_Peers != null)
     {
         for (int i = 0; i < this.m_Peers.Length; i++)
         {
             PeerInfoMessage message = this.m_Peers[i];
             if (message.playerIds != null)
             {
                 for (int j = 0; j < message.playerIds.Length; j++)
                 {
                     PeerInfoPlayer player = message.playerIds[j];
                     if (LogFilter.logDev)
                     {
                         Debug.Log(string.Concat(new object[] { "DisablePlayerObjects disable player for ", message.address, " netId:", player.netId, " control:", player.playerControllerId }));
                     }
                     GameObject obj2 = ClientScene.FindLocalObject(player.netId);
                     if (obj2 != null)
                     {
                         obj2.SetActive(false);
                         this.AddPendingPlayer(obj2, message.connectionId, player.netId, player.playerControllerId);
                     }
                     else if (LogFilter.logWarn)
                     {
                         Debug.LogWarning(string.Concat(new object[] { "DisablePlayerObjects didnt find player Conn:", message.connectionId, " NetId:", player.netId }));
                     }
                 }
             }
         }
     }
 }
Exemple #2
0
        public virtual bool FindNewHost(out PeerInfoMessage newHostInfo, out bool youAreNewHost)
        {
            if (m_Peers == null)
            {
                if (LogFilter.logError)
                {
                    Debug.LogError("NetworkMigrationManager FindLowestHost no peers");
                }
                newHostInfo   = null;
                youAreNewHost = false;
                return(false);
            }
            if (LogFilter.logDev)
            {
                Debug.Log("NetworkMigrationManager FindLowestHost");
            }
            newHostInfo = new PeerInfoMessage();
            newHostInfo.connectionId = 50000;
            newHostInfo.address      = "";
            newHostInfo.port         = 0;
            int num = -1;

            youAreNewHost = false;
            if (m_Peers == null)
            {
                return(false);
            }
            for (int i = 0; i < m_Peers.Length; i++)
            {
                PeerInfoMessage peerInfoMessage = m_Peers[i];
                if (peerInfoMessage.connectionId != 0 && !peerInfoMessage.isHost)
                {
                    if (peerInfoMessage.isYou)
                    {
                        num = peerInfoMessage.connectionId;
                    }
                    if (peerInfoMessage.connectionId < newHostInfo.connectionId)
                    {
                        newHostInfo = peerInfoMessage;
                    }
                }
            }
            if (newHostInfo.connectionId == 50000)
            {
                return(false);
            }
            if (newHostInfo.connectionId == num)
            {
                youAreNewHost = true;
            }
            if (LogFilter.logDev)
            {
                Debug.Log("FindNewHost new host is " + newHostInfo.address);
            }
            return(true);
        }
        private void OnPeerClientAuthority(NetworkMessage netMsg)
        {
            PeerAuthorityMessage message = netMsg.ReadMessage <PeerAuthorityMessage>();

            if (LogFilter.logDebug)
            {
                Debug.Log("OnPeerClientAuthority for netId:" + message.netId);
            }
            if (this.m_Peers != null)
            {
                for (int i = 0; i < this.m_Peers.Length; i++)
                {
                    PeerInfoMessage message2 = this.m_Peers[i];
                    if (message2.connectionId == message.connectionId)
                    {
                        if (message2.playerIds == null)
                        {
                            message2.playerIds = new PeerInfoPlayer[0];
                        }
                        if (message.authorityState)
                        {
                            for (int j = 0; j < message2.playerIds.Length; j++)
                            {
                                if (message2.playerIds[j].netId == message.netId)
                                {
                                    return;
                                }
                            }
                            PeerInfoPlayer player = new PeerInfoPlayer {
                                netId = message.netId,
                                playerControllerId = -1
                            };
                            message2.playerIds = new List <PeerInfoPlayer>(message2.playerIds)
                            {
                                player
                            }.ToArray();
                        }
                        else
                        {
                            for (int k = 0; k < message2.playerIds.Length; k++)
                            {
                                if (message2.playerIds[k].netId == message.netId)
                                {
                                    List <PeerInfoPlayer> list2 = new List <PeerInfoPlayer>(message2.playerIds);
                                    list2.RemoveAt(k);
                                    message2.playerIds = list2.ToArray();
                                    break;
                                }
                            }
                        }
                    }
                }
                GameObject go = ClientScene.FindLocalObject(message.netId);
                this.OnAuthorityUpdated(go, message.connectionId, message.authorityState);
            }
        }
Exemple #4
0
        public static bool SendReconnectMessage(MessageBase extraMessage)
        {
            bool result;

            if (!ClientScene.hasMigrationPending())
            {
                result = false;
            }
            else
            {
                if (LogFilter.logDebug)
                {
                    Debug.Log("ClientScene::AddPlayer reconnect " + ClientScene.s_ReconnectId);
                }
                if (ClientScene.s_Peers == null)
                {
                    ClientScene.SetReconnectId(-1, null);
                    if (LogFilter.logError)
                    {
                        Debug.LogError("ClientScene::AddPlayer: reconnecting, but no peers.");
                    }
                    result = false;
                }
                else
                {
                    for (int i = 0; i < ClientScene.s_Peers.Length; i++)
                    {
                        PeerInfoMessage peerInfoMessage = ClientScene.s_Peers[i];
                        if (peerInfoMessage.playerIds != null)
                        {
                            if (peerInfoMessage.connectionId == ClientScene.s_ReconnectId)
                            {
                                for (int j = 0; j < peerInfoMessage.playerIds.Length; j++)
                                {
                                    ReconnectMessage reconnectMessage = new ReconnectMessage();
                                    reconnectMessage.oldConnectionId    = ClientScene.s_ReconnectId;
                                    reconnectMessage.netId              = peerInfoMessage.playerIds[j].netId;
                                    reconnectMessage.playerControllerId = peerInfoMessage.playerIds[j].playerControllerId;
                                    if (extraMessage != null)
                                    {
                                        NetworkWriter networkWriter = new NetworkWriter();
                                        extraMessage.Serialize(networkWriter);
                                        reconnectMessage.msgData = networkWriter.ToArray();
                                        reconnectMessage.msgSize = (int)networkWriter.Position;
                                    }
                                    ClientScene.s_ReadyConnection.Send(47, reconnectMessage);
                                }
                            }
                        }
                    }
                    ClientScene.SetReconnectId(-1, null);
                    result = true;
                }
            }
            return(result);
        }
Exemple #5
0
        private void OnPeerClientAuthority(NetworkMessage netMsg)
        {
            PeerAuthorityMessage peerAuthorityMessage = netMsg.ReadMessage <PeerAuthorityMessage>();

            if (LogFilter.logDebug)
            {
                Debug.Log("OnPeerClientAuthority for netId:" + peerAuthorityMessage.netId);
            }
            if (m_Peers == null)
            {
                return;
            }
            for (int i = 0; i < m_Peers.Length; i++)
            {
                PeerInfoMessage peerInfoMessage = m_Peers[i];
                if (peerInfoMessage.connectionId != peerAuthorityMessage.connectionId)
                {
                    continue;
                }
                if (peerInfoMessage.playerIds == null)
                {
                    peerInfoMessage.playerIds = new PeerInfoPlayer[0];
                }
                if (peerAuthorityMessage.authorityState)
                {
                    for (int j = 0; j < peerInfoMessage.playerIds.Length; j++)
                    {
                        if (peerInfoMessage.playerIds[j].netId == peerAuthorityMessage.netId)
                        {
                            return;
                        }
                    }
                    PeerInfoPlayer item = default(PeerInfoPlayer);
                    item.netId = peerAuthorityMessage.netId;
                    item.playerControllerId = -1;
                    List <PeerInfoPlayer> list = new List <PeerInfoPlayer>(peerInfoMessage.playerIds);
                    list.Add(item);
                    peerInfoMessage.playerIds = list.ToArray();
                    continue;
                }
                for (int k = 0; k < peerInfoMessage.playerIds.Length; k++)
                {
                    if (peerInfoMessage.playerIds[k].netId == peerAuthorityMessage.netId)
                    {
                        List <PeerInfoPlayer> list2 = new List <PeerInfoPlayer>(peerInfoMessage.playerIds);
                        list2.RemoveAt(k);
                        peerInfoMessage.playerIds = list2.ToArray();
                        break;
                    }
                }
            }
            GameObject go = ClientScene.FindLocalObject(peerAuthorityMessage.netId);

            OnAuthorityUpdated(go, peerAuthorityMessage.connectionId, peerAuthorityMessage.authorityState);
        }
        public virtual bool FindNewHost(out PeerInfoMessage newHostInfo, out bool youAreNewHost)
        {
            if (this.m_Peers == null)
            {
                if (LogFilter.logError)
                {
                    Debug.LogError((object)"NetworkMigrationManager FindLowestHost no peers");
                }
                newHostInfo   = (PeerInfoMessage)null;
                youAreNewHost = false;
                return(false);
            }
            if (LogFilter.logDev)
            {
                Debug.Log((object)"NetworkMigrationManager FindLowestHost");
            }
            newHostInfo = new PeerInfoMessage();
            newHostInfo.connectionId = 50000;
            newHostInfo.address      = string.Empty;
            newHostInfo.port         = 0;
            int num = -1;

            youAreNewHost = false;
            if (this.m_Peers == null)
            {
                return(false);
            }
            foreach (PeerInfoMessage peer in this.m_Peers)
            {
                if (peer.connectionId != 0 && !peer.isHost)
                {
                    if (peer.isYou)
                    {
                        num = peer.connectionId;
                    }
                    if (peer.connectionId < newHostInfo.connectionId)
                    {
                        newHostInfo = peer;
                    }
                }
            }
            if (newHostInfo.connectionId == 50000)
            {
                return(false);
            }
            if (newHostInfo.connectionId == num)
            {
                youAreNewHost = true;
            }
            if (LogFilter.logDev)
            {
                Debug.Log((object)("FindNewHost new host is " + newHostInfo.address));
            }
            return(true);
        }
Exemple #7
0
 public override void Deserialize(NetworkReader reader)
 {
     this.oldServerConnectionId = (int)reader.ReadPackedUInt32();
     this.peers = new PeerInfoMessage[(int)reader.ReadUInt16()];
     for (int index = 0; index < this.peers.Length; ++index)
     {
         PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
         peerInfoMessage.Deserialize(reader);
         this.peers[index] = peerInfoMessage;
     }
 }
 public override void Deserialize(NetworkReader reader)
 {
   this.oldServerConnectionId = (int) reader.ReadPackedUInt32();
   this.peers = new PeerInfoMessage[(int) reader.ReadUInt16()];
   for (int index = 0; index < this.peers.Length; ++index)
   {
     PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
     peerInfoMessage.Deserialize(reader);
     this.peers[index] = peerInfoMessage;
   }
 }
Exemple #9
0
        public override void Deserialize(NetworkReader reader)
        {
            int num = reader.ReadUInt16();

            peers = new PeerInfoMessage[num];
            for (int i = 0; i < peers.Length; i++)
            {
                PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
                peerInfoMessage.Deserialize(reader);
                peers[i] = peerInfoMessage;
            }
        }
Exemple #10
0
        public override void Deserialize(NetworkReader reader)
        {
            oldServerConnectionId = (int)reader.ReadPackedUInt32();
            int num = reader.ReadUInt16();

            peers = new PeerInfoMessage[num];
            for (int i = 0; i < peers.Length; i++)
            {
                PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
                peerInfoMessage.Deserialize(reader);
                peers[i] = peerInfoMessage;
            }
        }
Exemple #11
0
 public void DisablePlayerObjects()
 {
     if (LogFilter.logDev)
     {
         Debug.Log("NetworkMigrationManager DisablePlayerObjects");
     }
     if (m_Peers == null)
     {
         return;
     }
     for (int i = 0; i < m_Peers.Length; i++)
     {
         PeerInfoMessage peerInfoMessage = m_Peers[i];
         if (peerInfoMessage.playerIds == null)
         {
             continue;
         }
         for (int j = 0; j < peerInfoMessage.playerIds.Length; j++)
         {
             PeerInfoPlayer peerInfoPlayer = peerInfoMessage.playerIds[j];
             if (LogFilter.logDev)
             {
                 Debug.Log("DisablePlayerObjects disable player for " + peerInfoMessage.address + " netId:" + peerInfoPlayer.netId + " control:" + peerInfoPlayer.playerControllerId);
             }
             GameObject gameObject = ClientScene.FindLocalObject(peerInfoPlayer.netId);
             if (gameObject != null)
             {
                 gameObject.SetActive(value: false);
                 AddPendingPlayer(gameObject, peerInfoMessage.connectionId, peerInfoPlayer.netId, peerInfoPlayer.playerControllerId);
             }
             else if (LogFilter.logWarn)
             {
                 Debug.LogWarning("DisablePlayerObjects didnt find player Conn:" + peerInfoMessage.connectionId + " NetId:" + peerInfoPlayer.netId);
             }
         }
     }
 }
Exemple #12
0
        public void SendPeerInfo()
        {
            if (!m_HostMigration)
            {
                return;
            }
            PeerListMessage        peerListMessage = new PeerListMessage();
            List <PeerInfoMessage> list            = new List <PeerInfoMessage>();
            PeerInfoPlayer         item            = default(PeerInfoPlayer);
            PeerInfoPlayer         item2           = default(PeerInfoPlayer);

            for (int i = 0; i < NetworkServer.connections.Count; i++)
            {
                NetworkConnection networkConnection = NetworkServer.connections[i];
                if (networkConnection == null)
                {
                    continue;
                }
                PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
                NetworkTransport.GetConnectionInfo(NetworkServer.serverHostId, networkConnection.connectionId, out string address, out int port, out NetworkID _, out NodeID _, out byte _);
                peerInfoMessage.connectionId = networkConnection.connectionId;
                peerInfoMessage.port         = port;
                if (i == 0)
                {
                    peerInfoMessage.port    = NetworkServer.listenPort;
                    peerInfoMessage.isHost  = true;
                    peerInfoMessage.address = "<host>";
                }
                else
                {
                    peerInfoMessage.address = address;
                    peerInfoMessage.isHost  = false;
                }
                List <PeerInfoPlayer> list2 = new List <PeerInfoPlayer>();
                for (int j = 0; j < networkConnection.playerControllers.Count; j++)
                {
                    PlayerController playerController = networkConnection.playerControllers[j];
                    if (playerController != null && playerController.unetView != null)
                    {
                        item.netId = playerController.unetView.netId;
                        item.playerControllerId = playerController.unetView.playerControllerId;
                        list2.Add(item);
                    }
                }
                if (networkConnection.clientOwnedObjects != null)
                {
                    foreach (NetworkInstanceId clientOwnedObject in networkConnection.clientOwnedObjects)
                    {
                        GameObject gameObject = NetworkServer.FindLocalObject(clientOwnedObject);
                        if (!(gameObject == null))
                        {
                            NetworkIdentity component = gameObject.GetComponent <NetworkIdentity>();
                            if (component.playerControllerId == -1)
                            {
                                item2.netId = clientOwnedObject;
                                item2.playerControllerId = -1;
                                list2.Add(item2);
                            }
                        }
                    }
                }
                if (list2.Count > 0)
                {
                    peerInfoMessage.playerIds = list2.ToArray();
                }
                list.Add(peerInfoMessage);
            }
            peerListMessage.peers = list.ToArray();
            for (int k = 0; k < NetworkServer.connections.Count; k++)
            {
                NetworkConnection networkConnection2 = NetworkServer.connections[k];
                if (networkConnection2 != null)
                {
                    peerListMessage.oldServerConnectionId = networkConnection2.connectionId;
                    networkConnection2.Send(11, peerListMessage);
                }
            }
        }
Exemple #13
0
        // utility function called by the default UI on client after connection to host was lost, to pick a new host.
        public virtual bool FindNewHost(out NetworkSystem.PeerInfoMessage newHostInfo, out bool youAreNewHost)
        {
            if (m_Peers == null)
            {
                if (LogFilter.logError)
                {
                    Debug.LogError("NetworkMigrationManager FindLowestHost no peers");
                }
                newHostInfo   = null;
                youAreNewHost = false;
                return(false);
            }

            if (LogFilter.logDev)
            {
                Debug.Log("NetworkMigrationManager FindLowestHost");
            }

            const int k_FakeConnectionId = 50000;

            newHostInfo = new PeerInfoMessage();
            newHostInfo.connectionId = k_FakeConnectionId;
            newHostInfo.address      = "";
            newHostInfo.port         = 0;

            int yourConnectionId = -1;

            youAreNewHost = false;

            if (m_Peers == null)
            {
                return(false);
            }

            foreach (var peer in m_Peers)
            {
                if (peer.connectionId == 0)
                {
                    continue;
                }

                if (peer.isHost)
                {
                    continue;
                }

                if (peer.isYou)
                {
                    yourConnectionId = peer.connectionId;
                }

                if (peer.connectionId < newHostInfo.connectionId)
                {
                    newHostInfo = peer;
                }
            }
            if (newHostInfo.connectionId == k_FakeConnectionId)
            {
                return(false);
            }
            if (newHostInfo.connectionId == yourConnectionId)
            {
                youAreNewHost = true;
            }

            if (LogFilter.logDev)
            {
                Debug.Log("FindNewHost new host is " + newHostInfo.address);
            }
            return(true);
        }
Exemple #14
0
        public void SendPeerInfo()
        {
            if (!m_HostMigration)
            {
                return;
            }

            var listMsg   = new PeerListMessage();
            var addresses = new List <PeerInfoMessage>();

            for (int i = 0; i < NetworkServer.connections.Count; i++)
            {
                var conn = NetworkServer.connections[i];
                if (conn != null)
                {
                    var peerInfo = new PeerInfoMessage();

                    string    address;
                    int       port;
                    NetworkID networkId;
                    NodeID    node;
                    byte      error2;
                    NetworkTransport.GetConnectionInfo(NetworkServer.serverHostId, conn.connectionId, out address, out port, out networkId, out node, out error2);

                    peerInfo.connectionId = conn.connectionId;
                    peerInfo.port         = port;
                    if (i == 0)
                    {
                        peerInfo.port    = NetworkServer.listenPort;
                        peerInfo.isHost  = true;
                        peerInfo.address = "<host>";
                    }
                    else
                    {
                        peerInfo.address = address;
                        peerInfo.isHost  = false;
                    }
                    var playerIds = new List <PeerInfoPlayer>();
                    foreach (var player in conn.playerControllers)
                    {
                        if (player != null && player.unetView != null)
                        {
                            PeerInfoPlayer info;
                            info.netId = player.unetView.netId;
                            info.playerControllerId = player.unetView.playerControllerId;
                            playerIds.Add(info);
                        }
                    }

                    if (conn.clientOwnedObjects != null)
                    {
                        foreach (var netId in conn.clientOwnedObjects)
                        {
                            var obj = NetworkServer.FindLocalObject(netId);
                            if (obj == null)
                            {
                                continue;
                            }

                            var objUV = obj.GetComponent <NetworkIdentity>();
                            if (objUV.playerControllerId != -1)
                            {
                                // already added players
                                continue;
                            }

                            PeerInfoPlayer info;
                            info.netId = netId;
                            info.playerControllerId = -1;
                            playerIds.Add(info);
                        }
                    }
                    if (playerIds.Count > 0)
                    {
                        peerInfo.playerIds = playerIds.ToArray();
                    }
                    addresses.Add(peerInfo);
                }
            }

            listMsg.peers = addresses.ToArray();

            // (re)send all peers to all peers (including the new one)
            for (int i = 0; i < NetworkServer.connections.Count; i++)
            {
                var conn = NetworkServer.connections[i];
                if (conn != null)
                {
                    listMsg.oldServerConnectionId = conn.connectionId;
                    conn.Send(MsgType.NetworkInfo, listMsg);
                }
            }
        }
    private IEnumerator CheckForMigration()
    {
        if (!checking)
        {
            checking = true;
            // add in a random delay so that all clients don't try to do the same thing immediately on disconnect
            yield return(new WaitForSeconds((float)new System.Random().NextDouble() * 2.0f));

            if (migrationManager.hostWasShutdown)
            {
                if (migrationManager.waitingReconnectToNewHost)
                {
                    migrationManager.Reset(ClientScene.ReconnectIdHost);

                    networkAddress = migrationManager.newHostAddress;

                    StartClient();
                }
                else
                {
                    PeerInfoMessage m_NewHostInfo = new PeerInfoMessage();

                    bool youAreNewHost;
                    if (migrationManager.FindNewHost(out m_NewHostInfo, out youAreNewHost))
                    {
                        migrationManager.newHostAddress = m_NewHostInfo.address;
                        if (youAreNewHost)
                        {
                            // you cannot be the new host.. you were the old host..?
                            Debug.LogWarning("MigrationManager FindNewHost - new host is self?");
                        }
                        else
                        {
                            migrationManager.waitingReconnectToNewHost = true;
                        }
                    }
                }
            }
            else if (migrationManager.disconnectedFromHost && migrationManager.oldServerConnectionId != -1)
            {
                if (migrationManager.waitingToBecomeNewHost)
                {
                    migrationManager.BecomeNewHost(NetworkManager.singleton.networkPort);

                    Debug.Log("Starting discovery server broadcast");
                    discovery.StartBroadcastServer();
                }
                else if (migrationManager.waitingReconnectToNewHost)
                {
                    migrationManager.Reset(migrationManager.oldServerConnectionId);
                    NetworkManager.singleton.networkAddress = migrationManager.newHostAddress;
                    NetworkManager.singleton.client.ReconnectToNewHost(migrationManager.newHostAddress, NetworkManager.singleton.networkPort);
                }
                else
                {
                    PeerInfoMessage m_NewHostInfo = new PeerInfoMessage();

                    bool youAreNewHost;
                    if (migrationManager.FindNewHost(out m_NewHostInfo, out youAreNewHost))
                    {
                        migrationManager.newHostAddress = m_NewHostInfo.address.Replace("::ffff:", "");;
                        if (youAreNewHost)
                        {
                            migrationManager.waitingToBecomeNewHost = true;
                        }
                        else
                        {
                            migrationManager.waitingReconnectToNewHost = true;
                        }
                    }
                }
            }
        }
        checking = false;
    }
Exemple #16
0
 public override bool FindNewHost(out PeerInfoMessage newHostInfo, out bool youAreNewHost)
 {
     Debug.Log("FindNewHost");
     return(base.FindNewHost(out newHostInfo, out youAreNewHost));
 }
 /// <summary>
 /// <para>This sends the set of peers in the game to all the peers in the game.</para>
 /// </summary>
 public void SendPeerInfo()
 {
     if (this.m_HostMigration)
     {
         PeerListMessage        msg  = new PeerListMessage();
         List <PeerInfoMessage> list = new List <PeerInfoMessage>();
         for (int i = 0; i < NetworkServer.connections.Count; i++)
         {
             NetworkConnection connection = NetworkServer.connections[i];
             if (connection != null)
             {
                 string          str;
                 int             num2;
                 NetworkID       kid;
                 NodeID          eid;
                 byte            num3;
                 PeerInfoMessage item = new PeerInfoMessage();
                 NetworkTransport.GetConnectionInfo(NetworkServer.serverHostId, connection.connectionId, out str, out num2, out kid, out eid, out num3);
                 item.connectionId = connection.connectionId;
                 item.port         = num2;
                 if (i == 0)
                 {
                     item.port    = NetworkServer.listenPort;
                     item.isHost  = true;
                     item.address = "<host>";
                 }
                 else
                 {
                     item.address = str;
                     item.isHost  = false;
                 }
                 List <PeerInfoPlayer> list2 = new List <PeerInfoPlayer>();
                 for (int k = 0; k < connection.playerControllers.Count; k++)
                 {
                     PlayerController controller = connection.playerControllers[k];
                     if ((controller != null) && (controller.unetView != null))
                     {
                         PeerInfoPlayer player;
                         player.netId = controller.unetView.netId;
                         player.playerControllerId = controller.unetView.playerControllerId;
                         list2.Add(player);
                     }
                 }
                 if (connection.clientOwnedObjects != null)
                 {
                     foreach (NetworkInstanceId id in connection.clientOwnedObjects)
                     {
                         GameObject obj2 = NetworkServer.FindLocalObject(id);
                         if ((obj2 != null) && (obj2.GetComponent <NetworkIdentity>().playerControllerId == -1))
                         {
                             PeerInfoPlayer player2;
                             player2.netId = id;
                             player2.playerControllerId = -1;
                             list2.Add(player2);
                         }
                     }
                 }
                 if (list2.Count > 0)
                 {
                     item.playerIds = list2.ToArray();
                 }
                 list.Add(item);
             }
         }
         msg.peers = list.ToArray();
         for (int j = 0; j < NetworkServer.connections.Count; j++)
         {
             NetworkConnection connection2 = NetworkServer.connections[j];
             if (connection2 != null)
             {
                 msg.oldServerConnectionId = connection2.connectionId;
                 connection2.Send(11, msg);
             }
         }
     }
 }
    public override bool FindNewHost(out PeerInfoMessage newHostInfo, out bool youAreNewHost)
    {
        bool isHost = base.FindNewHost(out newHostInfo, out youAreNewHost);

        return(isHost);
    }
        /// <summary>
        ///   <para>This sends the set of peers in the game to all the peers in the game.</para>
        /// </summary>
        public void SendPeerInfo()
        {
            if (!this.m_HostMigration)
            {
                return;
            }
            PeerListMessage        peerListMessage     = new PeerListMessage();
            List <PeerInfoMessage> peerInfoMessageList = new List <PeerInfoMessage>();

            for (int index = 0; index < NetworkServer.connections.Count; ++index)
            {
                NetworkConnection connection = NetworkServer.connections[index];
                if (connection != null)
                {
                    PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
                    string          address;
                    int             port;
                    NetworkID       network;
                    NodeID          dstNode;
                    byte            error;
                    NetworkTransport.GetConnectionInfo(NetworkServer.serverHostId, connection.connectionId, out address, out port, out network, out dstNode, out error);
                    peerInfoMessage.connectionId = connection.connectionId;
                    peerInfoMessage.port         = port;
                    if (index == 0)
                    {
                        peerInfoMessage.port    = NetworkServer.listenPort;
                        peerInfoMessage.isHost  = true;
                        peerInfoMessage.address = "<host>";
                    }
                    else
                    {
                        peerInfoMessage.address = address;
                        peerInfoMessage.isHost  = false;
                    }
                    List <PeerInfoPlayer> peerInfoPlayerList = new List <PeerInfoPlayer>();
                    using (List <PlayerController> .Enumerator enumerator = connection.playerControllers.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            PlayerController current = enumerator.Current;
                            if (current != null && (Object)current.unetView != (Object)null)
                            {
                                PeerInfoPlayer peerInfoPlayer;
                                peerInfoPlayer.netId = current.unetView.netId;
                                peerInfoPlayer.playerControllerId = current.unetView.playerControllerId;
                                peerInfoPlayerList.Add(peerInfoPlayer);
                            }
                        }
                    }
                    if (connection.clientOwnedObjects != null)
                    {
                        using (HashSet <NetworkInstanceId> .Enumerator enumerator = connection.clientOwnedObjects.GetEnumerator())
                        {
                            while (enumerator.MoveNext())
                            {
                                NetworkInstanceId current     = enumerator.Current;
                                GameObject        localObject = NetworkServer.FindLocalObject(current);
                                if (!((Object)localObject == (Object)null) && (int)localObject.GetComponent <NetworkIdentity>().playerControllerId == -1)
                                {
                                    PeerInfoPlayer peerInfoPlayer;
                                    peerInfoPlayer.netId = current;
                                    peerInfoPlayer.playerControllerId = (short)-1;
                                    peerInfoPlayerList.Add(peerInfoPlayer);
                                }
                            }
                        }
                    }
                    if (peerInfoPlayerList.Count > 0)
                    {
                        peerInfoMessage.playerIds = peerInfoPlayerList.ToArray();
                    }
                    peerInfoMessageList.Add(peerInfoMessage);
                }
            }
            peerListMessage.peers = peerInfoMessageList.ToArray();
            for (int index = 0; index < NetworkServer.connections.Count; ++index)
            {
                NetworkConnection connection = NetworkServer.connections[index];
                if (connection != null)
                {
                    peerListMessage.oldServerConnectionId = connection.connectionId;
                    connection.Send((short)11, (MessageBase)peerListMessage);
                }
            }
        }