Добавьте файлы проекта.
This commit is contained in:
34
BotPages.Core/Pipeline/Pipeline.cs
Normal file
34
BotPages.Core/Pipeline/Pipeline.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user