同步操作将从 Gitee 极速下载/fastgithub 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
using Microsoft.Extensions.Options;using System.Collections.Concurrent;using System.Collections.Generic;using System.Diagnostics.CodeAnalysis;using System.Linq;using System.Net;namespace FastGithub.Configuration{/// <summary>/// FastGithub配置/// </summary>public class FastGithubConfig{private SortedDictionary<DomainPattern, DomainConfig> domainConfigs;private ConcurrentDictionary<string, DomainConfig?> domainConfigCache;/// <summary>/// http代理端口/// </summary>public int HttpProxyPort { get; set; }/// <summary>/// 回退的dns/// </summary>public IPEndPoint[] FallbackDns { get; set; }/// <summary>/// FastGithub配置/// </summary>/// <param name="options"></param>/// <param name="logger"></param>public FastGithubConfig(IOptionsMonitor<FastGithubOptions> options){var opt = options.CurrentValue;this.HttpProxyPort = opt.HttpProxyPort;this.FallbackDns = opt.FallbackDns;this.domainConfigs = ConvertDomainConfigs(opt.DomainConfigs);this.domainConfigCache = new ConcurrentDictionary<string, DomainConfig?>();options.OnChange(opt => this.Update(opt));}/// <summary>/// 更新配置/// </summary>/// <param name="options"></param>private void Update(FastGithubOptions options){this.HttpProxyPort = options.HttpProxyPort;this.FallbackDns = options.FallbackDns;this.domainConfigs = ConvertDomainConfigs(options.DomainConfigs);this.domainConfigCache = new ConcurrentDictionary<string, DomainConfig?>();}/// <summary>/// 配置转换/// </summary>/// <param name="domainConfigs"></param>/// <returns></returns>private static SortedDictionary<DomainPattern, DomainConfig> ConvertDomainConfigs(Dictionary<string, DomainConfig> domainConfigs){var result = new SortedDictionary<DomainPattern, DomainConfig>();foreach (var kv in domainConfigs){result.Add(new DomainPattern(kv.Key), kv.Value);}return result;}/// <summary>/// 是否匹配指定的域名/// </summary>/// <param name="domain"></param>/// <returns></returns>public bool IsMatch(string domain){return this.TryGetDomainConfig(domain, out _);}/// <summary>/// 尝试获取域名配置/// </summary>/// <param name="domain"></param>/// <param name="value"></param>/// <returns></returns>public bool TryGetDomainConfig(string domain, [MaybeNullWhen(false)] out DomainConfig value){value = this.domainConfigCache.GetOrAdd(domain, GetDomainConfig);return value != null;DomainConfig? GetDomainConfig(string domain){var key = this.domainConfigs.Keys.FirstOrDefault(item => item.IsMatch(domain));return key == null ? null : this.domainConfigs[key];}}/// <summary>/// 获取所有域名表达式/// </summary>/// <returns></returns>public DomainPattern[] GetDomainPatterns(){return this.domainConfigs.Keys.ToArray();}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。