Exemplo n.º 1
0
        private static void CleanUp(ActivityExecutionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            StateActivity state = (StateActivity)context.Activity;

            if (state.ExecutionStatus == ActivityExecutionStatus.Faulting)
            {
                return; // if we're faulting, then we're already in a bad state, so we don't try to unsubscribe
            }
            StateMachineExecutionState      executionState      = GetExecutionState(state);
            StateMachineSubscriptionManager subscriptionManager = executionState.SubscriptionManager;

            subscriptionManager.UnsubscribeState(context);

            if (StateMachineHelpers.IsRootState(state))
            {
                subscriptionManager.DeleteSetStateEventQueue(context);
            }
            else if (StateMachineHelpers.IsLeafState(state))
            {
                subscriptionManager.UnsubscribeToSetStateEvent(context);
            }
        }
Exemplo n.º 2
0
 protected override void OnActivityChangeAdd(ActivityExecutionContext executionContext, Activity addedActivity)
 {
     if (executionContext == null)
     {
         throw new ArgumentNullException("executionContext");
     }
     if (addedActivity == null)
     {
         throw new ArgumentNullException("addedActivity");
     }
     if (addedActivity.Enabled && (executionContext.Activity.ExecutionStatus == ActivityExecutionStatus.Executing))
     {
         EventDrivenActivity eventDriven = addedActivity as EventDrivenActivity;
         if (eventDriven != null)
         {
             StateMachineSubscriptionManager.ChangeEventDrivenQueueState(executionContext, eventDriven, false);
             StateMachineExecutionState state = StateMachineExecutionState.Get(StateMachineHelpers.GetRootState(executionContext.Activity as StateActivity));
             if (StateMachineHelpers.GetCurrentState(executionContext) != null)
             {
                 state.SubscriptionManager.ReevaluateSubscriptions(executionContext);
                 state.LockQueue();
                 state.ProcessActions(executionContext);
             }
         }
     }
 }
Exemplo n.º 3
0
        protected override void Initialize(IServiceProvider provider)
        {
            base.Initialize(provider);

            ActivityExecutionContext context = (ActivityExecutionContext)provider;

            StateActivity rootState = StateMachineHelpers.GetRootState(this);

            if (!StateMachineHelpers.IsStateMachine(rootState))
            {
                throw new InvalidOperationException(SR.GetError_StateActivityMustBeContainedInAStateMachine());
            }

            string initialStateName = StateMachineHelpers.GetInitialStateName(this);

            if (String.IsNullOrEmpty(initialStateName))
            {
                throw new InvalidOperationException(SR.GetError_CannotExecuteStateMachineWithoutInitialState());
            }

            //


            if (this.QualifiedName != initialStateName)
            {
                StateMachineSubscriptionManager.DisableStateWorkflowQueues(context, this);
            }
        }
        internal override void Execute(ActivityExecutionContext context)
        {
            base.Execute(context);
            StateActivity         rootState = StateMachineHelpers.GetRootState(base.State);
            Queue <StateActivity> queue     = new Queue <StateActivity>();

            queue.Enqueue(rootState);
            while (queue.Count > 0)
            {
                foreach (Activity activity3 in queue.Dequeue().EnabledActivities)
                {
                    EventDrivenActivity eventDriven = activity3 as EventDrivenActivity;
                    if (eventDriven != null)
                    {
                        IComparable queueName = StateMachineHelpers.GetEventActivity(eventDriven).QueueName;
                        if (queueName != null)
                        {
                            WorkflowQueue workflowQueue = StateMachineSubscriptionManager.GetWorkflowQueue(context, queueName);
                            if (workflowQueue != null)
                            {
                                workflowQueue.Enabled = base.SubscriptionManager.Subscriptions.ContainsKey(queueName);
                            }
                        }
                    }
                    else
                    {
                        StateActivity item = activity3 as StateActivity;
                        if (item != null)
                        {
                            queue.Enqueue(item);
                        }
                    }
                }
            }
        }
 internal virtual void Execute(ActivityExecutionContext context)
 {
     if (context == null)
         throw new ArgumentNullException("context");
     Debug.Assert(context.Activity.QualifiedName.Equals(this.StateName));
     _state = (StateActivity)context.Activity;
     _currentState = StateMachineHelpers.GetCurrentState(context);
     StateActivity rootState = StateMachineHelpers.GetRootState(_state);
     _executionState = StateMachineExecutionState.Get(rootState);
     _subscriptionManager = _executionState.SubscriptionManager;
 }
 internal virtual void Execute(ActivityExecutionContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     this._state = (StateActivity) context.Activity;
     this._currentState = StateMachineHelpers.GetCurrentState(context);
     StateActivity rootState = StateMachineHelpers.GetRootState(this._state);
     this._executionState = StateMachineExecutionState.Get(rootState);
     this._subscriptionManager = this._executionState.SubscriptionManager;
 }
Exemplo n.º 7
0
        internal virtual void Execute(ActivityExecutionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            this._state        = (StateActivity)context.Activity;
            this._currentState = StateMachineHelpers.GetCurrentState(context);
            StateActivity rootState = StateMachineHelpers.GetRootState(this._state);

            this._executionState      = StateMachineExecutionState.Get(rootState);
            this._subscriptionManager = this._executionState.SubscriptionManager;
        }
Exemplo n.º 8
0
        internal virtual void Execute(ActivityExecutionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            Debug.Assert(context.Activity.QualifiedName.Equals(this.StateName));
            _state        = (StateActivity)context.Activity;
            _currentState = StateMachineHelpers.GetCurrentState(context);
            StateActivity rootState = StateMachineHelpers.GetRootState(_state);

            _executionState      = StateMachineExecutionState.Get(rootState);
            _subscriptionManager = _executionState.SubscriptionManager;
        }
Exemplo n.º 9
0
        protected override void OnActivityChangeAdd(ActivityExecutionContext executionContext, Activity addedActivity)
        {
            if (executionContext == null)
            {
                throw new ArgumentNullException("executionContext");
            }
            if (addedActivity == null)
            {
                throw new ArgumentNullException("addedActivity");
            }

            if (!addedActivity.Enabled)
            {
                return;
            }

            if (executionContext.Activity.ExecutionStatus != ActivityExecutionStatus.Executing)
            {
                return; // activity is not executing
            }
            EventDrivenActivity eventDriven = addedActivity as EventDrivenActivity;

            if (eventDriven == null)
            {
                return;
            }

            // Activity we added is an EventDrivenActivity

            // First we disable the queue
            StateMachineSubscriptionManager.ChangeEventDrivenQueueState(executionContext, eventDriven, false);
            StateActivity rootState = StateMachineHelpers.GetRootState(executionContext.Activity as StateActivity);
            StateMachineExecutionState executionState = StateMachineExecutionState.Get(rootState);
            StateActivity currentState = StateMachineHelpers.GetCurrentState(executionContext);

            if (currentState == null)
            {
                return; // Dynamic update happened before we entered the initial state
            }
            StateMachineSubscriptionManager subscriptionManager = executionState.SubscriptionManager;

            subscriptionManager.ReevaluateSubscriptions(executionContext);
            executionState.LockQueue();
            executionState.ProcessActions(executionContext);
        }
Exemplo n.º 10
0
        private static void CleanUp(ActivityExecutionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            StateActivity state = (StateActivity)context.Activity;

            if (state.ExecutionStatus != ActivityExecutionStatus.Faulting)
            {
                StateMachineSubscriptionManager subscriptionManager = GetExecutionState(state).SubscriptionManager;
                subscriptionManager.UnsubscribeState(context);
                if (StateMachineHelpers.IsRootState(state))
                {
                    subscriptionManager.DeleteSetStateEventQueue(context);
                }
                else if (StateMachineHelpers.IsLeafState(state))
                {
                    subscriptionManager.UnsubscribeToSetStateEvent(context);
                }
            }
        }
Exemplo n.º 11
0
        internal override void Execute(ActivityExecutionContext context)
        {
            base.Execute(context);

            StateActivity         state     = this.State;
            StateActivity         rootState = StateMachineHelpers.GetRootState(state);
            Queue <StateActivity> states    = new Queue <StateActivity>();

            states.Enqueue(rootState);
            while (states.Count > 0)
            {
                state = states.Dequeue();
                foreach (Activity activity in state.EnabledActivities)
                {
                    EventDrivenActivity eventDriven = activity as EventDrivenActivity;
                    if (eventDriven != null)
                    {
                        IEventActivity eventActivity = StateMachineHelpers.GetEventActivity(eventDriven);
                        IComparable    queueName     = eventActivity.QueueName;
                        if (queueName != null)
                        {
                            WorkflowQueue queue = StateMachineSubscriptionManager.GetWorkflowQueue(context, queueName);
                            if (queue != null)
                            {
                                queue.Enabled = this.SubscriptionManager.Subscriptions.ContainsKey(queueName);
                            }
                        }
                    }
                    else
                    {
                        StateActivity childState = activity as StateActivity;
                        if (childState != null)
                        {
                            states.Enqueue(childState);
                        }
                    }
                }
            }
        }
 internal StateMachineExecutionState(Guid instanceId)
 {
     _subscriptionManager = new StateMachineSubscriptionManager(this, instanceId);
 }
Exemplo n.º 13
0
 internal StateMachineExecutionState(Guid instanceId)
 {
     _subscriptionManager = new StateMachineSubscriptionManager(this, instanceId);
 }