public override R EndExecute(IAsyncResult result) { if (!Object.ReferenceEquals(result, asyncResult)) { throw new ArgumentException("provided result argument does not match"); } if (asyncResultDic != null && asyncResultDic.Count > 0) { IList <IClusterResponse <T> > clusterResults = new List <IClusterResponse <T> >(); foreach (KeyValuePair <Server, IAsyncResult> pair in asyncResultDic) { IClusterResponse <T> response = null; try { response = new ClusterResponse <T>((T)_shard.EndSendMessage(pair.Key, pair.Value), pair.Key); } catch (Exception ex) { response = new ClusterResponse <T>(default(T), pair.Key, false, 1); } clusterResults.Add(response); } responseCollection.Responses = clusterResults; return(responseCollection); //_factory(clusterResults); } return(default(R)); }
public IClusterResponse <T> GetResponse(Server server) { IClusterResponse <T> response = null; if (responses != null) { IEnumerator enumerator = responses.GetEnumerator(); while (enumerator.MoveNext()) { IClusterResponse <T> res = (IClusterResponse <T>)enumerator.Current; if (res.Server.Equals(server)) { response = res; break; } } } return(response); }
internal Configuration.Services.ElectionResult ConductElection(ElectionId electionId, Address[] activeNodes, Activity activity) { Address[] votingNodes = null; if (activeNodes == null) { throw new ArgumentNullException("Active nodes are null"); } Election election = null; if (votingNodes == null) { votingNodes = new Address[activeNodes.Length]; } try { ElectionType electionType = ElectionType.None; if (activity == Activity.GeneralElectionsTriggered) { electionType = ElectionType.GeneralElections; } else if (activity == Activity.TakeoverElectionsTriggered) { electionType = ElectionType.TakeoverElections; } election = new Election(electionId, electionType); votingNodes = activeNodes; election.RequestingServerInfo = LocalServerInfo(); if (election.StartElection(votingNodes)) { ResponseCollection <object> response = (ResponseCollection <object>)MulticastRequest(election); if (response != null) { foreach (var server in _shard.ActiveChannelsList) { IClusterResponse <object> serverResponse = response.GetResponse(server); if (serverResponse.IsSuccessfull) { if (serverResponse.Value != null) { ElectionVote vote = serverResponse.Value as ElectionVote; if (vote != null) { election.AddVote(vote); } } } } } return(election.GetElectionResult()); } } catch (Exception e) { if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsErrorEnabled) { LoggerManager.Instance.ShardLogger.Error("ElectionManager.ConductElection()", e.ToString()); } } return(null); }