/// <summary> /// Get next valid state based on the current state and event given without changing the current state /// If there is no valid next state, TaskStateTransitionException will be thrown. /// </summary> /// <param name="taskEvent"></param> /// <returns></returns> internal TaskState GetNext(TaskStateEvent taskEvent) { StateTransition <TaskState, TaskStateEvent> transition = new StateTransition <TaskState, TaskStateEvent>(_currentState, taskEvent); TaskState nextState; if (!Transitions.TryGetValue(transition, out nextState)) { throw new TaskStateTransitionException(_currentState, taskEvent); } 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); }