Пример #1
0
        public void ScheduleTransitionTo(TimeSpan delay, ConsumerState expectedCurrent, ConsumerState state)
        {
            var currentState = _currentState;

            if (currentState == expectedCurrent)
            {
                RunAfterDelay();
            }
            else
            {
                _log.Warning(
                    "Skipping scheduled state transition to {nextState} because expected current to be {expectedState}, but it's actually {currentState}",
                    state, expectedCurrent, currentState);
            }

            async void RunAfterDelay()
            {
                try
                {
                    await Task.Delay(delay).ConfigureAwait(false);

                    TransitionTo(expectedCurrent, state);
                }
                catch (Exception ex)
                {
                    _log.Error("Error while executing scheduled transition");
                }
            }
        }
Пример #2
0
        public void TestConsumerState()
        {
            ConsumerState state = new ConsumerState(CreateConsumerInfo(1));

            Assert.IsNotNull(state.Info);
            Assert.AreEqual(1, state.Info.ConsumerId.Value);
        }
Пример #3
0
 private void SetState(ConsumerState state)
 {
     lock (_lock)
     {
         if (!_hasDisconnected)
         {
             _stateManager.SetState(state);
         }
     }
 }
Пример #4
0
 private async void RunSafe(Func <Task> func)
 {
     try
     {
         await func().ConfigureAwait(false);
     }
     catch (Exception ex)
     {
         _log.Error("Unexpected consumer state machine error", ex);
         _currentState = CorruptedState.Instance;
     }
 }
Пример #5
0
        public void TransitionTo(ConsumerState expectedCurrent, ConsumerState state)
        {
            var originalState = Interlocked.CompareExchange(ref _currentState, state, expectedCurrent);

            if (originalState == expectedCurrent)
            {
                _log.Debug("Entering state {stateType}", state);
                state.OnEnter(this);
            }
            else
            {
                _log.Warning(
                    "Transition to state {nextState} not completed because expected state is {expectedState} but actual original is {originalState}",
                    state, expectedCurrent, originalState);
            }
        }
Пример #6
0
    public void SetState(ConsumerState state)
    {
        switch (state)
        {
        case ConsumerState.Watered:
            anim.SetTrigger("Watered");
            break;

        case ConsumerState.Reset:
            anim.SetTrigger("Reset");
            break;

        default:
            break;
        }
    }
Пример #7
0
 public async ValueTask <ConsumerState> StateChangedFrom(ConsumerState state, CancellationToken cancellationToken)
 => await _state.StateChangedFrom(state, cancellationToken);
Пример #8
0
 public HeartBeatResponseBodyConsumerObject(string consumerName, ConsumerState state)
 {
     ConsumerName = consumerName;
     State        = state;
 }
Пример #9
0
 public RunningConsumer(ConnectionName connectionName, ConsumerState state)
 {
     ConnectionName = connectionName;
     State          = state;
 }
Пример #10
0
        /// <summary>
        /// Wait for the state to change from a specific state.
        /// </summary>
        /// <returns>
        /// The current state.
        /// </returns>
        /// <remarks>
        /// If the state change to a final state, then all awaiting tasks will complete.
        /// </remarks>
        public static async ValueTask <ConsumerStateChanged> StateChangedFrom(this IConsumer consumer, ConsumerState state, CancellationToken cancellationToken = default)
        {
            var newState = await consumer.OnStateChangeFrom(state, cancellationToken).ConfigureAwait(false);

            return(new ConsumerStateChanged(consumer, newState));
        }
Пример #11
0
 public RunningConsumer(ConnectionName connectionName, ConsumerState state)
 {
     ConnectionName = connectionName;
     State = state;
 }
Пример #12
0
 public void Stop()
 {
     _currentState = InitialState.Instance;
 }
Пример #13
0
 public async ValueTask <ConsumerState> StateChangedTo(ConsumerState state, CancellationToken cancellationToken) => await _stateManager.StateChangedTo(state, cancellationToken);
Пример #14
0
 public async ValueTask <ConsumerState> OnStateChangeFrom(ConsumerState state, CancellationToken cancellationToken)
 => await _state.StateChangedFrom(state, cancellationToken).ConfigureAwait(false);
Пример #15
0
 public bool IsFinalState(ConsumerState state) => _state.IsFinalState(state);
Пример #16
0
 internal ConsumerStateChanged(IConsumer consumer, ConsumerState consumerState)
 {
     Consumer      = consumer;
     ConsumerState = consumerState;
 }
Пример #17
0
        public async ValueTask <ConsumerStateChanged> StateChangedFrom(ConsumerState state, CancellationToken cancellationToken)
        {
            var newState = await _state.StateChangedFrom(state, cancellationToken).ConfigureAwait(false);

            return(new ConsumerStateChanged(this, newState));
        }