Класс so_4::rt::def_subscr_hook_t

Граф наследования:so_4::rt::def_subscr_hook_t:

so_4::rt::subscr_hook_t

Полный список членов класса


Подробное описание

Обобщенная реализация hook-а подписки агентов.

Начиная с:
v.4.2.6 Данная реализация просто вызывает метод so_4::rt::agent_t::so_subscribe() у указанного агента с указанными параметрами.
Для удобства создания объектов данного типа предназначена функция so_4::rt::def_subscr_hook().

Пример использования.
Нужно подписать агента, создающего подчиненную кооперацию, на сообщение агента из этой кооперации.
void
a_owner_t::evt_make_child( const so_4::rt::event_data_t & )
{
  // Создаем дочернего агента, на сообщения которого
  // нужно подписаться.
  a_child_t * child = new a_child_t();
  // Создаем дочернюю кооперацию.
  so_4::rt::dyn_agent_coop_t * child_coop =
    new so_4::rt::dyn_agent_coop_t( child );
  // И подписываемся на сообщения дочернего агента.
  so_4::rt::def_subscr_hook( *child_coop,
    // Подписываем родительского агента.
    *this, "evt_child_start_ok",
    // На сообщения дочернего агента.
    *child, "msg_start_ok" );
  so_4::rt::def_subscr_hook( *child_coop,
    // Подписываем родительского агента.
    *this, "evt_child_start_fail",
    // На сообщения дочернего агента.
    *child, "msg_start_fail" );

  // Регистрируем кооперацию.
  so_4::rt::dyn_agent_coop_helper_t child_coop_helper( child_coop );
  ...
}
Заметки:
Все переданные объекту в конструктор параметры-указатели сохраняются в объекте во время всей жизни объекта. Это особенно важно, если используются указатели на временные объекты. Например, указатель на агента, которого нужно подписывать. Или указатель на поток ошибок для функции so_4::rt::agent_t::so_subscribe().
v.4.2.7
Для поддержки подписки insend-событий в конструктор добавлен еще один аргумент: dispatching. Для того, чтобы подписать insend-событие, этот аргумент должен содержать значение so_4::rt::evt_subscr_t::insend_dispatching:
so_4::rt::def_subscr_hook( *child_coop,
  *this, "evt_child_start_ok",
  *child, "msg_start_ok",
  0, // Приоритет.
  &std::cerr, // Для сообщений об ошибках.
  so_4::rt::evt_subscr_t::insend_dispatching );

Открытые члены

 def_subscr_hook_t (so_4::rt::agent_t *agent_to_subscribe, const std::string &evt_to_subscribe, const std::string &msg_owner, const std::string &msg_name, int priority=0, std::ostream *err=&std::cerr, const evt_subscr_t::dispatching_t &dispatching=evt_subscr_t::normal_dispatching)
 Основной инициализирующий конструктор.
virtual void hook ()
 Обработать подписку агентов кооперации.

Закрытые данные

so_4::rt::agent_tm_agent_to_subscribe
 Агент, у которого нужно вызывать so_subscribe().
std::string m_evt_to_subscribe
 Имя события, которое нужно подписать.
std::string m_msg_owner
 Имя агента-владельца сообщения.
std::string m_msg_name
 Имя сообщения инцидента.
int m_priority
 Приоритет события.
std::ostream * m_err
 Поток для вывода сообщений об ошибках подписки.
evt_subscr_t::dispatching_t m_dispatching
 Тип диспетчеризации события.

Конструктор(ы)

so_4::rt::def_subscr_hook_t::def_subscr_hook_t ( so_4::rt::agent_t agent_to_subscribe,
const std::string &  evt_to_subscribe,
const std::string &  msg_owner,
const std::string &  msg_name,
int  priority = 0,
std::ostream *  err = &std::cerr,
const evt_subscr_t::dispatching_t dispatching = evt_subscr_t::normal_dispatching 
)

Основной инициализирующий конструктор.

Аргументы:
agent_to_subscribe  Агент, у которого нужно вызывать so_subscribe().
evt_to_subscribe  Имя события, которое нужно подписать.
msg_owner  Имя агента-владельца сообщения.
msg_name  Имя сообщения инцидента.
priority  Приоритет события.
err  Поток для вывода сообщений об ошибках подписки.
dispatching  Тип диспетчеризации события.

Используется в so_4::rt::def_subscr_hook().


Методы

void so_4::rt::def_subscr_hook_t::hook (  )  [virtual]

Обработать подписку агентов кооперации.

Вызывается ПЕРЕД тем, как у агентов кооперации будет вызван метод so_4::rt::agent_t::so_on_subscription().

Замещает so_4::rt::subscr_hook_t.

Перекрестные ссылки so_4::rt::evt_subscr_t::insend_dispatching, m_agent_to_subscribe, m_dispatching, m_err, m_evt_to_subscribe, m_msg_name, m_msg_owner, m_priority, so_4::rt::agent_t::so_subscribe() и so_4::rt::agent_t::so_subscribe_insend_event().


Данные класса

Тип диспетчеризации события.

Начиная с:
v.4.2.7

Используется в hook().


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:49 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo