SObjectizer
5.1
|
Механизм мета-действий.
Специфика so_sysconf такова, что so_ sysconf ничего не знает об особенностях тех или иных коопераций, поэтому все что он может с ними делать это регистрировать и дерегистрировать. Но все же хотелось получить какие-то механизмы управления над конкретными кооперациями. Поэтому в so_ sysconf внедрен механизм мета-действий. Когда кооперация регистрируется (через coop_ handler или coop_factory), вместе с возвращаемым значением регистратор может вернуть и набор мета-действий. Мета-действие представляет собой объект который предоставляет общее описание мета действие и может его выполнять, получая параметры в строке в виде CLS тега.
Для реализации механизма мета-действий Sysconf использует два класса, один из которых интерфейсный meta_action_t, а другой служит для передачи подсистеме Sysconf набора мета-действий. Для облегчения работы механизм мета-действий включает в себя генератор, который генерирует вспомогательный код, имея который достаточно задать обработчики событий агенту, для которого требуется реализовать некоторое мета-действие.
Класс представляет собой интерфейс, с которым работает Sysconf. Конкретная реализация генерируется автоматически, поэтому остается только включить ее в набор мета-действий вместе с возвращаемым значением.
Класс coop_registration_result_t характеризует результат регистрации кооперации через хэндлер или фабрику коопераций. В самом простом случае он просто отвечает на вопрос: была ли кооперация зарегистрирована успешно.
Если кооперация успешно зарегистрировалась, то Sysconf проверяет, содержит ли возвращаемое значение мета-действия. Если регистрация кооперации возвращает набор мета-действий, то они закрепляются за кооперацей, и их можно использовать для инициации заданных действий.
Если кооперация не выполняет никаких мета действий, то достаточно вернуть true
или false
, положившись на конвертирующий конструктор, который создаст объект coop_registration_result_t, который не будет содержать никаких мета-действий. Однако лучше использовать вспомогательные функции:
Мета-действия задумывались, как механизм отсылки сообщений какому-либо агенту. Для этого реализован генератор, который реализован на Ruby и интегрирован с Mxx_ru. Генератору необходимо передать описание сообщений в CLS формате, обработку которых планируется сделать мета-действием.
Формат корневого тега {sysconf_meta_actions}
:
{sysconf_meta_actions [{namespace <string>}]* [{message <string>}]* }
Формат тега {namespace}
:
{namespace [{namespace <string>}]* [{message <string>}]* }
Формат тега {message}
:
{message <string> {action_name <string>} [{comment <string>}] [{field_prefix <string>}] [{field_suffix <string>}] [{field <string>}]* }
Формат тега {field}
:
{field <string> {type <string>} [{one_of <value> <value> <value>}] [{min_max {min <value>} {max <value>}}] [{default <string>}] }
{sysconf_meta_actions || пространство имен с которым будет идти || реализация классов meta-инфой о сообщении. {namespace "meta_action_sample" {namespace "messages" {message "sample_msg_1" {action_name "Test action #1"} {comment "Sample message #1"} {field_prefix "m_"} {field_suffix ""} {field "name" {type "std::string"} || необязательно {default "Vova"} {one_of "Vova" "Masha" "Dasha"} } {field "age" {type "int"} || необязательно {default "10"} {min_max {min 5} {max 50} } } } } || {namespace "messages" } || {namespace "meta_action_sample" }
В результате генерируется 4 файлов, из которых явно использовать необходимо только 2. Предположим что имя файла с описанием формата сообщений – 'sample_messages'
. Тогда сгенерируются следующие файлы:
sample_messages.hpp
. Описание классов собщений, которые получаются из тегов {message}
, а также содержит реализации meta_action_t
для каждого из них. Это один из 2 файлов, которые необходимо будет непосредственно влючать в свои исходники: первый раз для описание обработчиков сообщений, а второй раз при добавлении метадействий в результат регистрации коопераций.sample_messages.сpp
. Файл имплементации классов из sample_messages.hpp
, при использовании Mxx_ru подключается в проект автоматически.sample_messages.tags.hpp
. Файл с описанием тегов для разбора параметров сообщения, которые заданны в CLS формате. Использует библиотеку cls_3.sample_messages.tags.cpp
. Файл с реализацией классов описанных в sample_messages.tags.hpp
, при использовании Mxx_ru подключается в проект автоматически.Агент, который использует данные мета-действия может выглядеть следующим образом:
Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:21. Создано системой 1.8.3.1 |