예제 #1
0
 public ErrorState([NotNull] LaundryVault statusVault,
                   BasicVault <LaundryMachineStateCode> basicV,
                   IEventRaiser eventRaiser, [NotNull] ILaundryMachineTaskExecutionContext <TaskResult> context,
                   TimeSpan addOneUnitDamp, TimeSpan removeOneUnitDirt, TimeSpan removeOneUnitDamp) : base(
         StateMachineStateType.Error, LaundryMachineStateCode.Error, statusVault, basicV, eventRaiser, context,
         addOneUnitDamp, removeOneUnitDirt, removeOneUnitDamp) =>
     throw new NotImplementedException();
예제 #2
0
 public FullState([NotNull] LaundryVault vault,
                  [NotNull] BasicVault <LaundryMachineStateCode> stateCodeVault, [NotNull] IEventRaiser raiser,
                  [NotNull] ILaundryMachineTaskExecutionContext <TaskResult> executionContext, TimeSpan addOneUnitDamp,
                  TimeSpan removeOneUnitDirt, TimeSpan removeOneUnitDamp) : base(
         StateMachineStateType.WaitForMoreInputOnly, LaundryMachineStateCode.Full, vault, stateCodeVault, raiser,
         executionContext, addOneUnitDamp, removeOneUnitDirt, removeOneUnitDamp)
 {
 }
예제 #3
0
 internal PoweredDownState([NotNull] LaundryVault vault,
                           [NotNull] BasicVault <LaundryMachineStateCode> stateVault, [NotNull] IEventRaiser raiser,
                           [NotNull] ILaundryMachineTaskExecutionContext <TaskResult> context, TimeSpan addOneUnitDamp,
                           TimeSpan removeOneUnitDirt, TimeSpan removeOneUnitDamp) : base(
         StateMachineStateType.WaitForMoreInputOnly,
         LaundryMachineStateCode.PoweredDown, vault, stateVault, raiser, context, addOneUnitDamp, removeOneUnitDirt, removeOneUnitDamp)
 {
     if (!context.IsActive || context.IsDisposed || context.IsFaulted)
     {
         throw new ArgumentException("Context must not be in a disposed or a faulted state and must be active.");
     }
 }
예제 #4
0
        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));
        }
예제 #5
0
 protected internal ActivatingState([NotNull] IEventRaiser raiser,
                                    [NotNull] BasicVault <LaundryMachineStateCode> stateVault, [NotNull] LaundryVault vault,
                                    [NotNull] ILaundryMachineTaskExecutionContext <TaskResult> executionContext, TimeSpan addOneUnitDamp,
                                    TimeSpan removeOneUnitDirt, TimeSpan removeOneUnitDamp) : base(
         LaundryMachineStateCode.Activating, CommandIds.PowerUp, raiser, stateVault,
         vault, executionContext,
         ImmutableArray.Create(LaundryMachineStateCode.Empty, LaundryMachineStateCode.Full,
                               LaundryMachineStateCode.PoweredDown), addOneUnitDamp, removeOneUnitDirt, removeOneUnitDamp)
 {
 }
예제 #6
0
 protected internal ActivateTask([NotNull] ILaundryMachineTaskExecutionContext <TaskResult> executionContext,
                                 [NotNull] LaundryStatusVault statusFlagsVault, [NotNull] IEventRaiser eventRaiser) : base(executionContext,
                                                                                                                           statusFlagsVault, eventRaiser, TaskType.ActivateTask,
                                                                                                                           CommandIds.PowerUp)
 {
 }