From 989c5933ba1f46520884ac742d8bf37d0b1ee4a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20Cor=C3=A9n?= Date: Fri, 4 Jun 2021 17:22:19 +0200 Subject: [PATCH 1/2] test: Fix some MultiInstanceHelper problems --- .../MultiInstance/MultiInstanceHelpers.cs | 63 ++++++++++++++++--- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs index 55d2979405..5a12e1732e 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs @@ -4,6 +4,7 @@ using System.Linq; using MLAPI.Configuration; using NUnit.Framework; +using Unity.CodeEditor; using UnityEngine; using UnityEngine.SceneManagement; using Object = UnityEngine.Object; @@ -15,8 +16,9 @@ namespace MLAPI.RuntimeTests /// public static class MultiInstanceHelpers { - - public static List NetworkManagerInstances = new List(); + private static List s_NetworkManagerInstances = new List(); + private static bool s_IsStarted; + private static int s_ClientCount; /// /// Creates NetworkingManagers and configures them for use in a multi instance setting. @@ -26,7 +28,7 @@ public static class MultiInstanceHelpers /// The clients NetworkManagers public static bool Create(int clientCount, out NetworkManager server, out NetworkManager[] clients) { - NetworkManagerInstances = new List(); + s_NetworkManagerInstances = new List(); CreateNewClients(clientCount, out clients); @@ -36,7 +38,7 @@ public static bool Create(int clientCount, out NetworkManager server, out Networ // Create networkManager component server = go.AddComponent(); - NetworkManagerInstances.Insert(0, server); + s_NetworkManagerInstances.Insert(0, server); // Set the NetworkConfig server.NetworkConfig = new NetworkConfig() @@ -78,7 +80,7 @@ public static bool CreateNewClients(int clientCount, out NetworkManager[] client }; } - NetworkManagerInstances.AddRange(clients); + s_NetworkManagerInstances.AddRange(clients); return true; } @@ -90,7 +92,7 @@ public static void StopOneClient(NetworkManager clientToStop) { clientToStop.StopClient(); Object.Destroy(clientToStop.gameObject); - NetworkManagerInstances.Remove(clientToStop); + s_NetworkManagerInstances.Remove(clientToStop); } /// @@ -99,8 +101,15 @@ public static void StopOneClient(NetworkManager clientToStop) /// public static void Destroy() { + if (!s_IsStarted) + { + throw new InvalidOperationException("MultiInstanceHelper is not started"); + } + + s_IsStarted = false; + // Shutdown the server which forces clients to disconnect - foreach (var networkManager in NetworkManagerInstances) + foreach (var networkManager in s_NetworkManagerInstances) { if (networkManager.IsServer) { @@ -109,12 +118,12 @@ public static void Destroy() } // Destroy the network manager instances - foreach (var networkManager in NetworkManagerInstances) + foreach (var networkManager in s_NetworkManagerInstances) { Object.Destroy(networkManager.gameObject); } - NetworkManagerInstances.Clear(); + s_NetworkManagerInstances.Clear(); // Destroy the temporary GameObject used to run co-routines if (s_CoroutineRunner != null) @@ -131,6 +140,14 @@ public static void Destroy() /// The Clients NetworkManager public static bool Start(bool host, NetworkManager server, NetworkManager[] clients) { + if (s_IsStarted) + { + throw new InvalidOperationException("MultiInstanceHelper already started. Did you forget to Destroy?"); + } + + s_IsStarted = true; + s_ClientCount = clients.Length; + if (host) { server.StartHost(); @@ -198,6 +215,32 @@ public static void MakeNetworkedObjectTestPrefab(NetworkObject networkObject, ui networkObject.IsSceneObject = false; } + // We use GameObject instead of SceneObject to be able to keep hierarchy + public static void MarkAsSceneObjectRoot(GameObject networkObjectRoot, NetworkManager server, NetworkManager[] clients) + { + networkObjectRoot.name += " - Server"; + + NetworkObject[] serverNetworkObjects = networkObjectRoot.GetComponentsInChildren(); + + for (int i = 0; i < serverNetworkObjects.Length; i++) + { + serverNetworkObjects[i].NetworkManagerOwner = server; + } + + for (int i = 0; i < clients.Length; i++) + { + GameObject root = Object.Instantiate(networkObjectRoot); + root.name += " - Client - " + i; + + NetworkObject[] clientNetworkObjects = root.GetComponentsInChildren(); + + for (int j = 0; j < clientNetworkObjects.Length; j++) + { + clientNetworkObjects[j].NetworkManagerOwner = clients[i]; + } + } + } + /// /// Waits on the client side to be connected. /// @@ -269,7 +312,7 @@ public static IEnumerator WaitForClientsConnected(NetworkManager[] clients, Coro /// The max frames to wait for public static IEnumerator WaitForClientConnectedToServer(NetworkManager server, CoroutineResultWrapper result = null, int maxFrames = 64) { - yield return WaitForClientsConnectedToServer(server, server.IsHost ? 2 : 1, result, maxFrames); + yield return WaitForClientsConnectedToServer(server, server.IsHost ? s_ClientCount + 1 : s_ClientCount, result, maxFrames); } /// From 52275ade184aa27658080e32b1f78ddc5c19a938 Mon Sep 17 00:00:00 2001 From: "M. Fatih MAR" Date: Tue, 8 Jun 2021 23:50:28 +0100 Subject: [PATCH 2/2] Update com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs --- .../Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs b/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs index 5a12e1732e..bf0a78fee3 100644 --- a/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs +++ b/com.unity.multiplayer.mlapi/Tests/Runtime/MultiInstance/MultiInstanceHelpers.cs @@ -4,7 +4,6 @@ using System.Linq; using MLAPI.Configuration; using NUnit.Framework; -using Unity.CodeEditor; using UnityEngine; using UnityEngine.SceneManagement; using Object = UnityEngine.Object;