using DNS.Server;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System.Threading;
using System.Threading.Tasks;
namespace FastGithub.Dns
{
    /// 
    /// dns后台服务
    /// 
    sealed class DnsHostedService : IHostedService
    {
        private readonly DnsServer dnsServer;
        private readonly ILogger logger;
        /// 
        /// dns后台服务
        /// 
        /// 
        /// 
        /// 
        public DnsHostedService(
            GithubRequestResolver githubRequestResolver,
            IOptions options,
            ILogger logger)
        {
            this.dnsServer = new DnsServer(githubRequestResolver, options.Value.UpStream);
            this.logger = logger;
        }
        /// 
        /// 启动dns服务
        /// 
        /// 
        /// 
        public Task StartAsync(CancellationToken cancellationToken)
        {
            this.dnsServer.Listen();
            this.logger.LogInformation("dns服务启用成功");
            return Task.CompletedTask;
        }
        /// 
        /// 停止dns服务
        /// 
        /// 
        /// 
        public Task StopAsync(CancellationToken cancellationToken)
        {
            this.dnsServer.Dispose();
            this.logger.LogInformation("dns服务已终止");
            return Task.CompletedTask;
        }
    }
}