示例#1
0
        internal void Subscribe(ActivityExecutionContext context, StateActivity state, IEventActivity eventActivity)
        {
            eventActivity.Subscribe(context, this);
            Activity activity = (Activity)eventActivity;

            this._queueName         = eventActivity.QueueName;
            this._eventActivityName = activity.QualifiedName;
            this._stateName         = state.QualifiedName;
            base.SubscriptionId     = Guid.NewGuid();
            EventDrivenActivity parentEventDriven = StateMachineHelpers.GetParentEventDriven(eventActivity);

            this._eventDrivenName = parentEventDriven.QualifiedName;
        }
        private ReadOnlyCollection <string> GetPossibleStateTransitions()
        {
            List <string> targetStates = new List <string>();
            ReadOnlyCollection <WorkflowQueueInfo> workflowQueuedInfos  = this.WorkflowInstance.GetWorkflowQueueData();
            StateMachineWorkflowActivity           stateMachineWorkflow = this.StateMachineWorkflow;

            foreach (WorkflowQueueInfo queueInfo in workflowQueuedInfos)
            {
                foreach (string subscribedActivityName in queueInfo.SubscribedActivityNames)
                {
                    Activity       subscribedActivity = StateMachineHelpers.FindActivityByName(stateMachineWorkflow, subscribedActivityName);
                    IEventActivity eventActivity      = subscribedActivity as IEventActivity;
                    if (eventActivity == null)
                    {
                        continue;
                    }

                    EventDrivenActivity eventDriven = StateMachineHelpers.GetParentEventDriven(eventActivity);
                    Debug.Assert(eventDriven != null);
                    Queue <Activity> activities = new Queue <Activity>();
                    activities.Enqueue(eventDriven);
                    while (activities.Count > 0)
                    {
                        Activity         activity = activities.Dequeue();
                        SetStateActivity setState = activity as SetStateActivity;
                        if (setState != null)
                        {
                            targetStates.Add(setState.TargetStateName);
                        }
                        else
                        {
                            CompositeActivity compositeActivity = activity as CompositeActivity;
                            if (compositeActivity != null)
                            {
                                foreach (Activity childActivity in compositeActivity.EnabledActivities)
                                {
                                    activities.Enqueue(childActivity);
                                }
                            }
                        }
                    }
                }
            }
            return(targetStates.AsReadOnly());
        }
示例#3
0
        private ReadOnlyCollection <string> GetPossibleStateTransitions()
        {
            List <string> list = new List <string>();
            ReadOnlyCollection <WorkflowQueueInfo> workflowQueueData    = this.WorkflowInstance.GetWorkflowQueueData();
            StateMachineWorkflowActivity           stateMachineWorkflow = this.StateMachineWorkflow;

            foreach (WorkflowQueueInfo info in workflowQueueData)
            {
                foreach (string str in info.SubscribedActivityNames)
                {
                    IEventActivity eventActivity = StateMachineHelpers.FindActivityByName(stateMachineWorkflow, str) as IEventActivity;
                    if (eventActivity != null)
                    {
                        EventDrivenActivity parentEventDriven = StateMachineHelpers.GetParentEventDriven(eventActivity);
                        Queue <Activity>    queue             = new Queue <Activity>();
                        queue.Enqueue(parentEventDriven);
                        while (queue.Count > 0)
                        {
                            Activity         activity5 = queue.Dequeue();
                            SetStateActivity activity6 = activity5 as SetStateActivity;
                            if (activity6 != null)
                            {
                                list.Add(activity6.TargetStateName);
                            }
                            else
                            {
                                CompositeActivity activity7 = activity5 as CompositeActivity;
                                if (activity7 != null)
                                {
                                    foreach (Activity activity8 in activity7.EnabledActivities)
                                    {
                                        queue.Enqueue(activity8);
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                }
            }
            return(list.AsReadOnly());
        }