/// <summary> /// Based on the event and current state to determine the next state /// </summary> /// <param name="systemEvent"></param> /// <returns></returns> internal SystemState GetNext(SystemStateEvent systemEvent) { var transition = new StateTransition<SystemState, SystemStateEvent>(_currentState, systemEvent); SystemState nextState; if (!Transitions.TryGetValue(transition, out nextState)) { throw new SystemStateTransitionException(_currentState, systemEvent); } return nextState; }
/// <summary> /// Based on the event and current state to determine the next state /// </summary> /// <param name="systemEvent"></param> /// <returns></returns> internal SystemState GetNext(SystemStateEvent systemEvent) { var transition = new StateTransition <SystemState, SystemStateEvent>(_currentState, systemEvent); SystemState nextState; if (!Transitions.TryGetValue(transition, out nextState)) { throw new SystemStateTransitionException(_currentState, systemEvent); } return(nextState); }
/// <summary> /// Move to next state based on the event given /// </summary> /// <param name="stateEvent"></param> /// <returns></returns> internal SystemState MoveNext(SystemStateEvent stateEvent) { _currentState = GetNext(stateEvent); return(_currentState); }
/// <summary> /// Move to next state based on the event given /// </summary> /// <param name="stateEvent"></param> /// <returns></returns> internal SystemState MoveNext(SystemStateEvent stateEvent) { _currentState = GetNext(stateEvent); return _currentState; }
/// <summary> /// Format a message /// </summary> /// <param name="systemState"></param> /// <param name="stateEvent"></param> /// <returns></returns> private static string ExceptionMessage(SystemState systemState, SystemStateEvent stateEvent) { return(string.Format(CultureInfo.InvariantCulture, "Unexpected event {0} in state {1}.", stateEvent, systemState)); }
/// <summary> /// Exception when error happens in system state transition /// </summary> /// <param name="systemState"></param> /// <param name="stateEvent"></param> internal SystemStateTransitionException(SystemState systemState, SystemStateEvent stateEvent) : base(ExceptionMessage(systemState, stateEvent)) { }
/// <summary> /// Format a message /// </summary> /// <param name="systemState"></param> /// <param name="stateEvent"></param> /// <returns></returns> private static string ExceptionMessage(SystemState systemState, SystemStateEvent stateEvent) { return string.Format(CultureInfo.InvariantCulture, "Unexpected event {0} in state {1}.", stateEvent, systemState); }