|
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
|
|