/// <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); }
/// <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); }