コード例 #1
0
ファイル: WorkflowEngine.cs プロジェクト: kdcllc/Bet.Autoflow
        /// <summary>
        /// On workflow transition.
        /// </summary>
        /// <param name="transition"></param>
        protected virtual void OnTransitionAction(StateMachine <WorkflowState <T, TContext>, WorkflowTrigger <T> > .Transition transition)
        {
            // Find the states
            var sourceState      = transition.Source;
            var destinationState = transition.Destination;

            if (sourceState == null)
            {
                throw new InvalidOperationException(string.Format("Unable to find the source state {0} in the list of available states.", transition.Source));
            }

            if (destinationState == null)
            {
                throw new InvalidOperationException(string.Format("Unable to find the destination state {0} in the list of available states.", transition.Destination));
            }

            // Find the trigger
            var trigger = transition.Trigger;

            if (trigger == null)
            {
                throw new InvalidOperationException(string.Format("Unable to find the trigger {0} in the list of available triggers.", transition.Trigger));
            }

            var returnTransition = new WorkflowTransition <T, TContext>(sourceState, destinationState, trigger, transition.IsReentry);

            _onTransitionedEvent.Invoke(returnTransition);

            //Raise the event to the consumer
            OnStateTransition?.Invoke(sourceState, destinationState, trigger, transition.IsReentry);
        }
コード例 #2
0
        public async Task InvokeAsync(WorkflowTransition <T, TContext> transition)
        {
            _onTransitioned?.Invoke(transition);

            foreach (var callback in _onTransitionedAsync)
            {
                await callback(transition);
            }
        }
コード例 #3
0
        public void Invoke(WorkflowTransition <T, TContext> transition)
        {
            if (_onTransitionedAsync.Count != 0)
            {
                throw new InvalidOperationException(
                          "Cannot execute asynchronous action specified as OnTransitioned callback. " +
                          "Use asynchronous version of Fire [FireAsync]");
            }

            _onTransitioned?.Invoke(transition);
        }
コード例 #4
0
 /// <summary>
 ///  Executes workflow combined actions
 /// </summary>
 /// <param name="workflow"></param>
 /// <param name="transition"></param>
 public void Execute(IWorkflow <T, TContext> workflow, WorkflowTransition <T, TContext> transition)
 {
     foreach (var action in actions)
     {
         try
         {
             action.Execute(workflow, transition);
         }
         catch (Exception ex)
         {
             throw new WorkflowActionException($"Unable to execute action {action.GetType()}", ex);
         }
     }
 }
コード例 #5
0
ファイル: WorkflowEngine.cs プロジェクト: kdcllc/Bet.Autoflow
        /// <summary>
        /// Execute IActions based on the workflow definition
        /// </summary>
        /// <param name="transition"></param>
        /// <param name="entryAction"></param>
        private void ExecuteAction(StateMachine <WorkflowState <T, TContext>,
                                                 WorkflowTrigger <T> > .Transition transition,
                                   IAction <T, TContext> entryAction)
        {
            if (entryAction == null)
            {
                return;
            }

            WorkflowTransition <T, TContext> wt = null;

            if (transition != null)
            {
                wt = new WorkflowTransition <T, TContext>(transition.Source,
                                                          transition.Destination,
                                                          transition.Trigger,
                                                          transition.IsReentry);
            }
            entryAction.Execute(this, wt);
        }
コード例 #6
0
 /// <summary>
 /// Not implemented yet
 /// </summary>
 /// <param name="workflow"></param>
 /// <param name="transition"></param>
 public async Task ExecuteAsync(IWorkflow <T, TContext> workflow, WorkflowTransition <T, TContext> transition)
 {
     //TODO: implement async
     throw new NotImplementedException();
 }