From a0fafb074d87ea39e724a88c5841dd33fe53da69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=9B=BD=E4=BC=9F?= <366193849@qq.com> Date: Thu, 22 Jul 2021 15:52:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=BA=8B=E4=BB=B6=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E6=84=8F=E5=A4=96=E5=81=9C=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FastGithub.Dns.DnscryptProxy/ControllState.cs | 23 +++++++++++ .../DnscryptProxyHostedService.cs | 39 ++++++++++++------- .../DnscryptProxyService.cs | 9 +++++ 3 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 FastGithub.Dns.DnscryptProxy/ControllState.cs diff --git a/FastGithub.Dns.DnscryptProxy/ControllState.cs b/FastGithub.Dns.DnscryptProxy/ControllState.cs new file mode 100644 index 0000000..5f76b18 --- /dev/null +++ b/FastGithub.Dns.DnscryptProxy/ControllState.cs @@ -0,0 +1,23 @@ +namespace FastGithub.Dns.DnscryptProxy +{ + /// + /// 服务控制状态 + /// + enum ControllState + { + /// + /// 未控制 + /// + None, + + /// + /// 控制启动 + /// + Started, + + /// + /// 控制停止 + /// + Stopped, + } +} diff --git a/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs b/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs index 8106f45..eed208f 100644 --- a/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs +++ b/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs @@ -38,6 +38,18 @@ namespace FastGithub.Dns.DnscryptProxy { await this.dnscryptProxyService.StartAsync(cancellationToken); this.logger.LogInformation($"{this.dnscryptProxyService}启动成功"); + + // 监听意外退出 + var service = this.dnscryptProxyService.Process; + if (service == null) + { + this.OnProcessExit(null, new EventArgs()); + } + else + { + service.EnableRaisingEvents = true; + service.Exited += this.OnProcessExit; + } } catch (Exception ex) { @@ -45,21 +57,18 @@ namespace FastGithub.Dns.DnscryptProxy } } - ///// - ///// 后台监控 - ///// - ///// - ///// - //protected override async Task ExecuteAsync(CancellationToken stoppingToken) - //{ - // await Task.Yield(); - - // this.dnscryptProxyService.Process?.WaitForExit(); - // if (this.isStopped == false) - // { - // this.logger.LogCritical($"{this.dnscryptProxyService}已停止运行,{nameof(FastGithub)}将无法解析域名。你可以把配置文件的{nameof(FastGithubOptions.PureDns)}修改为其它可用的DNS以临时使用。"); - // } - //} + /// + /// 进程退出时 + /// + /// + /// + private void OnProcessExit(object? sender, EventArgs e) + { + if (this.dnscryptProxyService.ControllState != ControllState.Stopped) + { + this.logger.LogCritical($"{this.dnscryptProxyService}已停止运行,{nameof(FastGithub)}将无法解析域名。你可以把配置文件的{nameof(FastGithubOptions.PureDns)}修改为其它可用的DNS以临时使用。"); + } + } /// /// 停止dnscrypt-proxy diff --git a/FastGithub.Dns.DnscryptProxy/DnscryptProxyService.cs b/FastGithub.Dns.DnscryptProxy/DnscryptProxyService.cs index ac20b6a..08305d6 100644 --- a/FastGithub.Dns.DnscryptProxy/DnscryptProxyService.cs +++ b/FastGithub.Dns.DnscryptProxy/DnscryptProxyService.cs @@ -19,6 +19,11 @@ namespace FastGithub.Dns.DnscryptProxy /// public Process? Process { get; private set; } + /// + /// 获取服务控制状态 + /// + public ControllState ControllState { get; private set; } = ControllState.None; + /// /// DnscryptProxy服务 /// @@ -35,6 +40,8 @@ namespace FastGithub.Dns.DnscryptProxy /// public async Task StartAsync(CancellationToken cancellationToken) { + this.ControllState = ControllState.Started; + var tomlPath = $"{name}.toml"; await TomlUtil.SetListensAsync(tomlPath, this.fastGithubConfig.PureDns, cancellationToken); @@ -60,6 +67,8 @@ namespace FastGithub.Dns.DnscryptProxy /// public void Stop() { + this.ControllState = ControllState.Stopped; + if (OperatingSystem.IsWindows()) { StartDnscryptProxy("-service stop")?.WaitForExit();