MiddlewareBase
Базовый класс для работы с middlewares.
using Telegram.Bot;
using Telegram.Bot.Types;
namespace PRTelegramBot.Core.Middlewares
{
/// <summary>
/// Базовый промежуточный обработчик.
/// </summary>
public class MiddlewareBase
{
#region Поля и свойства
/// <summary>
/// Следующий обработчик.
/// </summary>
protected MiddlewareBase nextMiddleware;
/// <summary>
/// Следующий обработчик.
/// </summary>
protected MiddlewareBase previousMiddleware;
#endregion
#region Методы
/// <summary>
/// Выполнить следующий асинхронный промежуточный обработчик.
/// </summary>
/// <param name="update">Update.</param>
/// <param name="next">Функция которая должна выполниться после обработчиков.</param>
public virtual async Task InvokeOnPreUpdateAsync(ITelegramBotClient botClient, Update update, Func<Task> next)
{
if (nextMiddleware != null)
{
await nextMiddleware.InvokeOnPreUpdateAsync(botClient, update, next);
}
else
{
await next();
await InvokeOnPostUpdatesAsync(botClient, update);
}
}
/// <summary>
/// Выполнить предыдущий асинхронный промежуточный обработчик.
/// </summary>
/// <param name="update">Update.</param>
public virtual async Task InvokeOnPostUpdatesAsync(ITelegramBotClient botClient, Update update)
{
if (previousMiddleware != null)
await previousMiddleware.InvokeOnPostUpdatesAsync(botClient, update);
}
/// <summary>
/// Установить следующий обработчик.
/// </summary>
/// <param name="next">Следующий обработчик.</param>
public void SetNext(MiddlewareBase next)
{
this.nextMiddleware = next;
}
/// <summary>
/// Установить следующий обработчик.
/// </summary>
/// <param name="next">Следующий обработчик.</param>
/// <param name="previous">Предыдущий обработчик.</param>
public void SetNext(MiddlewareBase next, MiddlewareBase previous)
{
this.nextMiddleware = next;
this.previousMiddleware = previous;
}
/// <summary>
/// Установить предыдущий обработчик.
/// </summary>
/// <param name="previous">Предыдущий обработчик.</param>
public void SetPrevious(MiddlewareBase previous)
{
this.previousMiddleware = previous;
}
#endregion
}
}
Last updated