Класс 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  Тип диспетчеризации события.


Методы

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

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

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

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


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

evt_subscr_t::dispatching_t so_4::rt::def_subscr_hook_t::m_dispatching [private]
 

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

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


Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:51 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz