using System.IO; using System.Threading; using System.Threading.Tasks; using Elsa.Attributes; using Elsa.Services; using Elsa.Services.Models; namespace Elsa.Activities.Console.Activities { /// /// Reads input from the console. /// [ActivityDefinition( Category = "Console", Description = "Read text from standard in.", Icon = "fas fa-terminal", RuntimeDescription = "a => !!a.state.variableName ? `Read text from standard in and store into ${ a.state.variableName }.` : 'Read text from standard in.'", Outcomes = new[] { OutcomeNames.Done } )] public class ReadLine : Activity { private readonly TextReader input; public ReadLine() { } public ReadLine(TextReader input) { this.input = input; } protected override async Task OnExecuteAsync(ActivityExecutionContext context, CancellationToken cancellationToken) { if (input == null) return Suspend(); var receivedInput = await input.ReadLineAsync(); return Execute(receivedInput); } protected override IActivityExecutionResult OnResume(ActivityExecutionContext context) { var receivedInput = context.Input?.GetValue(); return Execute(receivedInput); } private IActivityExecutionResult Execute(string receivedInput) { return Done(receivedInput); } } }