Для того, чтобы добавить в версии 5.5.3 поддержку ограничений на временя жизни сообщений и зарегистрированную доставку, предполагается добавить несколько новых вариантов функции so_5::send. Ниже показаны примеры того, как может выглядеть использование этих вариантов. Прошу высказываться на тему того, нравится или не нравится, может есть какие-то другие идеи.
В качестве небольшого примечания: новый синтаксис позволяет так же выразить и обращение к синхронным сервисам.
Итак, предположим, что агенту с mbox-ом handler отсылается сообщение request (объект хранится внутри std::unique_ptr<request>), агент-обработчик обрабатывает request посредством event-handler-а, возвращающего объект reply.
usingnamespacestd::chrono;usingnamespaceso_5;// Простая отсылка асинхронного сообщения.send(handler,std::move(request));// Отсылка сообщения с ограничением времени доставки.// Если сообщение не было доставлено, оно просто выбрасывается.send(handler,message_lifetime(10ms),std::move(request));// Отсылка сообщения с ограничением времени доставки.// Если сообщение не было доставлено, то вызывается указанный обработчик.// Обработчик может делать что захочет, например, отсылать кому-то// какое-нибудь уведомление.send(handler,message_lifetime(10ms).on_deadline(action),std::move(request));// Отсылка сообщения с ограничением времени доставки и заказом очета о доставке.// Отчет будет присылаться текущему агенту на его direct-mbox.send(handler,message_lifetime(10ms)®istered_delivery(*this),std::move(request));// Отсылка сообщения с заказом отчета о доставке.// Никаких ограничений на время его жизни.send(handler,registered_delivery(*this),std::move(request));// Отсылка сообщения с получением результата в виде std::future.// Т.е. обращение к синхронному сервису.// Тип f будет std::future<reply>.autof=send(handler,result_by_future<reply>(),std::move(request));// Отсылка сообщения с получением результате в виде std::future и// ограничением на время жизни.autof2=send(handler,message_lifetime(10ms)&result_by_future<reply>(),std::move(request));// Отсылка сообщения с ожиданием получения результата// (т.е. обращение к синхронном сервису с ожиданием внутри send-а).// Тип f будет reply.autor=send(handler,wait_result<reply>(10ms),std::move(request));// Отсылка сообщения с ожиданием получения результата// (т.е. обращение к синхронном сервису с ожиданием внутри send-а).// Задается ограничение на время доставки сообщения.autor=send(handler,message_lifetime(10ms)&wait_result<reply>(10ms),std::move(request));// Отсылка сообщение и получение результата обработки в виде// ответного сообщения processing_result, внутри которого будет// храниться объект reply.// Ответ присылается текущему агенту на его direct-mbox.send(handler,result_by_message<reply,processing_result>(*this),std::move(request));// Отсылка сообщение и получение результата обработки в виде// ответного сообщения processing_result, внутри которого будет// храниться объект reply.// Ответ присылается текущему агенту на его direct-mbox.// На доставку сообщения устанавливается ограничение по времени.send(handler,message_lifetime(10ms)&result_by_message<reply,processing_result>(*this),std::move(request));
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Для того, чтобы добавить в версии 5.5.3 поддержку ограничений на временя жизни сообщений и зарегистрированную доставку, предполагается добавить несколько новых вариантов функции so_5::send. Ниже показаны примеры того, как может выглядеть использование этих вариантов. Прошу высказываться на тему того, нравится или не нравится, может есть какие-то другие идеи.
В качестве небольшого примечания: новый синтаксис позволяет так же выразить и обращение к синхронным сервисам.
Итак, предположим, что агенту с mbox-ом handler отсылается сообщение request (объект хранится внутри std::unique_ptr<request>), агент-обработчик обрабатывает request посредством event-handler-а, возвращающего объект reply.