예제 #1
0
        /// <inheritdoc/>
        protected override IWorkflowActivityProcessor CreateProcessorFor(V1WorkflowActivity activity)
        {
            IWorkflowActivityProcessor processor         = base.CreateProcessorFor(activity);
            CancellationToken          cancellationToken = this.CancellationTokenSource.Token;

            switch (processor)
            {
            case ConsumeEventProcessor consumeEventProcessor:
                processor.OfType <V1WorkflowActivityCompletedIntegrationEvent>().SubscribeAsync
                (
                    async result => await this.OnEventResultAsync(consumeEventProcessor, result, cancellationToken),
                    async ex => await this.OnErrorAsync(ex, cancellationToken),
                    async() => await this.OnEventCompletedAsync(consumeEventProcessor, cancellationToken)
                );
                break;

            case ActionProcessor actionProcessor:
                processor.OfType <V1WorkflowActivityCompletedIntegrationEvent>().SubscribeAsync
                (
                    async result => await this.OnActionResultAsync(actionProcessor, result, cancellationToken),
                    async ex => await this.OnErrorAsync(ex, cancellationToken),
                    async() => await this.OnActionCompletedAsync(actionProcessor, cancellationToken)
                );
                break;

            default:
                throw new NotSupportedException($"The specified execution pointer type '{processor.GetType().Name}' is not supported in this context");
            }
            return(processor);
        }
예제 #2
0
        /// <summary>
        /// Creates a new child <see cref="IWorkflowActivityProcessor"/> for the specified <see cref="V1WorkflowActivity"/>
        /// </summary>
        /// <param name="activity">The <see cref="V1WorkflowActivity"/> to create a child <see cref="IWorkflowActivityProcessor"/> for</param>
        protected virtual IWorkflowActivityProcessor CreateActivityProcessor(V1WorkflowActivity activity)
        {
            if (activity == null)
            {
                throw new ArgumentNullException(nameof(activity));
            }
            IWorkflowActivityProcessor processor = this.ActivityProcessorFactory.Create(activity);

            switch (processor)
            {
            case IStateProcessor stateProcessor:
                processor.OfType <V1WorkflowActivityCompletedIntegrationEvent>().SubscribeAsync
                (
                    async e => await this.OnStateCompletedAsync(stateProcessor, e),
                    async ex => await this.OnActivityProcessingErrorAsync(stateProcessor, ex),
                    async() => await this.OnActivityProcessingCompletedAsync(stateProcessor)
                );
                break;

            case ITransitionProcessor transitionProcessor:
                processor.OfType <V1WorkflowActivityCompletedIntegrationEvent>().SubscribeAsync
                (
                    async e => await this.OnTransitionCompletedAsync(transitionProcessor, e),
                    async ex => await this.OnActivityProcessingErrorAsync(transitionProcessor, ex),
                    async() => await this.OnActivityProcessingCompletedAsync(transitionProcessor)
                );
                break;

            case IEndProcessor endProcessor:
                processor.OfType <V1WorkflowActivityCompletedIntegrationEvent>().SubscribeAsync
                (
                    async e => await this.OnEndCompletedAsync(endProcessor, e),
                    async ex => await this.OnActivityProcessingErrorAsync(endProcessor, ex),
                    async() => await this.OnCompletedAsync(endProcessor)
                );
                break;
            }
            this.Processors.Add(processor);
            return(processor);
        }