Ejemplo n.º 1
0
        public async Task <IRequestHandlerResult> HandleRequestAsync()
        {
            // TODO: Optimize this by building up a hash of routes and workflows to execute.
            var requestPath   = new Uri(httpContext.Request.Path.ToString(), UriKind.Relative);
            var method        = httpContext.Request.Method;
            var httpWorkflows = await registry.ListByStartActivityAsync(nameof(ReceiveHttpRequest), cancellationToken);

            var workflowsToStart    = Filter(httpWorkflows, requestPath, method).ToList();
            var haltedHttpWorkflows = await workflowInstanceStore.ListByBlockingActivityAsync <ReceiveHttpRequest>(
                cancellationToken : cancellationToken);

            var workflowsToResume = Filter(haltedHttpWorkflows, requestPath, method).ToList();

            if (!workflowsToStart.Any() && !workflowsToResume.Any())
            {
                return(new NextResult());
            }

            await InvokeWorkflowsToStartAsync(workflowsToStart);
            await InvokeWorkflowsToResumeAsync(workflowsToResume);

            return(!httpContext.Items.ContainsKey(WorkflowHttpResult.Instance)
                ? (IRequestHandlerResult) new AcceptedResult()
                : new EmptyResult());
        }
Ejemplo n.º 2
0
        private async Task <IEnumerable <WorkflowExecutionContext> > ResumeManyAsync(
            string activityType,
            Variables input      = default,
            string correlationId = default,
            Func <JObject, bool> activityStatePredicate = default,
            CancellationToken cancellationToken         = default)
        {
            var workflowInstances = await workflowInstanceStore
                                    .ListByBlockingActivityAsync(activityType, correlationId, cancellationToken)
                                    .ToListAsync();

            if (activityStatePredicate != null)
            {
                workflowInstances = workflowInstances.Where(x => activityStatePredicate(x.Item2.State)).ToList();
            }

            return(await ResumeManyAsync(
                       workflowInstances,
                       input,
                       cancellationToken
                       ));
        }