async UniTask StartClient(int i, string networkAddress) { var clientGo = new GameObject($"Client {i}", typeof(NetworkClient), typeof(ClientObjectManager), typeof(PlayerSpawner), typeof(NetworkSceneManager)); NetworkClient client = clientGo.GetComponent <NetworkClient>(); ClientObjectManager objectManager = clientGo.GetComponent <ClientObjectManager>(); PlayerSpawner spawner = clientGo.GetComponent <PlayerSpawner>(); NetworkSceneManager networkSceneManager = clientGo.GetComponent <NetworkSceneManager>(); networkSceneManager.Client = client; objectManager.Client = client; objectManager.NetworkSceneManager = networkSceneManager; objectManager.Start(); objectManager.RegisterPrefab(MonsterPrefab.GetComponent <NetworkIdentity>()); objectManager.RegisterPrefab(PlayerPrefab.GetComponent <NetworkIdentity>()); spawner.Client = client; spawner.PlayerPrefab = PlayerPrefab.GetComponent <NetworkIdentity>(); spawner.ClientObjectManager = objectManager; spawner.SceneManager = networkSceneManager; client.Transport = transport; try { await client.ConnectAsync(networkAddress); } catch (Exception ex) { Debug.LogException(ex); } }
public IEnumerator SetupHost() => UniTask.ToCoroutine(async() => { networkManagerGo = new GameObject(); networkManagerGo.AddComponent <MockTransport>(); sceneManager = networkManagerGo.AddComponent <NetworkSceneManager>(); serverObjectManager = networkManagerGo.AddComponent <ServerObjectManager>(); clientObjectManager = networkManagerGo.AddComponent <ClientObjectManager>(); manager = networkManagerGo.AddComponent <NetworkManager>(); manager.client = networkManagerGo.GetComponent <NetworkClient>(); manager.server = networkManagerGo.GetComponent <NetworkServer>(); server = manager.server; client = manager.client; sceneManager.client = client; sceneManager.server = server; serverObjectManager.server = server; serverObjectManager.networkSceneManager = sceneManager; clientObjectManager.client = client; clientObjectManager.networkSceneManager = sceneManager; ExtraSetup(); // wait for all Start() methods to get invoked await UniTask.DelayFrame(1); await StartHost(); playerGO = new GameObject("playerGO", typeof(Rigidbody)); identity = playerGO.AddComponent <NetworkIdentity>(); component = playerGO.AddComponent <T>(); serverObjectManager.AddPlayerForConnection(server.LocalConnection, playerGO); client.Update(); });
void StartClient(int i, string networkAddress) { GameObject clientGo = Instantiate(ClientPrefab); clientGo.name = $"Client {i}"; NetworkClient client = clientGo.GetComponent <NetworkClient>(); ClientObjectManager objectManager = clientGo.GetComponent <ClientObjectManager>(); CharacterSpawner spawner = clientGo.GetComponent <CharacterSpawner>(); NetworkSceneManager networkSceneManager = clientGo.GetComponent <NetworkSceneManager>(); networkSceneManager.Client = client; objectManager.Client = client; objectManager.NetworkSceneManager = networkSceneManager; objectManager.Start(); objectManager.RegisterPrefab(MonsterPrefab.GetComponent <NetworkIdentity>()); objectManager.RegisterPrefab(PlayerPrefab.GetComponent <NetworkIdentity>()); spawner.Client = client; spawner.PlayerPrefab = PlayerPrefab.GetComponent <NetworkIdentity>(); spawner.ClientObjectManager = objectManager; spawner.SceneManager = networkSceneManager; client.SocketFactory = socketFactory; try { client.Connect(networkAddress); } catch (Exception ex) { Debug.LogException(ex); } }
public void Setup() { go = new GameObject(); client = go.AddComponent <NetworkClient>(); server = go.AddComponent <NetworkServer>(); spawner = go.AddComponent <CharacterSpawner>(); sceneManager = go.AddComponent <NetworkSceneManager>(); serverObjectManager = go.AddComponent <ServerObjectManager>(); clientObjectManager = go.AddComponent <ClientObjectManager>(); spawner.SceneManager = sceneManager; sceneManager.Client = client; sceneManager.Server = server; serverObjectManager.Server = server; clientObjectManager.Client = client; clientObjectManager.NetworkSceneManager = sceneManager; spawner.Client = client; spawner.Server = server; spawner.ServerObjectManager = serverObjectManager; spawner.ClientObjectManager = clientObjectManager; playerPrefab = new GameObject(); NetworkIdentity playerId = playerPrefab.AddComponent <NetworkIdentity>(); spawner.PlayerPrefab = playerId; pos1 = new GameObject().transform; pos2 = new GameObject().transform; spawner.startPositions.Add(pos1); spawner.startPositions.Add(pos2); }
public IEnumerator SetupHost() => UniTask.ToCoroutine(async() => { networkManagerGo = new GameObject(); // set gameobject name to test name (helps with debugging) networkManagerGo.name = TestContext.CurrentContext.Test.MethodName; networkManagerGo.AddComponent <TestSocketFactory>(); sceneManager = networkManagerGo.AddComponent <NetworkSceneManager>(); serverObjectManager = networkManagerGo.AddComponent <ServerObjectManager>(); clientObjectManager = networkManagerGo.AddComponent <ClientObjectManager>(); manager = networkManagerGo.AddComponent <NetworkManager>(); manager.Client = networkManagerGo.GetComponent <NetworkClient>(); manager.Server = networkManagerGo.GetComponent <NetworkServer>(); server = manager.Server; client = manager.Client; if (ServerConfig != null) { server.PeerConfig = ServerConfig; } if (ClientConfig != null) { client.PeerConfig = ClientConfig; } sceneManager.Client = client; sceneManager.Server = server; serverObjectManager.Server = server; serverObjectManager.NetworkSceneManager = sceneManager; clientObjectManager.Client = client; clientObjectManager.NetworkSceneManager = sceneManager; ExtraSetup(); // wait for all Start() methods to get invoked await UniTask.DelayFrame(1); if (AutoStartServer) { await StartHost(); playerGO = new GameObject("playerGO", typeof(Rigidbody)); identity = playerGO.AddComponent <NetworkIdentity>(); component = playerGO.AddComponent <T>(); serverObjectManager.AddCharacter(server.LocalPlayer, playerGO); // wait for client to spawn it await AsyncUtil.WaitUntilWithTimeout(() => client.Player.HasCharacter); } });
public void RegisterPrefabs() { var gameObject = new GameObject("NetworkObjectManager", typeof(ClientObjectManager)); ClientObjectManager client = gameObject.GetComponent <ClientObjectManager>(); ClientObjectManagerInspector inspector = ScriptableObject.CreateInstance <ClientObjectManagerInspector>(); inspector.RegisterPrefabs(client); Assert.That(client.spawnPrefabs, Has.Count.GreaterThan(2)); GameObject.DestroyImmediate(gameObject); GameObject.DestroyImmediate(inspector); }
private IEnumerator StartClient(int i, SocketFactory socketFactory) { var clientGo = new GameObject($"Client {i}", typeof(NetworkClient), typeof(ClientObjectManager)); NetworkClient client = clientGo.GetComponent <NetworkClient>(); ClientObjectManager objectManager = clientGo.GetComponent <ClientObjectManager>(); objectManager.Client = client; objectManager.Start(); client.SocketFactory = socketFactory; objectManager.RegisterPrefab(MonsterPrefab); client.Connect("localhost"); while (!client.IsConnected) { yield return(null); } }
private IEnumerator StartClient(int i, Transport transport) { var clientGo = new GameObject($"Client {i}", typeof(NetworkClient), typeof(ClientObjectManager)); NetworkClient client = clientGo.GetComponent <NetworkClient>(); ClientObjectManager objectManager = clientGo.GetComponent <ClientObjectManager>(); objectManager.client = client; objectManager.Start(); client.Transport = transport; objectManager.RegisterPrefab(monsterPrefab); client.ConnectAsync("localhost"); while (!client.IsConnected) { yield return(null); } }
public IEnumerator UnitySetUp() => UniTask.ToCoroutine(async() => { Console.WriteLine($"[MirageTest] UnitySetUp class:{TestContext.CurrentContext.Test.ClassName} method:{TestContext.CurrentContext.Test.MethodName}"); networkManagerGo = new GameObject(); networkManagerGo.AddComponent <TestSocketFactory>(); serverObjectManager = networkManagerGo.AddComponent <ServerObjectManager>(); clientObjectManager = networkManagerGo.AddComponent <ClientObjectManager>(); manager = networkManagerGo.AddComponent <NetworkManager>(); server = networkManagerGo.AddComponent <NetworkServer>(); client = networkManagerGo.AddComponent <NetworkClient>(); manager.Client = networkManagerGo.GetComponent <NetworkClient>(); manager.Server = networkManagerGo.GetComponent <NetworkServer>(); if (ServerConfig != null) { server.PeerConfig = ServerConfig; } if (ClientConfig != null) { client.PeerConfig = ClientConfig; } serverObjectManager.Server = server; clientObjectManager.Client = client; ExtraSetup(); // wait for all Start() methods to get invoked await UniTask.DelayFrame(2); if (AutoStartServer) { await StartHost(); playerGO = new GameObject("playerGO", typeof(Rigidbody)); playerIdentity = playerGO.AddComponent <NetworkIdentity>(); playerComponent = playerGO.AddComponent <T>(); serverObjectManager.AddCharacter(server.LocalPlayer, playerGO); // wait for client to spawn it await AsyncUtil.WaitUntilWithTimeout(() => client.Player.HasCharacter); } });
public void PreserveExisting() { var preexisting = new GameObject("object", typeof(NetworkIdentity)); var gameObject = new GameObject("NetworkObjectManager", typeof(ClientObjectManager)); ClientObjectManager client = gameObject.GetComponent <ClientObjectManager>(); client.spawnPrefabs.Add(preexisting.GetComponent <NetworkIdentity>()); ClientObjectManagerInspector inspector = ScriptableObject.CreateInstance <ClientObjectManagerInspector>(); inspector.RegisterPrefabs(client); Assert.That(client.spawnPrefabs, Contains.Item(preexisting.GetComponent <NetworkIdentity>())); GameObject.DestroyImmediate(gameObject); GameObject.DestroyImmediate(preexisting); }
public IEnumerator SetupHost() => UniTask.ToCoroutine(async() => { networkManagerGo = new GameObject(); // set gameobject name to test name (helps with debugging) networkManagerGo.name = TestContext.CurrentContext.Test.MethodName; networkManagerGo.AddComponent <MockTransport>(); sceneManager = networkManagerGo.AddComponent <NetworkSceneManager>(); serverObjectManager = networkManagerGo.AddComponent <ServerObjectManager>(); clientObjectManager = networkManagerGo.AddComponent <ClientObjectManager>(); manager = networkManagerGo.AddComponent <NetworkManager>(); manager.Client = networkManagerGo.GetComponent <NetworkClient>(); manager.Server = networkManagerGo.GetComponent <NetworkServer>(); server = manager.Server; client = manager.Client; sceneManager.Client = client; sceneManager.Server = server; serverObjectManager.Server = server; serverObjectManager.NetworkSceneManager = sceneManager; clientObjectManager.Client = client; clientObjectManager.NetworkSceneManager = sceneManager; ExtraSetup(); // wait for all Start() methods to get invoked await UniTask.DelayFrame(1); await StartHost(); playerGO = new GameObject("playerGO", typeof(Rigidbody)); identity = playerGO.AddComponent <NetworkIdentity>(); component = playerGO.AddComponent <T>(); serverObjectManager.AddPlayerForConnection(server.LocalConnection, playerGO); // wait for client to spawn it await AsyncUtil.WaitUntilWithTimeout(() => client.Connection.Identity != null); });
async UniTask StartClient(int i, Transport transport, string networkAddress) { var clientGo = new GameObject($"Client {i}", typeof(NetworkClient), typeof(ClientObjectManager)); NetworkClient client = clientGo.GetComponent <NetworkClient>(); ClientObjectManager objectManager = clientGo.GetComponent <ClientObjectManager>(); objectManager.client = client; objectManager.Start(); client.Transport = transport; objectManager.RegisterPrefab(MonsterPrefab.GetComponent <NetworkIdentity>()); objectManager.RegisterPrefab(PlayerPrefab.GetComponent <NetworkIdentity>()); try { await client.ConnectAsync(networkAddress); client.Send(new AddPlayerMessage()); } catch (Exception ex) { Debug.LogException(ex); } }
public IEnumerator Setup() => UniTask.ToCoroutine(async() => { serverGo = new GameObject("server", typeof(NetworkSceneManager), typeof(ServerObjectManager), typeof(NetworkServer)); clientGo = new GameObject("client", typeof(NetworkSceneManager), typeof(ClientObjectManager), typeof(NetworkClient)); testTransport = serverGo.AddComponent <LoopbackTransport>(); await UniTask.Delay(1); server = serverGo.GetComponent <NetworkServer>(); client = clientGo.GetComponent <NetworkClient>(); server.Transport = testTransport; client.Transport = testTransport; serverSceneManager = serverGo.GetComponent <NetworkSceneManager>(); clientSceneManager = clientGo.GetComponent <NetworkSceneManager>(); serverSceneManager.Server = server; clientSceneManager.Client = client; serverSceneManager.Start(); clientSceneManager.Start(); serverObjectManager = serverGo.GetComponent <ServerObjectManager>(); serverObjectManager.Server = server; serverObjectManager.NetworkSceneManager = serverSceneManager; serverObjectManager.Start(); clientObjectManager = clientGo.GetComponent <ClientObjectManager>(); clientObjectManager.Client = client; clientObjectManager.NetworkSceneManager = clientSceneManager; clientObjectManager.Start(); ExtraSetup(); // create and register a prefab playerPrefab = new GameObject("serverPlayer", typeof(NetworkIdentity), typeof(T)); NetworkIdentity identity = playerPrefab.GetComponent <NetworkIdentity>(); identity.AssetId = Guid.NewGuid(); clientObjectManager.RegisterPrefab(identity); // wait for client and server to initialize themselves await UniTask.Delay(1); // start the server var started = new UniTaskCompletionSource(); server.Started.AddListener(() => started.TrySetResult()); server.ListenAsync().Forget(); await started.Task; // now start the client await client.ConnectAsync("localhost"); await AsyncUtil.WaitUntilWithTimeout(() => server.Players.Count > 0); // get the connections so that we can spawn players connectionToClient = server.Players.First(); connectionToServer = client.Player; // create a player object in the server serverPlayerGO = Object.Instantiate(playerPrefab); serverIdentity = serverPlayerGO.GetComponent <NetworkIdentity>(); serverComponent = serverPlayerGO.GetComponent <T>(); serverObjectManager.AddCharacter(connectionToClient, serverPlayerGO); // wait for client to spawn it await AsyncUtil.WaitUntilWithTimeout(() => connectionToServer.Identity != null); clientIdentity = connectionToServer.Identity; clientPlayerGO = clientIdentity.gameObject; clientComponent = clientPlayerGO.GetComponent <T>(); });
public IEnumerator Setup() => UniTask.ToCoroutine(async() => { serverGo = new GameObject("server", typeof(NetworkSceneManager), typeof(ServerObjectManager), typeof(NetworkServer)); clientGo = new GameObject("client", typeof(NetworkSceneManager), typeof(ClientObjectManager), typeof(NetworkClient)); socketFactory = serverGo.AddComponent <TestSocketFactory>(); await UniTask.Delay(1); server = serverGo.GetComponent <NetworkServer>(); client = clientGo.GetComponent <NetworkClient>(); if (ServerConfig != null) { server.PeerConfig = ServerConfig; } if (ClientConfig != null) { client.PeerConfig = ClientConfig; } server.SocketFactory = socketFactory; client.SocketFactory = socketFactory; serverSceneManager = serverGo.GetComponent <NetworkSceneManager>(); clientSceneManager = clientGo.GetComponent <NetworkSceneManager>(); serverSceneManager.Server = server; clientSceneManager.Client = client; serverSceneManager.Start(); clientSceneManager.Start(); serverObjectManager = serverGo.GetComponent <ServerObjectManager>(); serverObjectManager.Server = server; serverObjectManager.NetworkSceneManager = serverSceneManager; serverObjectManager.Start(); clientObjectManager = clientGo.GetComponent <ClientObjectManager>(); clientObjectManager.Client = client; clientObjectManager.NetworkSceneManager = clientSceneManager; clientObjectManager.Start(); ExtraSetup(); // create and register a prefab playerPrefab = new GameObject("player (unspawned)", typeof(NetworkIdentity), typeof(T)); NetworkIdentity identity = playerPrefab.GetComponent <NetworkIdentity>(); identity.PrefabHash = Guid.NewGuid().GetHashCode(); clientObjectManager.RegisterPrefab(identity); // wait for client and server to initialize themselves await UniTask.Delay(1); // start the server var started = new UniTaskCompletionSource(); server.Started.AddListener(() => started.TrySetResult()); server.StartServer(); await started.Task; if (AutoConnectClient) { // now start the client client.Connect("localhost"); await AsyncUtil.WaitUntilWithTimeout(() => server.Players.Count > 0); // get the connections so that we can spawn players serverPlayer = server.Players.First(); clientPlayer = client.Player; // create a player object in the server serverPlayerGO = Object.Instantiate(playerPrefab); serverPlayerGO.name = "player (server)"; serverIdentity = serverPlayerGO.GetComponent <NetworkIdentity>(); serverComponent = serverPlayerGO.GetComponent <T>(); serverObjectManager.AddCharacter(serverPlayer, serverPlayerGO); // wait for client to spawn it await AsyncUtil.WaitUntilWithTimeout(() => clientPlayer.HasCharacter); clientIdentity = clientPlayer.Identity; clientPlayerGO = clientIdentity.gameObject; clientPlayerGO.name = "player (client)"; clientComponent = clientPlayerGO.GetComponent <T>(); } await LateSetup(); });
public IEnumerator UnitySetUp() => UniTask.ToCoroutine(async() => { Console.WriteLine($"[MirageTest] UnitySetUp class:{TestContext.CurrentContext.Test.ClassName} method:{TestContext.CurrentContext.Test.MethodName} "); serverGo = new GameObject("server", typeof(ServerObjectManager), typeof(NetworkServer)); clientGo = new GameObject("client", typeof(ClientObjectManager), typeof(NetworkClient)); socketFactory = serverGo.AddComponent <TestSocketFactory>(); server = serverGo.GetComponent <NetworkServer>(); client = clientGo.GetComponent <NetworkClient>(); if (ServerConfig != null) { server.PeerConfig = ServerConfig; } if (ClientConfig != null) { client.PeerConfig = ClientConfig; } server.SocketFactory = socketFactory; client.SocketFactory = socketFactory; serverObjectManager = serverGo.GetComponent <ServerObjectManager>(); serverObjectManager.Server = server; clientObjectManager = clientGo.GetComponent <ClientObjectManager>(); clientObjectManager.Client = client; ExtraSetup(); // wait 2 frames for start to be called await UniTask.DelayFrame(2); // create and register a prefab playerPrefab = new GameObject("player (unspawned)", typeof(NetworkIdentity), typeof(T)); // DontDestroyOnLoad so that "prefab" wont be destroyed by scene loading // also means that NetworkScenePostProcess will skip this unspawned object Object.DontDestroyOnLoad(playerPrefab); var identity = playerPrefab.GetComponent <NetworkIdentity>(); identity.PrefabHash = Guid.NewGuid().GetHashCode(); clientObjectManager.RegisterPrefab(identity); // wait for client and server to initialize themselves await UniTask.Delay(1); // start the server var started = new UniTaskCompletionSource(); server.Started.AddListener(() => started.TrySetResult()); server.StartServer(); await started.Task; if (AutoConnectClient) { // now start the client client.Connect("localhost"); await AsyncUtil.WaitUntilWithTimeout(() => server.Players.Count > 0); // get the connections so that we can spawn players serverPlayer = server.Players.First(); clientPlayer = client.Player; // create a player object in the server serverPlayerGO = Object.Instantiate(playerPrefab); serverPlayerGO.name = "player (server)"; serverIdentity = serverPlayerGO.GetComponent <NetworkIdentity>(); serverComponent = serverPlayerGO.GetComponent <T>(); serverObjectManager.AddCharacter(serverPlayer, serverPlayerGO); // wait for client to spawn it await AsyncUtil.WaitUntilWithTimeout(() => clientPlayer.HasCharacter); clientIdentity = clientPlayer.Identity; clientPlayerGO = clientIdentity.gameObject; clientPlayerGO.name = "player (client)"; clientComponent = clientPlayerGO.GetComponent <T>(); } await LateSetup(); });