public virtual BaseState NextState(TransitionEventArgs eventArgs) { BaseState baseState = this; BaseTransition baseTransition = this.DefaultTransition; Tracer <BaseState> .WriteInformation(string.Format("Getting Next state of {0} ({1})", this.ToString(), this.MachineName), new object[0]); try { foreach (BaseTransition current in this.ConditionalTransitions) { if (current.ConditionsAreMet(this, eventArgs)) { baseTransition = current; Tracer <BaseState> .WriteInformation("Conditions are met for {0}", new object[] { current.ToString() }); break; } } } catch (Exception ex) { Tracer <BaseState> .WriteError(ex, "Checking transitions is failed: unexpected error", new object[0]); return(this.HandleTransitionException(baseState, ex)); } if (baseTransition != null) { if (baseTransition == this.DefaultTransition) { Tracer <BaseState> .WriteInformation("Selecting Default transition {0}", new object[] { baseTransition.Next.ToString() }); } Tracer <BaseState> .WriteInformation(string.Format("Next state of {0} is {1}", this.ToString(), baseTransition.Next), new object[0]); baseState = baseTransition.Next; } return(baseState); }
public void AddConditionalTransition(BaseTransition transition) { this.ConditionalTransitions.Add(transition); }