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(); } } } }