/// <summary> /// Constructor. /// </summary> /// <param name="nodes"></param> /// <param name="transport"></param> public GossipStrategy(Uri[] nodes, IGossipTransport transport, GossipConfiguration configuration) { if (transport == null) throw new ArgumentNullException("transport"); if (nodes == null) throw new ArgumentNullException("nodes"); if (configuration == null) throw new ArgumentNullException("configuration"); _heartbeat = 0; _timeStamp = 0; _configuration = configuration.Clone(); _random = configuration.RandomSeed < 0 ? new Random() : new Random(configuration.RandomSeed); _log = LogManager.GetLogger(GetType()); _transport = transport; _transport.IncomingPingCallback = OnPingReceived; // try to get local URI try { _localUri = _transport.LocalUri; } catch(Exception ex) { _log.Error("Failed to retrieve local URI value from transport.", ex); throw new Exception("Failed to retrieve local URI value from transport.", ex); } // setup intial nodes list foreach (var n in nodes) { if (n == null) throw new ArgumentException("Uri must not be null."); AddNewNode(n, 0); } }
/// <summary> /// Constructor. /// </summary> public GossipStrategy(Uri[] nodes, IGossipTransport transport) : this(nodes, transport, GetGossipConfiguration()) { }