Beispiel #1
0
 /// <summary>
 /// Receives notification that a transition has occurred
 /// </summary>
 /// <param name="s0">The source state</param>
 /// <param name="s1">The target state</param>
 protected virtual void OnTransition(S s0, S s1)
 {
     TransitionCount++;
     if (Tracing.TraceTransitions())
     {
         Trace(FsmMessages.Transition(Id, s0, s1));
     }
 }
Beispiel #2
0
 /// <summary>
 /// Receives notification that a state machine has attained its endstate
 /// </summary>
 protected virtual void OnComplete(FsmStats stats, bool asPlanned)
 {
     CompletionCount++;
     if (Tracing.TraceCompletions())
     {
         Trace(FsmMessages.Completed(Id, stats, asPlanned));
         CompletionCount = 0;
     }
 }
Beispiel #3
0
        /// <summary>
        /// Receives notification that an event has ben submitted
        /// </summary>
        /// <param name="input">The input event</param>
        protected virtual void OnReceipt(E input)
        {
            ++ReceiptCount;

            if (ReceiptCounter == ReceiptEmitRate && Tracing.TraceEvents())
            {
                Trace(FsmMessages.Receipt(Id, input, ReceiptCount));
                ReceiptCounter = 0;
            }

            ReceiptCounter++;
        }
Beispiel #4
0
        /// <summary>
        /// Receives notification that an error has occurred
        /// </summary>
        /// <param name="e">The trapped exception</param>
        protected virtual void OnError(Exception e)
        {
            if (Tracing.TraceErrors())
            {
                switch (e)
                {
                case AppException ae:
                    Trace(ae.Message);
                    break;

                default:
                    Trace(FsmMessages.Error(Id, e));
                    break;
                }
            }
        }
Beispiel #5
0
        bool CanProcess()
        {
            if (Finished)
            {
                RaiseWarning(FsmMessages.ReceiptAfterFinish(Id));
                return(false);
            }

            if (!Started)
            {
                RaiseWarning(FsmMessages.ReceiptBeforeStart(Id));
                return(false);
            }

            if (ReceiptCount > ReceiptLimit)
            {
                RaiseError(ReceiptLimitExceeded.Define(Id, ReceiptLimit));
                return(false);
            }

            return(true);
        }