34 lines
1.1 KiB
C#
34 lines
1.1 KiB
C#
namespace BotPages.Core
|
|
{
|
|
|
|
/// <summary>
|
|
/// Конвейер выполнения middleware и роутера.
|
|
/// </summary>
|
|
public sealed class Pipeline
|
|
{
|
|
private readonly IReadOnlyList<IUpdateMiddleware> _middlewares;
|
|
private readonly IRouter _router;
|
|
|
|
/// <summary>
|
|
/// Создаёт конвейер обработки обновлений.
|
|
/// </summary>
|
|
public Pipeline(IEnumerable<IUpdateMiddleware> middlewares, IRouter router)
|
|
{
|
|
_middlewares = middlewares.ToList();
|
|
_router = router;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Запускает выполнение конвейера для заданного контекста.
|
|
/// </summary>
|
|
public Task ExecuteAsync(UpdateContext ctx, CancellationToken ct)
|
|
{
|
|
var index = 0;
|
|
Task Next() => (index < _middlewares.Count)
|
|
? _middlewares[index++].InvokeAsync(ctx, Next, ct)
|
|
: _router.RouteAsync(ctx, ct);
|
|
|
|
return Next();
|
|
}
|
|
}
|
|
} |