using linker.messenger.signin;
using linker.messenger.relay.client.transport;
using linker.libs;
using System.Diagnostics.CodeAnalysis;
namespace linker.messenger.relay.server.validator
{
///
/// 中继验证
///
public sealed partial class RelayServerValidatorTransfer
{
private List validators = new List();
public RelayServerValidatorTransfer()
{
}
///
/// 加载中继验证实现类
///
///
public void AddValidators(List list)
{
if (list == null) return;
validators = validators.Concat(list).Distinct(new RelayServerValidatorEqualityComparer()).ToList();
LoggerHelper.Instance.Info($"load relay server validator :{string.Join(",", list.Select(c => c.GetType().Name))}");
}
///
/// 删除一些验证实现类
///
///
public void RemoveValidators(List names)
{
foreach (string name in names)
{
IRelayServerValidator item = validators.FirstOrDefault(c => c.Name == name);
if (item != null)
validators.Remove(item);
}
}
///
/// 验证
///
///
///
///
///
public async Task Validate(RelayInfo relayInfo, SignCacheInfo cache, SignCacheInfo cache1)
{
foreach (var item in validators)
{
string result = await item.Validate(relayInfo, cache, cache1);
if (string.IsNullOrWhiteSpace(result) == false)
{
return result;
}
}
return string.Empty;
}
public sealed class RelayServerValidatorEqualityComparer : IEqualityComparer
{
public bool Equals(IRelayServerValidator x, IRelayServerValidator y)
{
return x.GetType().FullName == y.GetType().FullName;
}
public int GetHashCode([DisallowNull] IRelayServerValidator obj)
{
return obj.GetHashCode();
}
}
}
}