Задачам(Task - в терминах futures) требуется получать подтверждения(события) операций.
Источником событий является аппаратное прерывание, которое затем разбирается на события(одно прерывание может содержать несколько событий). Таким образом получается цепочка событий.
Хотелось бы организовать динамическую цепочку обработчиков:
обработчик_события_1(&событие) -> не_мое_событие -> обработчик_события_2(&событие) -> и т.д. -> обработчик_события_по_умолчанию(&событие).
если обработчик_события_N(&событие) == мое_событие, то нужно:
удалить обработчик из цепочки
событие следующему обработчику не направляется
уведомить соответствующую задачу (сделать pool)
Собственно вопрос:
Цепочку событий можно представить как futures::sync::mpsc::channel,
но как организовать динамическую цепочку обработчиков не совсем понятно.
Кто нибудь сталкивался с подобной задачей? Как ее решили?
А как именно предполагается проверять, чьё это событие?
Сколько я понимаю логику futures, один возможный подход - уведомить все, пусть они проверят, к ним ли это, и если нет - зарегистрируются и уснут обратно.
Динамически добавлять/удалять цепочки в общем случае не получится. Тут можно только фильтровать, сообщения. Вообще лучше показать пример кода что бы понятнее было, возможно есть другие варианты