public void Start() { lock (StateLock) { if (IsStarted) { throw new InvalidOperationException("Cluster is already started"); } if (IsDisposed) { throw new ObjectDisposedException("Cluster is already disposed"); } OnStarting(); allNodes = endpoints.Select(CreateNode).ToArray(); ioQueue = new NodeQueue(allNodes); workingNodes = allNodes.ToArray(); allNodes.IntoDictionary(reconnectPolicies, n => n, reconnectPolicyFactory.Create); locator.Initialize(allNodes); worker.Start(); OnStarted(); } }
public virtual void Start() { allNodes = endpoints.Select(CreateNode).ToArray(); ioQueue = new NodeQueue(allNodes); workingNodes = allNodes.ToArray(); locator.Initialize(allNodes); worker.Start(); }
public virtual void Start() { lock (StateLock) { if (isDisposed) { throw new ObjectDisposedException("Cluster is already disposed"); } if (allNodes != null) { throw new InvalidOperationException("Cluster is already initialized"); } allNodes = endpoints.Select(CreateNode).ToArray(); ioQueue = new NodeQueue(allNodes); workingNodes = allNodes.ToArray(); locator.Initialize(allNodes); worker.Start(); } }
private NodeQueue ioQueue; // the nodes that has IO pending protected ClusterBase(IEnumerable <IPEndPoint> endpoints, INodeLocator locator, IReconnectPolicyFactory reconnectPolicyFactory) { var finalEndpoints = (endpoints ?? throw new ArgumentNullException(nameof(endpoints))).ToArray(); if (finalEndpoints.Length < 1) { throw new ArgumentException("Must provide at least one endpoint to connect to", nameof(endpoints)); } this.endpoints = finalEndpoints; this.locator = locator ?? throw new ArgumentNullException(nameof(locator)); this.reconnectPolicies = new Dictionary <INode, IReconnectPolicy>(); this.reconnectPolicyFactory = reconnectPolicyFactory; this.ioQueue = NodeQueue.Empty; StateLock = new object(); shutdownToken = new CancellationTokenSource(); workerIsDone = new ManualResetEventSlim(false); worker = new Thread(Worker) { Name = "IO Thread {" + String.Join(", ", finalEndpoints.Select(e => e.ToString())) + "}" }; }