public State(string nam, int pri, StateTransitionAction ent, StateUpdateAction upd, StateTransitionAction ext) { name = nam; enterAction = ent; updateAction = upd; exitAction = ext; priority = pri; }
/// <summary> /// Constructor /// </summary> /// <param name="currentState">Current state.</param> /// <param name="stateMachineEvent">State machine event.</param> /// <param name="guard">Transition guard.</param> /// <param name="newState">New state.</param> /// <param name="action">Action.</param> public StateTransition(StateType currentState, EventType stateMachineEvent, StateTransitionGuard guard, StateType newState, StateTransitionAction action) { CurrentState = currentState; Event = stateMachineEvent; Guard = guard; NewState = newState; Action = action; }
/// <summary> /// registers a state transition action. fired when state changes from the 'from' enumeration to the 'to' enumeration. /// </summary> /// <param name="to"></param> /// <param name="from"></param> /// <param name="stateTransitionAction"></param> public void RegisterStateTransitionAction(TEnum to, TEnum from, StateTransitionAction stateTransitionAction) { Tuple <TEnum, TEnum> toFromTuple = new Tuple <TEnum, TEnum>(to, from); if (this.StateTransitionEvents.ContainsKey(toFromTuple)) { this.StateTransitionEvents[toFromTuple] += stateTransitionAction; } else { this.StateTransitionEvents.Add(toFromTuple, stateTransitionAction); } }
public void Test_State_Transition_Action_Gets_Exectued() { var actionHasBeenExecuted = false; var transitionAciton = new StateTransitionAction(() => { actionHasBeenExecuted = true; }); var stateMachine = new StateMachine <MachineState, MachineEvent>(MachineState.Off); stateMachine.AddTransition(MachineState.Off, MachineEvent.Start, () => { return(true); }, MachineState.Idle, transitionAciton); stateMachine.AddTransition(MachineState.Off, MachineEvent.Honk, () => { return(true); }, MachineState.Idle, () => { }); stateMachine.HandleEvent(MachineEvent.Start); Assert.IsTrue(actionHasBeenExecuted); Assert.AreEqual(MachineState.Idle, stateMachine.CurrentState); }
public StateTransition(ChainedContextState start, ChainedContextState stop, StateTransitionEvent allowedEvents, StateTransitionAction action) { this.Start = start; this.Stop = stop; this.AllowedEvents = allowedEvents; this.Action = action; }
/// <summary> /// Creates new instance of state change transition /// </summary> /// <param name="startState">Start state</param> /// <param name="transitionEvent">Event</param> /// <param name="guard">Transition guard</param> /// <param name="endState">End state</param> /// <param name="transitionAction">Transition Action</param> public void AddTransition(StateType startState, EventType transitionEvent, StateTransitionGuard guard, StateType endState, StateTransitionAction transitionAction) { AddTransition(new StateTransition <StateType, EventType>(startState, transitionEvent, guard, endState, transitionAction)); }