public override void AddEvent(EventInstance eventToAdd)
		{
			base.AddEvent(eventToAdd);

			while (CanProcess)
				ProcessNextEvent(stateMachine.CurrentState);
		}
Esempio n. 2
0
		/// <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;
		}
Esempio n. 4
0
		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();
		}
Esempio n. 10
0
		public virtual bool Matches(EventInstance eventToMatch)
		{
			return eventToMatch.MatchesTransition(this);
		}
Esempio n. 11
0
		public virtual void AddEvent(EventInstance eventToAdd)
		{
			events.Enqueue(eventToAdd);
		}