internal void NotProcess(SignalNotProcessedArgs args) { for (var i = 0; i < this.Count; i++) { this[i].NotProcess(args); } }
protected override void OnNotProcess(SignalNotProcessedArgs args) { }
public override void Emit() { 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 ? false : true; foreach (var signalCondition in this.EmitConditionsI) { if (signalCondition.IsValid) { emitConditionMet = true; } } if (!emitConditionMet) { var failedConditions = this.EmitConditionsI.ToList <ISignalCondition>(); var args = new SignalNotProcessedArgs(SignalFailure.EmitConditionsNotMet, failedConditions); 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 conditionMetCount = this.TransitionConditionsI.Count != 0 ? 0 : 1; foreach (var kv in this.TransitionConditionsI) { if (kv.Key.IsValid) { kv.Value.CanTransitionI = true; conditionMetCount++; } else { kv.Value.CanTransitionI = false; } } if (conditionMetCount == 0) { var failedConditions = this.TransitionConditionsI.Keys.ToList <ISignalCondition>(); var args = new SignalNotProcessedArgs(SignalFailure.TransitionConditionsNotMet, failedConditions); this.actions.NotProcess(args); return; } if (conditionMetCount > 1) { var failedConditions = this.TransitionConditionsI.Keys.ToList <ISignalCondition>(); var args = new SignalNotProcessedArgs(SignalFailure.TransitionAmbiguity, failedConditions); this.actions.NotProcess(args); return; } #endregion this.MachineI.ProcessSignal(this); }
internal void DoNotProcess() { var args = new SignalNotProcessedArgs(SignalFailure.NoTransitionToState); this.actions.NotProcess(args); }
protected override void OnNotProcess(SignalNotProcessedArgs args) { this.action(this, args); }