Example #1
0
        /// <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);
            }
        }
Example #2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public GossipStrategy(Uri[] nodes, IGossipTransport transport)
     : this(nodes, transport, GetGossipConfiguration())
 {
 }