From 333e09744b83dec73ad22a20116cadd3c742ac95 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 16 Oct 2018 12:41:12 +0200 Subject: [PATCH] Minor refactoring --- .../IWorkflowInvoker.cs | 4 ++-- .../Models/Variables.cs | 1 + src/Flowsharp.Core/WorkflowInvoker.cs | 7 ++++--- .../Programs/AdditionWorkflowProgram.cs | 3 ++- .../AdditionWorkflowProgramLongRunning.cs | 19 ++++++++++--------- .../Programs/FileBasedWorkflowProgram.cs | 6 +++--- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/Flowsharp.Abstractions/IWorkflowInvoker.cs b/src/Flowsharp.Abstractions/IWorkflowInvoker.cs index 739c4ffb2..6c0e99d0c 100644 --- a/src/Flowsharp.Abstractions/IWorkflowInvoker.cs +++ b/src/Flowsharp.Abstractions/IWorkflowInvoker.cs @@ -8,7 +8,7 @@ namespace Flowsharp public interface IWorkflowInvoker { IActivityInvoker ActivityInvoker { get; } - Task InvokeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default); - Task ResumeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default); + Task InvokeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default); + Task ResumeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default); } } diff --git a/src/Flowsharp.Abstractions/Models/Variables.cs b/src/Flowsharp.Abstractions/Models/Variables.cs index c7b065c8b..9d138de4e 100644 --- a/src/Flowsharp.Abstractions/Models/Variables.cs +++ b/src/Flowsharp.Abstractions/Models/Variables.cs @@ -5,5 +5,6 @@ namespace Flowsharp.Models { public class Variables : Dictionary { + public static readonly Variables Empty = new Variables(); } } \ No newline at end of file diff --git a/src/Flowsharp.Core/WorkflowInvoker.cs b/src/Flowsharp.Core/WorkflowInvoker.cs index fa8bf971b..ae54b391e 100644 --- a/src/Flowsharp.Core/WorkflowInvoker.cs +++ b/src/Flowsharp.Core/WorkflowInvoker.cs @@ -20,8 +20,9 @@ namespace Flowsharp private readonly ILogger logger; public IActivityInvoker ActivityInvoker { get; } - public async Task InvokeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default) + public async Task InvokeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default) { + workflow.Arguments = arguments ?? new Variables(); var workflowExecutionContext = new WorkflowExecutionContext(workflow); var isResuming = workflowExecutionContext.Workflow.Status == WorkflowStatus.Resuming; @@ -53,10 +54,10 @@ namespace Flowsharp return workflowExecutionContext; } - public Task ResumeAsync(Workflow workflow, IActivity startActivity = default, CancellationToken cancellationToken = default) + public Task ResumeAsync(Workflow workflow, IActivity startActivity = default, Variables arguments = default, CancellationToken cancellationToken = default) { workflow.Status = WorkflowStatus.Resuming; - return InvokeAsync(workflow, startActivity, cancellationToken); + return InvokeAsync(workflow, startActivity, arguments, cancellationToken); } private async Task ExecuteActivityAsync(WorkflowExecutionContext workflowContext, IActivity activity, bool isResuming, CancellationToken cancellationToken) diff --git a/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgram.cs b/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgram.cs index 2f0561ac1..4c273469e 100644 --- a/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgram.cs +++ b/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgram.cs @@ -1,5 +1,6 @@ using System.Threading; using System.Threading.Tasks; +using Flowsharp.Models; using Flowsharp.Samples.Console.Workflows; using Flowsharp.Serialization; @@ -19,7 +20,7 @@ namespace Flowsharp.Samples.Console.Programs public async Task RunAsync(CancellationToken cancellationToken) { var workflow = new AdditionWorkflow(); - var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, cancellationToken); + var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, Variables.Empty, cancellationToken); var json = serializer.Serialize(workflow); System.Console.WriteLine(json); diff --git a/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgramLongRunning.cs b/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgramLongRunning.cs index 5ed1af38c..57a9810e7 100644 --- a/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgramLongRunning.cs +++ b/src/Flowsharp.Samples.Console/Programs/AdditionWorkflowProgramLongRunning.cs @@ -2,6 +2,7 @@ using System.Threading; using System.Threading.Tasks; using Flowsharp.Models; +using Flowsharp.Samples.Console.Activities; using Flowsharp.Samples.Console.Workflows; using Flowsharp.Serialization; @@ -21,27 +22,27 @@ namespace Flowsharp.Samples.Console.Programs public async Task RunAsync(CancellationToken cancellationToken) { var workflow = new AdditionWorkflowLongRunning(); - var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, cancellationToken); + var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, Variables.Empty, cancellationToken); while (workflowContext.Workflow.Status == WorkflowStatus.Halted) { - workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, "x", cancellationToken); - workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, "y", cancellationToken); - workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, "tryAgain", cancellationToken); + workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, cancellationToken); + workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, cancellationToken); + workflowContext = await ReadAndResumeAsync(workflowContext.Workflow, cancellationToken); } var json = serializer.Serialize(workflowContext.Workflow); System.Console.WriteLine(json); } - private async Task ReadAndResumeAsync(Workflow workflow, string argumentName, CancellationToken cancellationToken) + private async Task ReadAndResumeAsync(Workflow workflow, CancellationToken cancellationToken) { var json = serializer.Serialize(workflow); workflow = serializer.Deserialize(json); - var haltedActivity = workflow.HaltedActivities.Single(); - workflow.Arguments[argumentName] = System.Console.ReadLine(); - workflow.Status = WorkflowStatus.Resuming; - return await workflowInvoker.InvokeAsync(workflow, haltedActivity, cancellationToken); + var haltedActivity = (ReadLine)workflow.HaltedActivities.Single(); + var args = new Variables {{ haltedActivity.ArgumentName, System.Console.ReadLine() }}; + + return await workflowInvoker.ResumeAsync(workflow, haltedActivity, args, cancellationToken); } } } \ No newline at end of file diff --git a/src/Flowsharp.Samples.Console/Programs/FileBasedWorkflowProgram.cs b/src/Flowsharp.Samples.Console/Programs/FileBasedWorkflowProgram.cs index c6b4a6258..b8e1abfc1 100644 --- a/src/Flowsharp.Samples.Console/Programs/FileBasedWorkflowProgram.cs +++ b/src/Flowsharp.Samples.Console/Programs/FileBasedWorkflowProgram.cs @@ -26,7 +26,7 @@ namespace Flowsharp.Samples.Console.Programs var resourceReader = new StreamReader(resource); var data = await resourceReader.ReadToEndAsync(); var workflow = serializer.Deserialize(data); - var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, cancellationToken); + var workflowContext = await workflowInvoker.InvokeAsync(workflow, null, Variables.Empty, cancellationToken); while (workflowContext.Workflow.Status == WorkflowStatus.Halted) { @@ -41,8 +41,8 @@ namespace Flowsharp.Samples.Console.Programs private async Task ReadAndResumeAsync(Workflow workflow, CancellationToken cancellationToken) { var haltedActivity = (ReadLine)workflow.HaltedActivities.Single(); - workflow.Arguments[haltedActivity.ArgumentName] = System.Console.ReadLine(); - return await workflowInvoker.ResumeAsync(workflow, haltedActivity, cancellationToken); + var args = new Variables {{ haltedActivity.ArgumentName, System.Console.ReadLine() }}; + return await workflowInvoker.ResumeAsync(workflow, haltedActivity, args, cancellationToken); } } } \ No newline at end of file