Files
Govor/Govor.ConsoleClient/Services/InputPipeline.cs
T
Artemy f524a9f0b7 Refactor console client to new Govor.ConsoleClient project
Removed Govor.Console implementation and introduced a new Govor.ConsoleClient project with a modular command-based architecture. Added dependency injection, command dispatcher, middleware pipeline, logging, and interactive command support. Updated solution and project files to reflect the new structure.
2025-07-19 19:08:21 +07:00

49 lines
1.4 KiB
C#

using Govor.ConsoleClient.Commands;
namespace Govor.ConsoleClient.Services;
public class InputPipeline
{
private readonly CommandDispatcher _dispatcher;
private readonly ILogger _logger;
private IInteractiveCommand? _activeCommand;
public InputPipeline(CommandDispatcher dispatcher, ILogger logger)
{
_dispatcher = dispatcher;
_logger = logger;
}
public async Task ProcessInputAsync(string input)
{
if (string.IsNullOrWhiteSpace(input)) return;
if (input.StartsWith("/"))
{
_activeCommand = null; // Сброс активной команды
var commandInput = input[1..];
var result = await _dispatcher.DispatchAsync(commandInput);
// Если команда поддерживает интерактивность, сохраняем как активную
if (result is IInteractiveCommand interactiveCommand && !interactiveCommand.IsCompleted)
{
_activeCommand = interactiveCommand;
}
}
else
{
if (_activeCommand != null)
{
await _activeCommand.HandleInputAsync(input);
if (_activeCommand.IsCompleted)
_activeCommand = null;
}
else
{
_logger.Info($"[Ввод пользователя]: {input}");
}
}
}
}