public Node(IVoteReceived voteReceived, IAppendEntry appendEntry, IHartbeatTimer hartbeat, ILoggerFactory loggerFactory, IObservableProvider observableProvider, ILogReplication logReplication, ServerIdentifier serverIdentifier) { _logReplication = logReplication; _serverIdentifier = serverIdentifier; _hartbeatTimer = hartbeat; _stateMachine = new Machine<ServerStateType, ServerStateType>(ServerStateType.Candidate, loggerFactory, observableProvider); _stateMachine.On(ServerStateType.Follower) .OnEntry(() => { hartbeat.Subscribe(_stateMachine); }) .OnEntrySubscribe<Follower>() .Permit(ServerStateType.Candidate, ServerStateType.Candidate); _stateMachine.On(ServerStateType.Candidate) .OnEntrySubscribe<Candidate>() .OnEntry(hartbeat.Reset) .Permit(ServerStateType.Follower, ServerStateType.Follower) .Permit(ServerStateType.Leader, ServerStateType.Leader) .Permit(ServerStateType.Candidate, ServerStateType.Candidate); _stateMachine.On(ServerStateType.Leader) .OnEntrySubscribe<Leader>() .Permit(ServerStateType.Follower, ServerStateType.Follower); _voteReceivedeDispose = voteReceived.Subscribe(_stateMachine); _appendEntryDispose = appendEntry.Subscribe(_stateMachine); _stateMachine.OnNext(ServerStateType.Follower); }
public TestConsumer(IObservableProvider <int> observable) { observable.Observable.Subscribe(a => Console.WriteLine(a)); }