Класс so_4::rt::agent_state_listener_t

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

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

Базовый класс "слушателей" состояния агента.

Начиная с:
v.4.2.6.1
В некоторых случаях нужно определять моменты смены состояния агента. Например, при создании средств мониторинга приложения. Стандартный способ обработки смены состояния в виде обработчиков входа/выхода в/из состояния в этом случае не поможет, т.к. такие обработчики должны быть заранее определены в С++ классе агента и описаны в SObjectizer-классе агента.

Для этих случаев предназначены "слушатели" состояния агента. Агенту может быть назначено любое количество "слушателей". Агент, после успешной смены своего состояния в методе so_change_state() вызовет у каждого из них метод changed().

В чем-то понятие agent_state_listener аналогично понятию agent_traits. Но есть одно важное отличие -- список "слушателей" очищается после каждой дерегистрации агента. Сделано это для того, чтобы "слушателей" могли устанавливать свойства объекта в своем методе agent_traits_t::init(). В этом случае свойство, которое уже нельзя изъять у агента, при каждой регистрации агента будет добавлять "слушателя" не заботясь о том, что такой слушатель агенту уже был добавлен ранее. Ведь агент при дерегистрации удалит всех "слушателей".

Заметки:
"Слушатели" вызываются уже после того, как отработают обработчики входа/выхода в/из состояния. В случае, если какой-либо обработчик еще раз сменит состояние агента, то это приведет к тому, что "слушатель" даже не узнает об одной смене состояния. Например, если агент переходит в состояние A, но обработчик входа в состояние A сменит его на B, то слушателю будет сообщено, что агент находится в состоянии B. Причем сделано это будет дважды -- первый раз это произойдет при вызове so_change_state( "B" ) в обработчике входа в состояние A. Второй раз -- при вызове so_change_state( "A" ), но уже после того как отработает обработчик входа в состояние A. К этому моменту агент будет находится в состоянии B. Такое поведение выбрано специально -- обработчики входа/выхода в/из состояния имеют приоритет над "слушателями" состояний, поэтому сначала запускаются именно обработчики состояния и только затем, когда состояние агента будет установлено, "слушатели".
Внимание:
Если "слушатель" назначается агенту когда агент еще не зарегистрирован в системе, то "слушатель" не сможет узнать имя начального состояния агента, т.к. в момент вызова agent_state_listener_t::stored() состояние агенту еще не назначено. А при регистрации агента в системе процедура смены состояние не выполняется -- SObjectizer просто связывает с агентом имя его начального состояния.


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

virtual void stored (agent_t &agent)
 слушателей агента.
virtual void changed (agent_t &agent, const std::string &state_name)=0
 Вызывается после успешной смены состояния агента.


Методы

virtual void so_4::rt::agent_state_listener_t::changed agent_t agent,
const std::string &  state_name
[pure virtual]
 

Вызывается после успешной смены состояния агента.

Аргументы:
agent  Агент, чье состояние изменилось.
state_name  Имя текущего состояния агента.

void so_4::rt::agent_state_listener_t::stored agent_t agent  )  [virtual]
 

слушателей агента.

В базовом классе ничего не делает.


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