using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Services;
using Elsa.Services.Models;
// ReSharper disable once CheckNamespace
namespace Elsa.Activities.Console
{
///
/// 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)
{
_input = input;
}
protected override async ValueTask 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 = (string)context.Input;
return Execute(receivedInput);
}
private IActivityExecutionResult Execute(string receivedInput) => Done((object)receivedInput);
}
}