Либой агент в SObjectizer-е должен быть производным от agent_t. При этом agent_t должен быть доступным базовым классом для класса агента.
В конструкторе agent_t задается имя агента, которое не может быть изменено впоследствии.
sample/chstate/main.cpp, sample/destroyable_traits/main.cpp, sample/dyn_coop_controlled/main.cpp, sample/dyn_reg/main.cpp, sample/filter/c1.cpp, sample/filter/c1i.hpp, sample/filter/c2.cpp, sample/filter/c2i.hpp, sample/filter/server.cpp, sample/hello_all/main.cpp, sample/hello_delay/main.cpp, sample/hello_periodic/main.cpp, sample/hello_world/main.cpp, sample/high_traffic/client.cpp, sample/high_traffic/common.cpp, sample/high_traffic/server.cpp, sample/inheritance/main.cpp, sample/parent_insend/main.cpp, sample/qt_ring/main.cpp, sample/qt_ui/main.cpp, sample/raw_channel/tcp_cln.cpp, sample/raw_channel/tcp_srv.cpp и sample/subscr_hook/main.cpp.
Открытые члены | |
agent_t (const char *agent_name) | |
agent_t (const std::string &agent_name) | |
virtual const std::string & | so_query_name () const |
Имя агента. | |
virtual const char * | so_query_type () const =0 |
Имя типа агента. | |
virtual void | so_on_subscription ()=0 |
Подписка событий агента. | |
void | so_add_traits (agent_traits_t &traits) |
Добавить свойство, которое не уничтожается самим агентом. | |
void | so_add_destroyable_traits (agent_traits_t *traits) |
Добавить свойство, которое уничтожается агентом в деструкторе. | |
const impl::agent_traits_storage_t & | so_query_traits () const |
Получить хранилище свойств агента. | |
agent_coop_t * | so_query_coop () const |
Определить кооперацию, к которой принадлежит агент. | |
ret_code_t | so_change_state (const std::string &state_name, bool always_call_handlers=false) |
Смена состояния агента. | |
virtual void | so_on_deregistration () |
Обработать дерегистрацию агента. | |
void | so_on_enter__send_so_msg_state (const std::string &state_name) |
Внутренний метод SObjectizer. | |
void | so_subscribe (const std::string &event, const std::string &owner, const std::string &msg, int priority=0, std::ostream *err=&std::cerr) |
Подписать событие агента на сообщение другого объекта. | |
void | so_subscribe (const std::string &event, const std::string &msg, int priority=0, std::ostream *err=&std::cerr) |
Подписать событие агента на собственное сообщение. | |
void | so_subscribe_insend_event (const std::string &event, const std::string &owner, const std::string &msg, int priority=0, std::ostream *err=&std::cerr) |
Подписать insend-событие агента на сообщение другого объекта. | |
void | so_subscribe_insend_event (const std::string &event, const std::string &msg, int priority=0, std::ostream *err=&std::cerr) |
Подписать insend-событие агента на собственное сообщение. | |
void | so_add_nondestroyable_listener (agent_state_listener_t &l) |
Добавить агенту не удаляемого "слушателя" состояний. | |
void | so_add_destroyable_listener (agent_state_listener_t *l) |
Добавить агенту удаляемого "слушателя" состояний. | |
dispatcher_binding_t * | so_dispatcher_binding () const |
Получить указатель на контекст диспетчера. | |
void | so_set_dispatcher_binding (dispatcher_binding_t *binding) |
Назначение агенту указателя на контекст диспетчера. | |
Закрытые члены | |
void | so_set_coop (agent_coop_t *coop) |
Установить кооперацию, к которой принадлежит агент. | |
void | so_handle_deregistration () |
Выполнить действия, необходимые агенту при дерегистрации. | |
Закрытые данные | |
std::string | m_so_name |
Имя агента, назначеное агенту в конструкторе. | |
std::auto_ptr < impl::agent_traits_storage_t > | m_so_traits |
Свойства агента. | |
agent_coop_t * | m_so_coop |
Кооперация, которой принадлежит агент. Указатель определен только после регистрации агента. | |
dispatcher_binding_t * | m_so_dispatcher_binding |
Контекст, на котором будут исполняться события данного агента. | |
std::auto_ptr < impl::state_listener_storage_t > | m_so_state_listeners |
Слушатели состояния агента. | |
Друзья | |
class | agent_coop_t |
so_4::rt::agent_t::agent_t | ( | const char * | agent_name | ) |
agent_name | Имя агента. |
so_4::rt::agent_t::agent_t | ( | const std::string & | agent_name | ) | [explicit] |
agent_name | Имя агента. |
const std::string & so_4::rt::agent_t::so_query_name | ( | ) | const [virtual] |
Имя агента.
В классе agent_t возвращается заданое в конструкторе имя.
Перекрестные ссылки m_so_name.
Используется в so_4::rt::impl::agent_coop_storage_t::add_agent(), so_4::rt::impl::std_sys_dict_t::check_agents_classes(), so_4::rt::impl::std_sys_dict_t::check_dereg_coop(), so_4::rt::impl::std_sys_dict_t::create_agents_wrappers(), so_4::disp::qt_ui::impl::traits_t::deinit(), so_4::disp::active_obj::impl::active_obj_traits_t::deinit(), so_4::disp::active_group::impl::traits_t::deinit(), so_4::rt::comm::a_channel_processor_base_t::evt_channel_created(), so_4::rt::comm::a_communicator_t::evt_channel_destroyed(), so_4::rt::comm::a_sop_outgoing_channel_t::evt_channel_failed(), so_4::rt::comm::a_raw_outgoing_channel_t::evt_channel_failed(), so_4::rt::a_sobjectizer_t::evt_check_dereg(), so_4::rt::comm::a_sop_outgoing_channel_t::evt_connect(), so_4::rt::comm::a_raw_outgoing_channel_t::evt_connect(), so_4::rt::comm::a_sop_outgoing_channel_t::evt_start(), so_4::rt::comm::a_sop_incoming_channel_processor_t::evt_start(), so_4::rt::comm::a_raw_outgoing_channel_t::evt_start(), so_4::rt::comm::a_raw_incoming_channel_processor_t::evt_start(), so_4::rt::a_sobjectizer_t::evt_start_normal_shutdown(), so_4::disp::qt_ui::impl::traits_t::init(), so_4::disp::active_obj::impl::active_obj_traits_t::init(), so_4::disp::active_group::impl::traits_t::init(), so_4::rt::comm::a_channel_processor_base_t::initiate_disconnection(), so_4::rt::comm::a_channel_processor_base_t::make_comm_channel(), so_4::rt::comm::a_sop_outgoing_channel_t::on_channel_acception(), so_4::rt::comm::a_raw_outgoing_channel_t::on_channel_acception(), so_4::rt::comm::a_raw_incoming_channel_processor_t::on_channel_acception(), so_4::rt::comm::a_sop_outgoing_channel_t::on_channel_destroying(), so_4::rt::comm::a_raw_outgoing_channel_t::on_channel_destroying(), so_4::rt::comm::a_raw_incoming_channel_processor_t::on_channel_destroying(), so_4::rt::comm::a_sop_incoming_channel_processor_t::on_enter_st_failed(), so_4::rt::comm::a_raw_incoming_channel_processor_t::on_enter_st_failed(), so_4::disp::qt_ui::impl::dispatcher_t::setup_dispatcher_binding(), so_4::disp::active_obj::impl::dispatcher_t::setup_dispatcher_binding(), so_4::disp::active_group::impl::dispatcher_t::setup_dispatcher_binding(), so_change_state(), so_4::rt::comm::a_sop_incoming_channel_processor_t::so_on_deregistration(), so_on_enter__send_so_msg_state(), so_4::rt::comm::a_communicator_t::so_on_subscription(), so_subscribe(), so_subscribe_insend_event() и so_4::rt::comm::a_channel_processor_base_t::warn_about_unknown_channel().
virtual const char* so_4::rt::agent_t::so_query_type | ( | ) | const [pure virtual] |
Имя типа агента.
Автоматически реализуется описанием класса агента посредством макросов SOL4_CLASS_START, SOL4_CLASS_FINISH.
Замещается в so_4::rt::comm::a_channel_processor_base_t, so_4::rt::comm::a_communicator_t, so_4::rt::comm::a_raw_incoming_channel_processor_t, so_4::rt::comm::a_raw_outgoing_channel_t, so_4::rt::comm::a_sop_incoming_channel_processor_t, so_4::rt::comm::a_sop_outgoing_channel_t и so_4::rt::a_sobjectizer_t.
Используется в so_4::rt::impl::std_sys_dict_t::check_agents_classes() и so_4::rt::impl::std_sys_dict_t::create_agents_wrappers().
virtual void so_4::rt::agent_t::so_on_subscription | ( | ) | [pure virtual] |
Подписка событий агента.
Самый первый метод, который вызывается у агента после его регистрации в SObjectizer.
Предназначен для подписки событий агента.
У всех агентов регистрируемой кооперации вызываются методы so_on_subscription. Только после этого рассылается сообщение msg_coop_registered.
Замещается в so_4::rt::comm::a_channel_processor_base_t, so_4::rt::comm::a_communicator_t, so_4::rt::comm::a_raw_incoming_channel_processor_t, so_4::rt::comm::a_raw_outgoing_channel_t, so_4::rt::comm::a_sop_incoming_channel_processor_t, so_4::rt::comm::a_sop_outgoing_channel_t и so_4::rt::a_sobjectizer_t.
void so_4::rt::agent_t::so_add_traits | ( | agent_traits_t & | traits | ) |
Добавить свойство, которое не уничтожается самим агентом.
Время жизни объекта traits должно превышать время жизни объекта-агента.
traits | Объект-свойство агента. Указатель на этот объект сохраняется в объекте-агенте в течении всей жизни объекта-агента. |
Перекрестные ссылки m_so_traits.
void so_4::rt::agent_t::so_add_destroyable_traits | ( | agent_traits_t * | traits | ) |
Добавить свойство, которое уничтожается агентом в деструкторе.
traits |
Объект-свойство агента. Указатель на этот объект сохраняется в объекте-агенте в течении всей жизни объекта-агента. Должен быть указателем на динамически созданный объект. |
Перекрестные ссылки m_so_traits.
const impl::agent_traits_storage_t & so_4::rt::agent_t::so_query_traits | ( | ) | const |
Получить хранилище свойств агента.
Перекрестные ссылки m_so_traits.
Используется в so_4::rt::agent_coop_t::deregistered() и so_4::rt::agent_coop_t::init_traits().
agent_coop_t * so_4::rt::agent_t::so_query_coop | ( | ) | const |
Определить кооперацию, к которой принадлежит агент.
Перекрестные ссылки m_so_coop.
ret_code_t so_4::rt::agent_t::so_change_state | ( | const std::string & | state_name, | |
bool | always_call_handlers = false | |||
) |
Смена состояния агента.
Если агент действительно изменяет свое состояние, то на контексте текущей нити вызываются обработчики выхода и входа в состояние. Если же агент находится в данном состоянии, то обработчики вызываются, если параметр always_call_handlers содержит true. Обрабочики вызываются уже после того, как агент изменит свое состояние. Изменить состояние агента можно только на контексте той нити, на которой в данный момент работает обработчик события данного агента.
state_name | Имя нового состояния агента. Имя должно быть определено в описании класса агента. |
always_call_handlers | Нужно ли вызывать обработчики выхода/входа в состояние, если агент уже находится в этом состоянии. По умолчанию -- не нужно. |
Перекрестные ссылки m_so_state_listeners, so_4::api::query_agent_state() и so_query_name().
Используется в so_4::rt::comm::a_sop_outgoing_channel_t::evt_channel_failed(), so_4::rt::comm::a_raw_outgoing_channel_t::evt_channel_failed(), so_4::rt::comm::a_sop_outgoing_channel_t::evt_connect(), so_4::rt::comm::a_raw_outgoing_channel_t::evt_connect(), so_4::rt::comm::a_sop_outgoing_channel_t::evt_sop_client_handshake_resp(), so_4::rt::comm::a_sop_incoming_channel_processor_t::evt_start(), so_4::rt::comm::a_raw_incoming_channel_processor_t::evt_start(), so_4::rt::a_sobjectizer_t::evt_start_normal_shutdown(), so_4::rt::comm::a_sop_outgoing_channel_t::on_channel_acception(), so_4::rt::comm::a_raw_outgoing_channel_t::on_channel_acception(), so_4::rt::comm::a_sop_outgoing_channel_t::on_channel_destroying(), so_4::rt::comm::a_raw_outgoing_channel_t::on_channel_destroying(), so_4::rt::comm::a_sop_outgoing_channel_t::on_disconnection_initiated() и so_4::rt::comm::a_raw_outgoing_channel_t::on_disconnection_initiated().
void so_4::rt::agent_t::so_on_deregistration | ( | ) | [virtual] |
Обработать дерегистрацию агента.
Этот метод вызывается у агента уже после того, как агент был вычеркнут из SObjectizer и после того, как было разослано сообщение msg_coop_deregistered.
Данный метод для агента выполняет роль деструктора.
Переопределяется в so_4::rt::comm::a_channel_processor_base_t, so_4::rt::comm::a_communicator_t, so_4::rt::comm::a_raw_incoming_channel_processor_t и so_4::rt::comm::a_sop_incoming_channel_processor_t.
Используется в so_handle_deregistration().
void so_4::rt::agent_t::so_on_enter__send_so_msg_state | ( | const std::string & | state_name | ) |
Внутренний метод SObjectizer.
Метод, который отсылает сообщение об изменении состояния агента. Предназначен для использования в качестве обработчика при входе в состояние.
Перекрестные ссылки so_4::rt::msg_auto_ptr_t< Msg >::send() и so_query_name().
void so_4::rt::agent_t::so_subscribe | ( | const std::string & | event, | |
const std::string & | owner, | |||
const std::string & | msg, | |||
int | priority = 0 , |
|||
std::ostream * | err = &std::cerr | |||
) |
Подписать событие агента на сообщение другого объекта.
SOL4_SUBSCR_EVENT_START( event, priority ) SOL4_SUBSCR_EVENT_MSG( owner, msg ) SOL4_SUBSCR_EVENT_FINISH_CERR()
event | Имя подписываемого события. |
owner | Имя агента-владельца инцидента. |
msg | Имя сообщения-инцидента. |
priority | Приоритет события. |
err | Поток для отображения сообщений об ошибках подписки. Если равен 0, то сообщения об ошибках не игнорируются. |
Перекрестные ссылки so_4::rt::evt_subscr_t::add(), so_4::rt::evt_subscr_t::e_change_all, so_query_name() и so_4::api::subscribe_event().
Используется в so_4::rt::def_subscr_hook_t::hook(), so_4::rt::comm::a_sop_outgoing_channel_t::so_on_subscription(), so_4::rt::comm::a_sop_incoming_channel_processor_t::so_on_subscription(), so_4::rt::comm::a_raw_outgoing_channel_t::so_on_subscription(), so_4::rt::comm::a_raw_incoming_channel_processor_t::so_on_subscription(), so_4::rt::comm::a_communicator_t::so_on_subscription(), so_4::rt::comm::a_channel_processor_base_t::so_on_subscription(), so_4::rt::a_sobjectizer_t::so_on_subscription() и so_subscribe().
void so_4::rt::agent_t::so_subscribe | ( | const std::string & | event, | |
const std::string & | msg, | |||
int | priority = 0 , |
|||
std::ostream * | err = &std::cerr | |||
) |
Подписать событие агента на собственное сообщение.
SOL4_SUBSCR_EVENT_START( event, priority ) SOL4_SUBSCR_EVENT_MSG_SELF( owner, msg ) SOL4_SUBSCR_EVENT_FINISH_CERR()
event | Имя подписываемого события. |
msg | Имя сообщения-инцидента. |
priority | Приоритет события. |
err | Поток для отображения сообщений об ошибках подписки. Если равен 0, то сообщения об ошибках не игнорируются. |
Перекрестные ссылки so_query_name() и so_subscribe().
void so_4::rt::agent_t::so_subscribe_insend_event | ( | const std::string & | event, | |
const std::string & | owner, | |||
const std::string & | msg, | |||
int | priority = 0 , |
|||
std::ostream * | err = &std::cerr | |||
) |
Подписать insend-событие агента на сообщение другого объекта.
event | Имя подписываемого события. |
owner | Имя агента-владельца инцидента. |
msg | Имя сообщения-инцидента. |
priority | Приоритет события. |
err | Поток для отображения сообщений об ошибках подписки. Если равен 0, то сообщения об ошибках игнорируются. |
Перекрестные ссылки so_4::rt::evt_subscr_t::add(), so_4::rt::evt_subscr_t::e_change_all, so_4::rt::evt_subscr_t::insend_dispatching, so_query_name() и so_4::api::subscribe_event().
Используется в so_4::rt::def_subscr_hook_t::hook(), so_4::rt::comm::a_communicator_t::so_on_subscription(), so_4::rt::a_sobjectizer_t::so_on_subscription() и so_subscribe_insend_event().
void so_4::rt::agent_t::so_subscribe_insend_event | ( | const std::string & | event, | |
const std::string & | msg, | |||
int | priority = 0 , |
|||
std::ostream * | err = &std::cerr | |||
) |
Подписать insend-событие агента на собственное сообщение.
event | Имя подписываемого события. |
msg | Имя сообщения-инцидента. |
priority | Приоритет события. |
err | Поток для отображения сообщений об ошибках подписки. Если равен 0, то сообщения об ошибках игнорируются. |
Перекрестные ссылки so_query_name() и so_subscribe_insend_event().
void so_4::rt::agent_t::so_add_nondestroyable_listener | ( | agent_state_listener_t & | l | ) |
Добавить агенту не удаляемого "слушателя" состояний.
l | Добавляемый слушатель. |
Перекрестные ссылки m_so_state_listeners и so_4::rt::agent_state_listener_t::stored().
void so_4::rt::agent_t::so_add_destroyable_listener | ( | agent_state_listener_t * | l | ) |
Добавить агенту удаляемого "слушателя" состояний.
l | Добавляемый слушатель. Должен быть указателем на динамически созданный объект. |
Перекрестные ссылки m_so_state_listeners и so_4::rt::agent_state_listener_t::stored().
dispatcher_binding_t * so_4::rt::agent_t::so_dispatcher_binding | ( | ) | const |
Получить указатель на контекст диспетчера.
Перекрестные ссылки m_so_dispatcher_binding.
void so_4::rt::agent_t::so_set_dispatcher_binding | ( | dispatcher_binding_t * | binding | ) |
Назначение агенту указателя на контекст диспетчера.
Перекрестные ссылки m_so_dispatcher_binding.
Используется в so_4::rt::agent_coop_t::deregistered(), so_4::disp::qt_ui::impl::dispatcher_t::setup_dispatcher_binding(), so_4::disp::one_thread::impl::dispatcher_t::setup_dispatcher_binding(), so_4::disp::active_obj::impl::dispatcher_t::setup_dispatcher_binding() и so_4::disp::active_group::impl::dispatcher_t::setup_dispatcher_binding().
void so_4::rt::agent_t::so_set_coop | ( | agent_coop_t * | coop | ) | [private] |
Установить кооперацию, к которой принадлежит агент.
Метод предназначен для класса so_4::rt::agent_coop_t. Когда агент добавляется в кооперации параметр coop содержит указатель на кооперацию. Когда кооперация дерегистрируется, coop содержит 0.
Перекрестные ссылки m_so_coop.
Используется в so_4::rt::agent_coop_t::agent_coop_t() и so_4::rt::agent_coop_t::deregistered().
void so_4::rt::agent_t::so_handle_deregistration | ( | ) | [private] |
Выполнить действия, необходимые агенту при дерегистрации.
Перекрестные ссылки m_so_state_listeners и so_on_deregistration().
Используется в so_4::rt::agent_coop_t::deregistered().
std::auto_ptr< impl::agent_traits_storage_t > so_4::rt::agent_t::m_so_traits [private] |
Свойства агента.
Используется в so_add_destroyable_traits(), so_add_traits() и so_query_traits().
Контекст, на котором будут исполняться события данного агента.
Используется в so_dispatcher_binding() и so_set_dispatcher_binding().
std::auto_ptr< impl::state_listener_storage_t > so_4::rt::agent_t::m_so_state_listeners [private] |
Слушатели состояния агента.
Используется в so_add_destroyable_listener(), so_add_nondestroyable_listener(), so_change_state() и so_handle_deregistration().
Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:48 2008. Создано системой 1.5.6 |