using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace FastGithub.DomainResolve
{
    /// 
    /// 域名的IP测速后台服务
    /// 
    sealed class DomainSpeedTestHostedService : BackgroundService
    {
        private readonly DomainSpeedTestService speedTestService;
        private readonly TimeSpan testDueTime = TimeSpan.FromMinutes(1d);
        /// 
        /// 域名的IP测速后台服务
        /// 
        /// 
        public DomainSpeedTestHostedService(DomainSpeedTestService speedTestService)
        {
            this.speedTestService = speedTestService;
        }
        /// 
        /// 启动时
        /// 
        /// 
        /// 
        public override async Task StartAsync(CancellationToken cancellationToken)
        {
            await this.speedTestService.LoadDataAsync(cancellationToken);
            await base.StartAsync(cancellationToken);
        }
        /// 
        /// 停止时
        /// 
        /// 
        /// 
        public override async Task StopAsync(CancellationToken cancellationToken)
        {
            await this.speedTestService.SaveDataAsync();
            await base.StopAsync(cancellationToken);
        }
        /// 
        /// 后台测速
        /// 
        /// 
        /// 
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (stoppingToken.IsCancellationRequested == false)
            {
                await this.speedTestService.TestSpeedAsync(stoppingToken);
                await Task.Delay(this.testDueTime, stoppingToken);
            }
        }
    }
}