自动保存域名

This commit is contained in:
陈国伟 2021-09-28 17:03:56 +08:00
parent 60784caa76
commit 12d9598a3e
3 changed files with 68 additions and 71 deletions

View File

@ -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>

View File

@ -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);
}
} }
} }

View File

@ -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 void Add(string domain)
public bool 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);
}
} }
} }