public DatabaseServerRegistrarAndMessengerComponent(IRuntimeState runtime, IServerRegistrar serverRegistrar, IServerMessenger serverMessenger, IServerRegistrationService registrationService, ILogger logger, IndexRebuilder indexRebuilder)
        {
            _runtime             = runtime;
            _logger              = logger;
            _registrationService = registrationService;
            _indexRebuilder      = indexRebuilder;

            // create task runner for DatabaseServerRegistrar
            _registrar = serverRegistrar as DatabaseServerRegistrar;
            if (_registrar != null)
            {
                _touchTaskRunner = new BackgroundTaskRunner <IBackgroundTask>("ServerRegistration",
                                                                              new BackgroundTaskRunnerOptions {
                    AutoStart = true
                }, logger);
            }

            // create task runner for BatchedDatabaseServerMessenger
            _messenger = serverMessenger as BatchedDatabaseServerMessenger;
            if (_messenger != null)
            {
                _processTaskRunner = new BackgroundTaskRunner <IBackgroundTask>("ServerInstProcess",
                                                                                new BackgroundTaskRunnerOptions {
                    AutoStart = true
                }, logger);
            }
        }
        public DatabaseServerRegistrarAndMessengerComponent(IRuntimeState runtime, IServerRegistrar serverRegistrar, IServerMessenger serverMessenger, IServerRegistrationService registrationService, ILogger logger, IndexRebuilder indexRebuilder)
        {
            _registrar = serverRegistrar as DatabaseServerRegistrar;
            if (_registrar == null)
            {
                throw new Exception("panic: registar.");
            }

            _messenger = serverMessenger as BatchedDatabaseServerMessenger;
            if (_messenger == null)
            {
                throw new Exception("panic: messenger");
            }

            _runtime             = runtime;
            _logger              = logger;
            _registrationService = registrationService;
            _indexRebuilder      = indexRebuilder;

            _touchTaskRunner = new BackgroundTaskRunner <IBackgroundTask>("ServerRegistration",
                                                                          new BackgroundTaskRunnerOptions {
                AutoStart = true
            }, logger);
            _processTaskRunner = new BackgroundTaskRunner <IBackgroundTask>("ServerInstProcess",
                                                                            new BackgroundTaskRunnerOptions {
                AutoStart = true
            }, logger);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="TouchServerTask"/> class.
 /// </summary>
 public TouchServerTask(IBackgroundTaskRunner <RecurringTaskBase> runner, int delayMilliseconds, int periodMilliseconds,
                        IServerRegistrationService svc, DatabaseServerRegistrar registrar, string serverAddress, ILogger logger)
     : base(runner, delayMilliseconds, periodMilliseconds)
 {
     _svc           = svc ?? throw new ArgumentNullException(nameof(svc));
     _registrar     = registrar;
     _serverAddress = serverAddress;
     _logger        = logger;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RecurringTaskBase"/> class.
 /// </summary>
 /// <param name="runner">The task runner.</param>
 /// <param name="delayMilliseconds">The delay.</param>
 /// <param name="periodMilliseconds">The period.</param>
 /// <param name="svc"></param>
 /// <param name="registrar"></param>
 /// <param name="serverAddress"></param>
 /// <remarks>The task will repeat itself periodically. Use this constructor to create a new task.</remarks>
 public TouchServerTask(IBackgroundTaskRunner <RecurringTaskBase> runner, int delayMilliseconds, int periodMilliseconds,
                        IServerRegistrationService svc, DatabaseServerRegistrar registrar, string serverAddress)
     : base(runner, delayMilliseconds, periodMilliseconds)
 {
     if (svc == null)
     {
         throw new ArgumentNullException("svc");
     }
     _svc           = svc;
     _registrar     = registrar;
     _serverAddress = serverAddress;
 }
        // bind to events
        protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
        {
            _registrar = ServerRegistrarResolver.Current.Registrar as DatabaseServerRegistrar;

            // only for the DatabaseServerRegistrar
            if (_registrar == null)
            {
                return;
            }

            UmbracoModule.RouteAttempt += UmbracoModuleRouteAttempt;
        }
        // bind to events
        protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
        {
            _registrar = ServerRegistrarResolver.Current.Registrar as DatabaseServerRegistrar;

            // only for the DatabaseServerRegistrar
            if (_registrar == null)
            {
                return;
            }

            _backgroundTaskRunner = new BackgroundTaskRunner <IBackgroundTask>(
                new BackgroundTaskRunnerOptions {
                AutoStart = true
            },
                applicationContext.ProfilingLogger.Logger);

            //We will start the whole process when a successful request is made
            UmbracoModule.RouteAttempt += UmbracoModuleRouteAttempt;
        }