elsa-core/src/activities/Elsa.Activities.Console/Activities/ReadLine.cs

54 lines
1.6 KiB
C#
Raw Normal View History

using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Elsa.Results;
using Elsa.Services;
using Elsa.Services.Models;
namespace Elsa.Activities.Console.Activities
{
/// <summary>
/// Reads input from the console.
/// </summary>
public class ReadLine : Activity
{
private readonly TextReader input;
public ReadLine() : this(System.Console.In)
{
}
public ReadLine(TextReader input)
{
this.input = input;
}
2019-07-22 16:55:02 +00:00
public string VariableName
{
get => GetState<string>();
set => SetState(value);
}
protected override async Task<ActivityExecutionResult> OnExecuteAsync(WorkflowExecutionContext context, CancellationToken cancellationToken)
{
if (input == null)
return Halt();
var receivedInput = await input.ReadLineAsync();
return Execute(context, receivedInput);
}
protected override ActivityExecutionResult OnResume(WorkflowExecutionContext context)
{
2019-07-22 16:55:02 +00:00
var receivedInput = (string)context.Workflow.Input[VariableName];
return Execute(context, receivedInput);
}
private ActivityExecutionResult Execute(WorkflowExecutionContext workflowContext, string receivedInput)
{
2019-07-22 16:55:02 +00:00
workflowContext.CurrentScope.SetVariable(VariableName, receivedInput);
workflowContext.SetLastResult(receivedInput);
return Outcome(OutcomeNames.Done);
}
}
}