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 StandaloneNG() { server = new NetworkServer(); servertransport = new KcpTransport(); server.Transport = servertransport; _ = server.ListenAsync(); client = new NetworkClient(); clienttransport = new KcpTransport(); client.Transport = clienttransport; client.ConnectAsync("localhost"); }
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); }
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); }
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); } }
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() => 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>(); });