public StateChangedEventArgs(TStateCode oldState, TStateCode newState, ulong stateChangeCount, DateTime?ts = null)
 {
     TimeStamp        = ts ?? TimeStampSource.Now;
     OldState         = oldState;
     NewState         = newState;
     StateChangeCount = stateChangeCount;
     _stringRep       = new LocklessLazyWriteOnce <string>(() =>
                                                           $"At [{TimeStamp:O}], the state (change# {StateChangeCount}) changed from [{OldState.ToString()}] to [{NewState.ToString()}].");
 }
 private TransitionPredicateTrueEventArgs(TStateCode origin, int priority, [NotNull] string name, [NotNull] string predText,
                                          ImmutableArray <TStateCode> destinations)
 {
     _timeStamp         = TimeStampSource.Now;
     _priority          = priority;
     _originState       = origin;
     _predicateText     = predText ?? throw new ArgumentNullException(nameof(predText));
     _destinationStates = destinations;
     _transitionName    = name ?? throw new ArgumentNullException(nameof(predText));
     _stringRep         = new LocklessLazyWriteOnce <string>(GetStringRep);
 }
示例#3
0
 protected StateMachineStateBase(TStateCode code, [NotNull] TFlagVault flagVault,
                                 [NotNull] IEventRaiser raiser)
 {
     if (!code.IsValueDefined())
     {
         throw new ArgumentException($"The enum value [{code}] is not defined.", nameof(code));
     }
     if (raiser == null)
     {
         throw new ArgumentNullException(nameof(raiser));
     }
     if (!raiser.ThreadActive || raiser.IsDisposed)
     {
         throw new ArgumentException("The event raiser is disposed or faulted.", nameof(raiser));
     }
     _raiser          = raiser;
     _transitionTable = new LocklessLazyWriteOnce <ImmutableSortedSet <TStateTransition> >(InitTransitionTable);
     FlagVault        = flagVault ?? throw new ArgumentNullException(nameof(flagVault));
     _concreteType    = new LocklessConcreteType(this);
     StateCode        = code;
 }
示例#4
0
 TTaskResult, TStateType, TStateCodeBacker, TStateTransition, TFlagVault> PerformGetNextState(TStateCode code);