自动保存域名
This commit is contained in:
parent
60784caa76
commit
12d9598a3e
@ -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>
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user