Exemple #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());
        }
Exemple #2
0
        private async Task <IEnumerable <WorkflowExecutionContext> > StartManyAsync(
            string activityType,
            Variables input      = default,
            string correlationId = default,
            Func <JObject, bool> activityStatePredicate = default,
            CancellationToken cancellationToken         = default)
        {
            var workflowDefinitions = await workflowRegistry.ListByStartActivityAsync(activityType, cancellationToken);

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

            workflowDefinitions = await FilterRunningSingletonsAsync(
                workflowDefinitions,
                cancellationToken
                );

            return(await StartManyAsync(workflowDefinitions, input, correlationId, cancellationToken));
        }