public BaseLoadBalancer(int pingInterval, string name, IRule rule, IPing ping, IPingStrategy pingStrategy, ILoggerFactory factory) { _name = name; _rule = rule; _ping = ping; if (_ping == null) { throw new ArgumentNullException(nameof(ping)); } _logger = factory?.CreateLogger(typeof(BaseLoadBalancer)) ?? NullLogger.Instance; _pingStrategy = pingStrategy ?? new SerialPingStrategy(); _allServerLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); _upServerLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); _counter = new Counter(); _timeoutTimer = new HashedWheelEvictionTimer(Utils.Timer); _timeoutTimer.Schedule(this.RunPing, TimeSpan.FromMilliseconds(pingInterval)); RunPing(); }
public LoadBalancerBuilder WithPingStrategy(IPingStrategy pingStrategy) => SetField(pingStrategy, (b, f) => b._pingStrategy = f);