Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        /// <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;
            }
        }
Exemplo n.º 4
0
        /// <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
            }
        }