コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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();
        });
コード例 #3
0
ファイル: HeadlessBenchmark.cs プロジェクト: MirageNet/Mirage
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: HostSetup.cs プロジェクト: MirageNet/Mirage
        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);
            }
        });
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: MultipleClients.cs プロジェクト: MirageNet/Mirage
        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);
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        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);
            }
        });
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: HostSetup.cs プロジェクト: twglhk/Mirage
        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);
        });
コード例 #12
0
        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);
            }
        }
コード例 #13
0
ファイル: ClientServerSetup.cs プロジェクト: phodoval/Mirage
        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>();
        });
コード例 #14
0
ファイル: ClientServerSetup.cs プロジェクト: MirageNet/Mirage
        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();
        });
コード例 #15
0
        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();
        });