using Microsoft.Extensions.DependencyInjection;
using System.Collections.Generic;
using System.Linq;
using System.Net;
namespace FastGithub.Scanner
{
///
/// GithubContext集合
///
[Service(ServiceLifetime.Singleton)]
sealed class GithubScanResults
{
private readonly object syncRoot = new();
private readonly List contexts = new();
///
/// 添加GithubContext
///
///
///
public bool Add(GithubContext context)
{
lock (this.syncRoot)
{
if (this.contexts.Contains(context))
{
return false;
}
this.contexts.Add(context);
return true;
}
}
///
/// 转换为数组
///
///
public GithubContext[] ToArray()
{
lock (this.syncRoot)
{
return this.contexts.ToArray();
}
}
///
/// 查找最优的ip
///
///
///
public IPAddress? FindBestAddress(string domain)
{
lock (this.syncRoot)
{
return this.contexts
.Where(item => item.Domain == domain && item.AvailableRate > 0d)
.OrderByDescending(item => item.AvailableRate)
.ThenByDescending(item => item.Available)
.ThenBy(item => item.AvgElapsed)
.Select(item => item.Address)
.FirstOrDefault();
}
}
}
}