Example #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);
            }
        }
Example #2
0
        public StandaloneNG()
        {
            server           = new NetworkServer();
            servertransport  = new KcpTransport();
            server.Transport = servertransport;
            _ = server.ListenAsync();

            client           = new NetworkClient();
            clienttransport  = new KcpTransport();
            client.Transport = clienttransport;
            client.ConnectAsync("localhost");
        }
Example #3
0
        public void MaxConnectionsTest()
        {
            var           secondGO            = new GameObject();
            NetworkClient secondClient        = secondGO.AddComponent <NetworkClient>();
            Transport     secondTestTransport = secondGO.AddComponent <LoopbackTransport>();

            secondClient.Transport = secondTestTransport;

            secondClient.ConnectAsync("localhost").Forget();

            Assert.That(server.connections, Has.Count.EqualTo(1));

            Object.Destroy(secondGO);
        }
Example #4
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);
            }
        }
        public void MaxConnectionsTest()
        {
            GameObject    secondGO            = new GameObject();
            NetworkClient secondClient        = secondGO.AddComponent <NetworkClient>();
            Transport     secondTestTransport = secondGO.AddComponent <LoopbackTransport>();

            secondClient.Transport = secondTestTransport;

            var builder = new UriBuilder
            {
                Host   = "localhost",
                Scheme = secondClient.Transport.Scheme.First(),
            };

            secondClient.ConnectAsync(builder.Uri).Forget();

            Assert.That(server.connections, Has.Count.EqualTo(1));

            Object.Destroy(secondGO);
        }
Example #6
0
        static void Main(string[] args)
        {
            server.Transport = serverTransport;
            _ = server.ListenAsync();

            client.Transport = clientTransport;
            _ = client.ConnectAsync("localhost");

            while (true)
            {
                serverTransport.Update();
                clientTransport.Update();


                if (client.IsConnected)
                {
                    client.Send(1);
                }
                Thread.Sleep(5);
            }
        }
Example #7
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);
            }
        }
Example #8
0
        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>();
        });
Example #9
0
        public IEnumerator Setup() => RunAsync(async() =>
        {
            serverGo      = new GameObject("server", typeof(NetworkSceneManager), typeof(NetworkServer));
            clientGo      = new GameObject("client", typeof(NetworkSceneManager), typeof(NetworkClient));
            testTransport = serverGo.AddComponent <LoopbackTransport>();

            await Task.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;

            ExtraSetup();

            // create and register a prefab
            playerPrefab = new GameObject("serverPlayer", typeof(NetworkIdentity), typeof(T));
            playerPrefab.GetComponent <NetworkIdentity>().AssetId = Guid.NewGuid();
            client.RegisterPrefab(playerPrefab);

            // wait for client and server to initialize themselves
            await Task.Delay(1);

            // start the server
            await server.ListenAsync();

            await Task.Delay(1);

            var builder = new UriBuilder
            {
                Host   = "localhost",
                Scheme = client.Transport.Scheme.First(),
            };

            // now start the client
            await client.ConnectAsync(builder.Uri);

            await WaitFor(() => server.connections.Count > 0);

            // get the connections so that we can spawn players
            connectionToClient = server.connections.First();
            connectionToServer = client.Connection;

            // create a player object in the server
            serverPlayerGO  = Object.Instantiate(playerPrefab);
            serverIdentity  = serverPlayerGO.GetComponent <NetworkIdentity>();
            serverComponent = serverPlayerGO.GetComponent <T>();
            server.AddPlayerForConnection(connectionToClient, serverPlayerGO);

            // wait for client to spawn it
            await WaitFor(() => connectionToServer.Identity != null);

            clientIdentity  = connectionToServer.Identity;
            clientPlayerGO  = clientIdentity.gameObject;
            clientComponent = clientPlayerGO.GetComponent <T>();
        });