void Initialize()
        {
            if (initialized)
            {
                return;
            }

            initialized = true;

#if NETSTANDARD
            Application.quitting += Disconnect;
#else
            // TODO - Finish and Fix this to match unity some how.
#endif
#if NETSTANDARD
            if (logger.LogEnabled())
            {
                logger.Log("NetworkServer Created version " + Version.Current);
            }
#else
            if (logger.LogEnabled())
            {
                logger.Log("NetworkServer Created version " + Assembly.GetAssembly(typeof(NetworkServer))?.GetName().Version);
            }
#endif

            //Make sure connections are cleared in case any old connections references exist from previous sessions
            connections.Clear();

#if NETSTANDARD
            if (Transport is null)
            {
                Transport = GetComponent <Transport>();
            }
#endif
            if (Transport == null)
            {
                throw new InvalidOperationException("Transport could not be found for NetworkServer");
            }

            if (authenticator != null)
            {
                authenticator.OnServerAuthenticated += OnAuthenticated;

#if NETSTANDARD
                Connected.AddListener(authenticator.OnServerAuthenticateInternal);
#else
                Connected += authenticator.OnServerAuthenticateInternal;
#endif
            }
            else
            {
                // if no authenticator, consider every connection as authenticated
#if NETSTANDARD
                Connected.AddListener(OnAuthenticated);
#else
                Connected += OnAuthenticated;
#endif
            }
        }
示例#2
0
        public override RaceWithFactory AddCompetitor(Transport.Transport transport)
        {
            if (transport.IsAir())
            {
                Competitors.Add(transport);
            }
            else
            {
                throw new AddTransportException();
            }

            return(this);
        }
示例#3
0
        public RaceWithFactory StartGame()
        {
            var minTime = float.MaxValue;

            foreach (var competitor in Competitors)
            {
                var competitorTime = competitor.TimeForDistance(_distance);
                if (competitorTime < minTime)
                {
                    minTime = competitorTime;
                    Winner  = competitor;
                }
            }

            return(this);
        }
        public async UniTask ConnectAsync(Uri uri)
#endif
        {
            if (logger.LogEnabled())
            {
                logger.Log("Client Connect: " + uri);
            }

#if NETSTANDARD
            if (Transport == null)
            {
                Transport = GetComponent <Transport.Transport>();
            }
#endif

            if (Transport == null)
            {
                throw new InvalidOperationException("Transport could not be found for NetworkClient");
            }

            connectState = ConnectState.Connecting;

            try
            {
                IConnection transportConnection = await Transport.ConnectAsync(uri);

                InitializeAuthEvents();

                // setup all the handlers
                Connection = GetNewConnection(transportConnection);
                Time.Reset();

                RegisterMessageHandlers();
                Time.UpdateClient(this);
                OnConnected().Forget();
            }
            catch (Exception)
            {
                connectState = ConnectState.Disconnected;
                throw;
            }
        }
示例#5
0
 public override RaceWithFactory AddCompetitor(Transport.Transport transport)
 {
     Competitors.Add(transport);
     return(this);
 }
示例#6
0
 public abstract RaceWithFactory AddCompetitor(Transport.Transport transport);
示例#7
0
 public void Travel(Transport.Transport transport)
 {
     transport.Travel();
 }