From c7285e227a1caf7803a2f955b63da9d32c904418 Mon Sep 17 00:00:00 2001 From: Patrick Coglan Date: Sun, 20 Aug 2023 14:55:34 +0100 Subject: [PATCH 1/4] feat(NetworkManager): expose methods for clientId to transportId mappings --- .../Runtime/Core/NetworkManager.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 03076e657e..b0aab2b753 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -903,6 +903,20 @@ private void HostServerInitialize() ConnectionManager.InvokeOnClientConnectedCallback(LocalClientId); } + /// + /// Get the transportId from the associated clientId. + /// + /// The ClientId to get the TransportId from + /// + public ulong GetTransportIdFromClientId(ulong clientId) => ConnectionManager.ClientIdToTransportId(clientId); + + /// + /// Get the clientId from the associated transportId. + /// + /// The TransportId to get the ClientId from + /// + public ulong GetClientIdFromTransportId(ulong transportId) => ConnectionManager.TransportIdToClientId(transportId); + /// /// Disconnects the remote client. /// From 5aa75adeec7ff8d6a5f51db2df773ec8ed71f597 Mon Sep 17 00:00:00 2001 From: Emma Date: Wed, 18 Jun 2025 15:31:46 -0400 Subject: [PATCH 2/4] Add tests --- .../Tests/Runtime/NetworkManagerTests.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/testproject/Assets/Tests/Runtime/NetworkManagerTests.cs b/testproject/Assets/Tests/Runtime/NetworkManagerTests.cs index 5756f81b85..378b307ce5 100644 --- a/testproject/Assets/Tests/Runtime/NetworkManagerTests.cs +++ b/testproject/Assets/Tests/Runtime/NetworkManagerTests.cs @@ -9,9 +9,28 @@ namespace TestProject.RuntimeTests { + public class NetworkManagerTests : NetcodeIntegrationTest + { + protected override int NumberOfClients => 2; + + [Test] + public void ValidateTransportAndClientIds() + { + var transportId = m_ServerNetworkManager.GetTransportIdFromClientId(m_ServerNetworkManager.LocalClientId); + Assert.IsTrue(m_ServerNetworkManager.GetTransportIdFromClientId(m_ServerNetworkManager.LocalClientId) == m_ServerNetworkManager.ConnectionManager.ServerTransportId); + Assert.IsTrue(m_ServerNetworkManager.GetClientIdFromTransportId(transportId) == m_ServerNetworkManager.LocalClientId); + + foreach (var client in m_ClientNetworkManagers) + { + transportId = m_ServerNetworkManager.GetTransportIdFromClientId(client.LocalClientId); + Assert.AreEqual(client.LocalClientId, m_ServerNetworkManager.GetClientIdFromTransportId(transportId), "Server and client transport IDs don't match."); + } + } + } + [TestFixture(UseSceneManagement.SceneManagementDisabled)] [TestFixture(UseSceneManagement.SceneManagementEnabled)] - public class NetworkManagerTests : NetcodeIntegrationTest + public class NetworkManagerSceneTests : NetcodeIntegrationTest { private const string k_SceneToLoad = "InSceneNetworkObject"; protected override int NumberOfClients => 0; @@ -33,7 +52,7 @@ public enum UseSceneManagement private bool m_UseSceneManagement; - public NetworkManagerTests(UseSceneManagement useSceneManagement) + public NetworkManagerSceneTests(UseSceneManagement useSceneManagement) { m_UseSceneManagement = useSceneManagement == UseSceneManagement.SceneManagementEnabled; } From 694ddc885d25292b3df7baa3717f8f387f8192df Mon Sep 17 00:00:00 2001 From: Emma Date: Wed, 18 Jun 2025 15:35:38 -0400 Subject: [PATCH 3/4] update CHANGELOG --- com.unity.netcode.gameobjects/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/com.unity.netcode.gameobjects/CHANGELOG.md b/com.unity.netcode.gameobjects/CHANGELOG.md index f902782de2..ec0b15b3e6 100644 --- a/com.unity.netcode.gameobjects/CHANGELOG.md +++ b/com.unity.netcode.gameobjects/CHANGELOG.md @@ -10,6 +10,7 @@ Additional documentation and release notes are available at [Multiplayer Documen ### Added +- Added mappings between `ClientId` and `TransportId`. (#3515) - Added `SinglePlayerTransport` that provides the ability to start as a host for a single player network session. (#3475) - When using UnityTransport >=2.4 and Unity >= 6000.1.0a1, SetConnectionData will accept a fully qualified hostname instead of an IP as a connect address on the client side. (#3440) From c9a8ca6b6b1f5864e429ca95f0897e7ee7408688 Mon Sep 17 00:00:00 2001 From: Emma Date: Wed, 18 Jun 2025 15:47:10 -0400 Subject: [PATCH 4/4] Fix code doc --- .../Runtime/Core/NetworkManager.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs index 34832b5440..daa9fcfb64 100644 --- a/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs +++ b/com.unity.netcode.gameobjects/Runtime/Core/NetworkManager.cs @@ -1146,17 +1146,17 @@ private void HostServerInitialize() } /// - /// Get the transportId from the associated clientId. + /// Get the TransportId from the associated ClientId. /// /// The ClientId to get the TransportId from - /// + /// The TransportId associated with the given ClientId public ulong GetTransportIdFromClientId(ulong clientId) => ConnectionManager.ClientIdToTransportId(clientId); /// - /// Get the clientId from the associated transportId. + /// Get the ClientId from the associated TransportId. /// - /// The TransportId to get the ClientId from - /// + /// The TransportId to get the ClientId from + /// The ClientId from the associated TransportId public ulong GetClientIdFromTransportId(ulong transportId) => ConnectionManager.TransportIdToClientId(transportId); /// @@ -1319,7 +1319,7 @@ private void OnDestroy() } #if UNITY_EDITOR EditorApplication.playModeStateChanged -= ModeChanged; -#endif +#endif } // Command line options