SObjectizer-5.5.21 и so_5_extra-1.0.4

2018.02.08

SObjectizer обновился до версии 5.5.21. Эта версия содержит несколько важных добавлений/изменений, полный список которых приведен в соответствующем разделе Wiki.

Наиболее важное нововведение версии 5.5.21 - это возможность подписки т.н. deadletter handler-ов. Deadletter handler получает сообщение, если для агента больше не нашлось других обработчиков для этого сообщения. При этом deadletter handler вызывается вне зависимости от того, в каком состоянии находится агент. Это позволяет использовать deadletter handler-ы для реализации обработчиков сообщений по умолчанию. Более подробная информация может быть найдена в этом разделе Wiki: [so-5.5.21 Deadletter Handlers].

Так же обновился сопутствующий продукт so_5_extra, который базируется на SObjectizer-е.

Версия 1.0.4 so_5_extra вводит понятие асинхронной операции: [so5extra 1.0 Async Operations]. Асинхронные операции предназначены для того, чтобы существенно сократить количество кода, который нужно написать для реализации однократного взаимодействия между агентами. Например, с помощью асинхронных операций разработчик может написать что-то вроде:

class request_manager : public so_5::agent_t {
   struct request_timed_out {
      user_id user_;
      request_id id_;
   };
   ...
   void on_successful_result(mhood_t<request_successed> cmd) {...}
   void on_failed_result(mhood_t<request_failed> cmd) {...}
   void on_timeout(mhood_t<request_timed_out> cmd) {...}
   ...
   void on_new_request(mhood_t<request_data> cmd) {
      // Detect who will process the request.
      const auto processor_mbox = detect_processor_for_req(*cmd);

      // Prepare async operation of handling the request.
      so_5::extra::async_op::time_limited::make<request_timed_out>(*this)
         .completed_on(processor_mbox, so_default_state(),
            &request_manager::on_successful_result)
         .completed_on(processor_mbox, so_default_state(),
            &request_manager::on_failed_result)
         .timeout_handler(so_default_state(),
            &request_manager::on_timeout)
         .activate(5s, cmd->user_, cmd->id_);

      // Transfer request processing to actual processor.
      so_5::send(processor_mbox, cmd);
   }
   ...
};

Фокус здесь в том, что все подписки для обработчиков завершения операции и истечения тайм-аута создаются и уничтожаются автоматически. Также автоматически выполняется отсылка и отмена отложенного сообщения/сигнала для отсчета тайм-аута.

SObjectizer-5.5.21 может быть загружен из секции Files на SourceForge или же может быть взят из Subversion-репозитория или из зеркала на GitHub.

Последняя версия SObjectizer-а также может быть установлена посредством менеджера пакетов vcpkg командой:
vcpkg install sobjectizer.

Исходные тексты so_5_extra могут быть получены из Subversion-репозитория или могут быть загружены из секции Files на SourceForge.