自动保存域名

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>
/// DnscryptProxy服务
/// </summary>
sealed class DnscryptProxy : IDisposable
sealed class DnscryptProxy
{
private const string PATH = "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>
@ -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>

View File

@ -45,5 +45,16 @@ namespace FastGithub.DomainResolve
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>
/// 域名的IP测速服务
/// </summary>
sealed class DomainSpeedTester : IDisposable
sealed class DomainSpeedTester
{
private const string DOMAINS_JSON_FILE = "domains.json";
@ -73,15 +73,39 @@ namespace FastGithub.DomainResolve
/// 添加要测速的域名
/// </summary>
/// <param name="domain"></param>
/// <returns></returns>
public bool Add(string domain)
public void Add(string domain)
{
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>
/// 获取测试后排序的IP
/// </summary>
@ -123,35 +147,5 @@ namespace FastGithub.DomainResolve
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);
}
}
}