public static StateMachineStateType GetStateType(this LaundryMachineStateCode code) { switch (code) { case LaundryMachineStateCode.PoweredDown: return(StateMachineStateType.Terminal); case LaundryMachineStateCode.Empty: return(StateMachineStateType.WaitForMoreInputOnly); case LaundryMachineStateCode.Full: return(StateMachineStateType.WaitForMoreInputOnly); case LaundryMachineStateCode.Activating: return(StateMachineStateType.WaitForTaskComplete); case LaundryMachineStateCode.Washing: return(StateMachineStateType.WaitForTaskComplete); case LaundryMachineStateCode.Drying: return(StateMachineStateType.WaitForTaskComplete); default: case LaundryMachineStateCode.Error: return(StateMachineStateType.Error); } }
StateMachineStateType, int, LaundryMachineStateTransition, LaundryVault> PerformGetNextState( LaundryMachineStateCode code) { switch (code) { case LaundryMachineStateCode.PoweredDown: return(new PoweredDownState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Empty: return(new EmptyState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Washing: return(new WashState(EventRaiser, _stateCodeVault, FlagVault, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Drying: return(new DryState(EventRaiser, _stateCodeVault, FlagVault, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); default: case LaundryMachineStateCode.Error: return(new ErrorState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); } }
protected InvariantsNotMetException(DateTime ts, LaundryMachineStateCode stateCode, [NotNull] string invariantDescription, [CanBeNull] Exception inner) : base(string.Empty, inner) { _message = new LocklessLazyWriteOnce <string>(CreateMessage); TimeStamp = ts; StateCode = stateCode; InvariantDescription = invariantDescription ?? throw new ArgumentNullException(nameof(invariantDescription)); }
StateMachineStateType, int, LaundryMachineStateTransition, LaundryVault> PerformGetNextState( LaundryMachineStateCode code) { if (code == LaundryMachineStateCode.Activating) { return(new ActivatingState(EventRaiser, _stateCodeVault, FlagVault, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); } if (code == LaundryMachineStateCode.PoweredDown) { return(new PoweredDownState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); } return(new ErrorState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); }
StateMachineStateType, int, LaundryMachineStateTransition, LaundryVault> PerformGetNextState( LaundryMachineStateCode code) { switch (code) { case LaundryMachineStateCode.PoweredDown: return(new PoweredDownState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Full: return(new FullState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Error: return(new ErrorState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); default: throw new ArgumentOutOfRangeException(nameof(code), code, null); } }
StateMachineStateType, int, LaundryMachineStateTransition, LaundryVault> PerformGetNextState( LaundryMachineStateCode code) { switch (code) { default: case LaundryMachineStateCode.Empty: return(new EmptyState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Error: return(new ErrorState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); case LaundryMachineStateCode.Full: return(new FullState(FlagVault, _stateCodeVault, EventRaiser, _context, TimeToAddOneUnitDampness, TimeToRemoveOneUnitDirt, TimeToRemoveOneUnitDampness)); } }
protected LaundryMachineTaskBasedStateBase(LaundryMachineStateCode code, CommandIds commandIds, [NotNull] IEventRaiser raiser, [NotNull] BasicVault <LaundryMachineStateCode> stateVault, [NotNull] LaundryVault vault, [NotNull] ILaundryMachineTaskExecutionContext <TaskResult> executionContext, ImmutableArray <LaundryMachineStateCode> nextStatesOnCompletion, TimeSpan addOneUnitDamp, TimeSpan removeOneUnitDirt, TimeSpan removeOneUnitDamp) : base( StateMachineStateType.WaitForTaskComplete, code, vault, stateVault, raiser, executionContext, addOneUnitDamp, removeOneUnitDirt, removeOneUnitDamp) { if (stateVault == null) { throw new ArgumentNullException(nameof(stateVault)); } if (nextStatesOnCompletion.IsDefault || nextStatesOnCompletion.IsEmpty || nextStatesOnCompletion.Contains(code)) { throw new ArgumentException( $@"Parameter must not be default, empty or contain the value passed by the {nameof(code)} parameter.", nameof(nextStatesOnCompletion)); } if (executionContext == null) { throw new ArgumentNullException(nameof(executionContext)); } if (!executionContext.IsActive || executionContext.IsDisposed) { throw new ArgumentException(@"The execution context is not in a useable state.", nameof(executionContext)); } if (code.GetStateTaskType() == TaskType.NullTask) { throw new ArgumentException("This state must be a task-based state."); } CommandId = commandIds; _taskEndedTransProcedure = new LocklessLazyWriteOnce <LTransProcedure>(InitTaskEndedTransProcedure); _taskEndedAdditionalTransProcedure = new LocklessLazyWriteOnce <LTransAdditionalProcedure>(InitTaskEndedAdditionalTransProc); _taskEndedTransition = new LocklessLazyWriteOnce <LaundryMachineStateTransition>(() => InitTaskEndedTransition(nextStatesOnCompletion)); _cancellationTransition = new LocklessLazyWriteOnce <LaundryMachineStateTransition>(() => InitCancellationTransition(code, commandIds)); }
public static TaskType GetStateTaskType(this LaundryMachineStateCode code) { TaskType ret; switch (code) { case LaundryMachineStateCode.PoweredDown: ret = TaskType.NullTask; break; case LaundryMachineStateCode.Empty: ret = TaskType.NullTask; break; case LaundryMachineStateCode.Full: ret = TaskType.NullTask; break; case LaundryMachineStateCode.Activating: ret = TaskType.ActivateTask; break; case LaundryMachineStateCode.Washing: ret = TaskType.WashTask; break; case LaundryMachineStateCode.Drying: ret = TaskType.DryTask; break; default: case LaundryMachineStateCode.Error: ret = TaskType.NullTask; break; } return(ret); }
public EntryInvariantsNotMetException(LaundryMachineStateCode stateCode, [NotNull] string invariantDescription) : this(stateCode, invariantDescription, TimeStampSource.Now, null) { }
public EntryInvariantsNotMetException(LaundryMachineStateCode stateCode, [NotNull] string invariantDescription, DateTime timestamp, [CanBeNull] Exception inner) : base(timestamp, stateCode, invariantDescription, inner) { }
public static LaundryMachineStateCode ValueOrErrorIfNDef(this LaundryMachineStateCode code) => code.IsStateDefined() ? code : LaundryMachineStateCode.Error;
public static LaundryMachineStateCode ValueOrThrowIfNDef(this LaundryMachineStateCode code) => code.IsStateDefined() ? code : throw new InvalidEnumArgumentException(nameof(code), (int)code, typeof(LaundryMachineStateCode));
public static bool IsInputOnlyStateCode(this LaundryMachineStateCode code) => TheWaitInputOnlyTaskCodes.Contains(code);
public static bool IsTaskBasedStateCode(this LaundryMachineStateCode code) => TheTaskBasedStateCodes.Contains(code);
public static bool IsUndefinedOrErrorStateCode(this LaundryMachineStateCode code) => code.ValueOrErrorIfNDef() == LaundryMachineStateCode.Error;
public ExitInvariantsNotMetException(LaundryMachineStateCode stateCode, [NotNull] string invariantDescription, Exception inner) : this(stateCode, invariantDescription, TimeStampSource.Now, inner) { }
public static bool IsStateDefined(this LaundryMachineStateCode state) => TheDefinedStateCodes.Contains(state);
protected override StateMachineStateBase <LaundryStatusFlags, LaundryMachineStateCode, TaskResultCode, TaskResult, StateMachineStateType, int, LaundryMachineStateTransition, LaundryVault> PerformGetNextState(LaundryMachineStateCode code) => throw new NotImplementedException();