Класс 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. Создано системой
1.4.6-NO