void Initialize() { if (initialized) { return; } initialized = true; if (logger.LogEnabled()) { logger.Log("NetworkServer Created version " + Version.Current); } //Make sure connections are cleared in case any old connections references exist from previous sessions connections.Clear(); if (transport == null) { transport = GetComponent <AsyncTransport>(); } if (authenticator != null) { authenticator.OnServerAuthenticated += OnAuthenticated; Connected.AddListener(authenticator.OnServerAuthenticateInternal); } else { // if no authenticator, consider every connection as authenticated Connected.AddListener(OnAuthenticated); } }
public override async Task <IConnection> AcceptAsync() { if (Accepters == null) { Accepters = new Dictionary <Task <IConnection>, AsyncTransport>(); foreach (AsyncTransport transport in transports) { Task <IConnection> transportAccepter = transport.AcceptAsync(); Accepters[transportAccepter] = transport; } } // that's it nobody is left to accept if (Accepters.Count == 0) { return(null); } // wait for any one of them to accept var task = await Task.WhenAny(Accepters.Keys); AsyncTransport acceptedTransport = Accepters[task]; Accepters.Remove(task); IConnection value = await task; if (value == null) { // this transport closed. Get the next one return(await AcceptAsync()); } else { // transport may accept more connections task = acceptedTransport.AcceptAsync(); Accepters[task] = acceptedTransport; return(value); } }
/// <summary> /// Connect client to a NetworkServer instance. /// </summary> /// <param name="uri">Address of the server to connect to</param> public async Task ConnectAsync(Uri uri) { if (logger.LogEnabled()) { logger.Log("Client Connect: " + uri); } AsyncTransport transport = Transport; if (transport == null) { transport = GetComponent <AsyncTransport>(); } connectState = ConnectState.Connecting; try { IConnection transportConnection = await transport.ConnectAsync(uri); RegisterSpawnPrefabs(); InitializeAuthEvents(); // setup all the handlers Connection = new NetworkConnection(transportConnection); Time.Reset(); RegisterMessageHandlers(Connection); Time.UpdateClient(this); _ = OnConnected(); } catch (Exception) { connectState = ConnectState.Disconnected; throw; } }
/// <summary> /// virtual so that inheriting classes' OnValidate() can call base.OnValidate() too /// </summary> public virtual void OnValidate() { // add transport if there is none yet. makes upgrading easier. if (transport == null) { // was a transport added yet? if not, add one transport = GetComponent <AsyncTransport>(); if (transport == null) { transport = gameObject.AddComponent <AsyncTcpTransport>(); Debug.Log("NetworkManager: added default Transport because there was none yet."); } #if UNITY_EDITOR UnityEditor.Undo.RecordObject(gameObject, "Added default Transport"); #endif } // add NetworkServer if there is none yet. makes upgrading easier. if (GetComponent <NetworkServer>() == null) { server = gameObject.AddComponent <NetworkServer>(); Debug.Log("NetworkManager: added NetworkServer because there was none yet."); #if UNITY_EDITOR UnityEditor.Undo.RecordObject(gameObject, "Added NetworkServer"); #endif } // add NetworkClient if there is none yet. makes upgrading easier. if (GetComponent <NetworkClient>() == null) { client = gameObject.AddComponent <NetworkClient>(); Debug.Log("NetworkManager: added NetworkClient because there was none yet."); #if UNITY_EDITOR UnityEditor.Undo.RecordObject(gameObject, "Added NetworkClient"); #endif } }