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