Browse Source

自动保存域名

陈国伟 3 years ago
parent
commit
12d9598a3e

+ 28 - 36
FastGithub.DomainResolve/DnscryptProxy.cs

@@ -16,7 +16,7 @@ namespace FastGithub.DomainResolve
     /// <summary>
     /// <summary>
     /// DnscryptProxy服务
     /// DnscryptProxy服务
     /// </summary>
     /// </summary>
-    sealed class DnscryptProxy : IDisposable
+    sealed class DnscryptProxy
     {
     {
         private const string PATH = "dnscrypt-proxy";
         private const string PATH = "dnscrypt-proxy";
         private const string NAME = "dnscrypt-proxy";
         private const string NAME = "dnscrypt-proxy";
@@ -99,6 +99,33 @@ namespace FastGithub.DomainResolve
             }
             }
         }
         }
 
 
+        /// <summary>
+        /// 停止服务
+        /// </summary>
+        public void Stop()
+        {
+            try
+            {
+                if (OperatingSystem.IsWindows())
+                {
+                    StartDnscryptProxy("-service stop")?.WaitForExit();
+                    StartDnscryptProxy("-service uninstall")?.WaitForExit();
+                }
+                if (this.process != null && this.process.HasExited == false)
+                {
+                    this.process.Kill();
+                }
+            }
+            catch (Exception ex)
+            {
+                this.logger.LogWarning($"{NAME}停止失败:{ex.Message }");
+            }
+            finally
+            {
+                this.LocalEndPoint = null;
+            }
+        }
+
         /// <summary>
         /// <summary>
         /// 获取可用的随机端口
         /// 获取可用的随机端口
         /// </summary>
         /// </summary>
@@ -158,41 +185,6 @@ namespace FastGithub.DomainResolve
             });
             });
         }
         }
 
 
-        /// <summary>
-        /// 释放资源
-        /// </summary>
-        public void Dispose()
-        {
-            try
-            {
-                this.Stop();
-            }
-            catch (Exception ex)
-            {
-                this.logger.LogWarning($"{NAME}停止失败:{ex.Message }");
-            }
-            finally
-            {
-                this.LocalEndPoint = null;
-            }
-        }
-
-        /// <summary>
-        /// 停止服务
-        /// </summary>
-        private void Stop()
-        {
-            if (OperatingSystem.IsWindows())
-            {
-                StartDnscryptProxy("-service stop")?.WaitForExit();
-                StartDnscryptProxy("-service uninstall")?.WaitForExit();
-            }
-            if (this.process != null && this.process.HasExited == false)
-            {
-                this.process.Kill();
-            }
-        }
-
         /// <summary>
         /// <summary>
         /// 转换为字符串
         /// 转换为字符串
         /// </summary>
         /// </summary>

+ 12 - 1
FastGithub.DomainResolve/DomainResolveHostedService.cs

@@ -27,7 +27,7 @@ namespace FastGithub.DomainResolve
         {
         {
             this.dnscryptProxy = dnscryptProxy;
             this.dnscryptProxy = dnscryptProxy;
             this.speedTester = speedTester;
             this.speedTester = speedTester;
-        } 
+        }
 
 
         /// <summary>
         /// <summary>
         /// 后台任务
         /// 后台任务
@@ -45,5 +45,16 @@ namespace FastGithub.DomainResolve
                 await Task.Delay(this.speedTestPeriod, stoppingToken);
                 await Task.Delay(this.speedTestPeriod, stoppingToken);
             }
             }
         }
         }
+
+        /// <summary>
+        /// 停止服务
+        /// </summary>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        public override Task StopAsync(CancellationToken cancellationToken)
+        {
+            this.dnscryptProxy.Stop();
+            return base.StopAsync(cancellationToken);
+        }
     }
     }
 }
 }

+ 28 - 34
FastGithub.DomainResolve/DomainSpeedTester.cs

@@ -14,7 +14,7 @@ namespace FastGithub.DomainResolve
     /// <summary>
     /// <summary>
     /// 域名的IP测速服务
     /// 域名的IP测速服务
     /// </summary>
     /// </summary>
-    sealed class DomainSpeedTester : IDisposable
+    sealed class DomainSpeedTester
     {
     {
         private const string DOMAINS_JSON_FILE = "domains.json";
         private const string DOMAINS_JSON_FILE = "domains.json";
 
 
@@ -73,15 +73,39 @@ namespace FastGithub.DomainResolve
         /// 添加要测速的域名
         /// 添加要测速的域名
         /// </summary>
         /// </summary>
         /// <param name="domain"></param>
         /// <param name="domain"></param>
-        /// <returns></returns>
-        public bool Add(string domain)
+        public void Add(string domain)
         {
         {
             lock (this.syncRoot)
             lock (this.syncRoot)
             {
             {
-                return this.domainIPAddressHashSet.TryAdd(domain, new IPAddressItemHashSet());
+                if (this.domainIPAddressHashSet.TryAdd(domain, new IPAddressItemHashSet()))
+                {
+                    try
+                    {
+                        this.SaveDomains();
+                    }
+                    catch (Exception ex)
+                    {
+                        logger.LogWarning($"保存域名数据失败:{ex.Message}");
+                    }
+                }
             }
             }
         }
         }
 
 
+        /// <summary>
+        /// 保存域名
+        /// </summary>
+        private void SaveDomains()
+        {
+            var domains = this.domainIPAddressHashSet.Keys
+                .Select(item => new DomainPattern(item))
+                .OrderBy(item => item)
+                .Select(item => item.ToString())
+                .ToArray();
+
+            var utf8Json = JsonSerializer.SerializeToUtf8Bytes(domains, new JsonSerializerOptions { WriteIndented = true });
+            File.WriteAllBytes(DOMAINS_JSON_FILE, utf8Json);
+        }
+
         /// <summary>
         /// <summary>
         /// 获取测试后排序的IP
         /// 获取测试后排序的IP
         /// </summary>
         /// </summary>
@@ -123,35 +147,5 @@ namespace FastGithub.DomainResolve
                 await hashSet.PingAllAsync();
                 await hashSet.PingAllAsync();
             }
             }
         }
         }
-
-        /// <summary>
-        /// 释放资源
-        /// </summary>
-        public void Dispose()
-        {
-            try
-            {
-                this.SaveDomains();
-            }
-            catch (Exception ex)
-            {
-                this.logger.LogWarning($"保存域名数据失败:{ex.Message}");
-            }
-        }
-
-        /// <summary>
-        /// 保存域名
-        /// </summary>
-        private void SaveDomains()
-        {
-            var domains = this.domainIPAddressHashSet.Keys
-               .Select(item => new DomainPattern(item))
-               .OrderBy(item => item)
-               .Select(item => item.ToString())
-               .ToArray();
-
-            var utf8Json = JsonSerializer.SerializeToUtf8Bytes(domains, new JsonSerializerOptions { WriteIndented = true });
-            File.WriteAllBytes(DOMAINS_JSON_FILE, utf8Json);
-        }
     }
     }
 }
 }