/// <summary>
        ///
        /// </summary>
        /// <param name="serviceBus">The service bus on which commands are received</param>
        /// <param name="controlBus">The control bus for the synchronization messages between nodes</param>
        public void Start(IServiceBus serviceBus, IServiceBus controlBus)
        {
            _serviceBus = serviceBus;
            _controlBus = controlBus;

            _nodeState.ChangeTo <FollowerBehavior>();
        }
예제 #2
0
        public void Start()
        {
            _state.CurrentTerm = 0; // start at zero

            // get the last term for this node

            _state.ChangeTo <FollowerBehavior>();
        }
        public void Consume(IConsumeContext <VoteFor> context)
        {
            if (context.Message.Term > _candidateTerm)
            {
                _state.CurrentTerm = context.Message.Term;
                _state.ChangeTo <FollowerBehavior>();
                return;
            }

            _votes[context.Message.Supporter.ControlUri] = true;

            var votesGranted = _votes.Count(x => x);

            if (votesGranted >= _state.QuorumSize)
            {
                _elected = true;
            }

            if (_elected)
            {
//                if (_state.PromoteToLeader(_candidateTerm, lastLogIndex, lastLogTerm))
//                    _state.ChangeTo<LeaderBehavior>();
            }
        }