internal void NotProcess(SignalNotProcessedArgs args) { for (var i = 0; i < this.Count; i++) { this[i].NotProcess(args); } }
public override void Emit() { this.failedConditions.Clear(); this.actions.Emit(); #region Emit Conditions Check // check emit conditions, it is enough to pass if one of the conditions is met. // This allows to make OR logical comparisons between SignalEmitConditions. var emitConditionMet = this.EmitConditionsI.Count <= 0; if (!emitConditionMet) { foreach (var signalCondition in this.EmitConditionsI) { if (signalCondition.Validate(this)) { emitConditionMet = true; } else { this.failedConditions.Add(signalCondition); } } } if (!emitConditionMet) { var args = new SignalNotProcessedArgs(SignalFailure.EmitConditionsNotMet, this.failedConditions.ToArray()); this.actions.NotProcess(args); return; } #endregion #region Transition Conditions Check // check transition conditions, there must be only one valid transition. // If more than one, stop emitting the signal, otherwise this might cause undefined behaviour. var transitionConditionMetCount = this.TransitionConditionsI.Count != 0 ? 0 : 1; foreach (var kv in this.TransitionConditionsI) { if (kv.Key.Validate(this)) { kv.Value.CanTransitionI = true; transitionConditionMetCount++; } else { kv.Value.CanTransitionI = false; this.failedConditions.Add(kv.Key); } } if (transitionConditionMetCount == 0) { var args = new SignalNotProcessedArgs(SignalFailure.TransitionConditionsNotMet, this.failedConditions.ToArray()); this.actions.NotProcess(args); return; } if (transitionConditionMetCount > 1) { var args = new SignalNotProcessedArgs(SignalFailure.TransitionAmbiguity, this.failedConditions.ToArray()); this.actions.NotProcess(args); return; } #endregion this.MachineI.ProcessSignal(this); }
internal void DoNotProcess() { var args = new SignalNotProcessedArgs(SignalFailure.NoTransitionToState); this.actions.NotProcess(args); }
public override void NotProcess(SignalNotProcessedArgs args) { this.action(this, args); }