public override void AddEvent(EventInstance eventToAdd) { base.AddEvent(eventToAdd); while (CanProcess) ProcessNextEvent(stateMachine.CurrentState); }
/// <summary> /// By returning the current state of the fsm, we nullify this event because nobody responded. /// </summary> /// <param name="eventToProcess"></param> /// <returns></returns> public override State ProcessEvent(State originalState, EventInstance eventToProcess) { Transition transition = transitions.MatchTransition(eventToProcess); if (transition != null) return TraverseDown(new TransitionEvent(this, transition, eventToProcess)); return originalState; }
public Transition MatchTransition(EventInstance eventTarget) { Transition result = null; foreach (Transition transition in transitions) { if (transition.Matches(eventTarget)) { if (result != null) throw new InvalidOperationException("Multiple states eligible for transition"); result = transition; } } return result; }
public virtual State ProcessEvent(State originalState, EventInstance eventToProcess) { Transition transition = transitions.MatchTransition(eventToProcess); if (transition != null) { var transitionEvent = new TransitionEvent(originalState, transition, eventToProcess); // If originating from substate if (!this.Equals(originalState)) return originalState.TraverseUp(transitionEvent); else { Exit(transitionEvent); return parent.TraverseUp(transitionEvent); } } // Not handled, pass it up the chain return parent.ProcessEvent(originalState, eventToProcess); }
public EventPostedArgs(EventInstance eventPosted) { Event = eventPosted; }
public StateEventPostedArgs(State state, EventInstance eventPosted) : base(state) { Event = eventPosted; }
public override bool Matches(EventInstance eventToMatch) { return base.Matches(eventToMatch) && guard(); }
public TransitionEvent(State sourceState, Transition transition, EventInstance eventInstance) { this.sourceState = sourceState; this.transition = transition; this.eventInstance = eventInstance; }
public override void AddEvent(EventInstance eventToAdd) { base.AddEvent(eventToAdd); eventsQueued.Set(); }
public virtual bool Matches(EventInstance eventToMatch) { return eventToMatch.MatchesTransition(this); }
public virtual void AddEvent(EventInstance eventToAdd) { events.Enqueue(eventToAdd); }