public override void UnregisterListener(LeaderListener listener) { lock (this) { _leaderListeners.remove(listener); } }
private static ThreadStart LeaderViewUpdatingListener(RaftMachine raft, IEnumerable <RaftMachine> validRafts, IDictionary <MemberId, MemberId> leaderViews, long viewCount, CompletableFuture <MemberId> futureAgreedLeader) { LeaderListener listener = newLeader => { lock ( leaderViews ) { leaderViews[raft.Identity()] = newLeader.memberId(); bool leaderIsValid = false; foreach (RaftMachine validRaft in validRafts) { if (validRaft.Identity().Equals(newLeader.memberId())) { leaderIsValid = true; } } if (newLeader.memberId() != null && leaderIsValid && AllAgreeOnLeader(leaderViews, viewCount, newLeader.memberId())) { futureAgreedLeader.complete(newLeader.memberId()); } } }; raft.RegisterListener(listener); return(() => raft.unregisterListener(listener)); }
public override void RegisterListener(LeaderListener listener) { lock (this) { _leaderListeners.Add(listener); listener.OnLeaderSwitch(_state.leaderInfo()); } }