SObjectizer  5.1
Открытые члены | Защищенные члены | Закрытые типы | Закрытые данные | Друзья | Полный список членов класса
Класс so_5_transport::a_channel_base_tabstract

Базовый класс канального агента. Подробнее...

Граф наследования:so_5_transport::a_channel_base_t:
so_5::rt::agent_t so_5::rt::atomic_refcounted_t so_5_transport::a_client_base_t so_5_transport::a_server_base_t mbapi_4::comm::a_mbapi_outgoing_channel_t mbapi_4::comm::a_mbapi_incoming_channel_t so_sysconf_4::ichannel::a_failure_handler_t

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

 a_channel_base_t (so_5::rt::so_environment_t &env, const so_5::rt::mbox_ref_t &notification_mbox)
 
virtual void so_define_agent ()
 Определяет подписку агента на события канала.
 
void evt_channel_created (const so_5::rt::event_data_t< msg_channel_created > &msg)
 Обработка установки нового соединения.
 
void evt_channel_failed (const so_5::rt::event_data_t< msg_channel_failed > &msg)
 Обработка ошибки установки нового соединения.
 
void evt_channel_lost (const so_5::rt::event_data_t< msg_channel_lost > &msg)
 Обработка потери соединения.
 
void evt_incoming_package (const so_5::rt::event_data_t< so_5_transport::msg_incoming_package > &msg)
 Обработка уведомления о входящем пакете.
 
- Открытые члены inherited from so_5::rt::agent_t
 agent_t (so_environment_t &env)
 Конструктор агента. Подробнее...
 
const agent_tself_ptr () const
 Получить указатель на себя. Подробнее...
 
virtual void so_evt_start ()
 Начальное событие агента. Подробнее...
 
virtual void so_evt_finish ()
 Завершающее событие агента. Подробнее...
 
const state_tso_current_state () const
 Получить ссылку на текущее состояние.
 
const std::string & so_coop_name () const
 Имя кооперации, к которой принадлежит агент. Подробнее...
 
void so_add_nondestroyable_listener (agent_state_listener_t &state_listener)
 Добавить агенту слушателя, время жизни которого агент не контролирует.
 
void so_add_destroyable_listener (agent_state_listener_unique_ptr_t state_listener)
 Добавить агенту слушателся, владение которым передается агенту.
 
so_environment_tso_environment ()
 Получить ссылку на среду SO к которой принадлежит агент. Подробнее...
 

Защищенные члены

void so_add_state_for_channel_events (const so_5::rt::state_t &state)
 Добавить состояние для подписки на события канала. Подробнее...
 
so_5::rt::mbox_ref_tquery_notification_mbox ()
 Получить mbox на который приходят уведомлени о событиях канала.
 
virtual void so_handle_client_connected (const msg_channel_created &msg)=0
 Hook-методы обработки событий канала. Подробнее...
 
virtual void so_handle_client_failed (const msg_channel_failed &msg)=0
 Обработка при неудачном подключении нового клиента.
 
virtual void so_handle_client_disconnected (const msg_channel_lost &msg)=0
 Обработка отключения клиента.
 
virtual void so_handle_incoming_package (const so_5_transport::msg_incoming_package &msg)=0
 Обработки очередного пакета клиента.
 
- Защищенные члены inherited from so_5::rt::agent_t
bool so_was_defined () const
 Был ли агент определен? Подробнее...
 
const state_tso_default_state () const
 Работа с состояниями. Подробнее...
 
ret_code_t so_change_state (const state_t &new_state, throwing_strategy_t throwing_strategy=THROW_ON_ERROR)
 Сменить состояние. Подробнее...
 
subscription_bind_t so_subscribe (const mbox_ref_t &mbox_ref)
 Подписка и отписка от сообщения. Подробнее...
 
subscription_unbind_t so_unsubscribe (const mbox_ref_t &mbox_ref)
 Создать объект для изьятия подписки. Подробнее...
 

Закрытые типы

typedef so_5::rt::agent_t base_type_t
 
typedef std::set< const
so_5::rt::state_t * > 
state_set_t
 Тип списка состояний.
 

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

state_set_t m_states_listeninig_channel_events
 Список состояний для которых подписывать события канала.
 
so_5::rt::mbox_ref_t m_notification_mbox
 Mbox на который приходят уведомлени о событиях канала.
 

Друзья

class a_server_base_t
 
class a_client_base_t
 

Additional Inherited Members

- Открытые статические члены inherited from so_5::rt::agent_t
static void call_push_event (agent_t &agent, const event_caller_block_ref_t &event_handler_caller, const message_ref_t &message)
 Поставить в очередь событие для выполнения агентом. Подробнее...
 
static void call_next_event (agent_t &agent)
 Инициировать выполнение очередного события. Подробнее...
 
static void call_bind_to_disp (agent_t &agent, dispatcher_t &disp)
 Привязать агента к диспетчеру. Подробнее...
 

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

Базовый класс канального агента.

Служит базовым классом канальных агентов Определяет методы получения уведомлений о событиях канала, и делегирует их обработку hook-методам, которые должны быть переопределены в наследниках.

Наследование от данного класса избавляет от необходимости самому подписывать агента на события канала и хранить mbox для уведомлений. Если наследник определяет дополнительные состояния и хочет получать уведомления о событиях с каналом, то можно добавить состояние в список состояний для подписки на события канала.

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

so_5_transport::a_channel_base_t::a_channel_base_t ( so_5::rt::so_environment_t env,
const so_5::rt::mbox_ref_t notification_mbox 
)
Аргументы
notification_mboxMbox на который будут приходить уведомления о событиях канала.

Перекрестные ссылки so_add_state_for_channel_events() и so_5::rt::agent_t::so_default_state().

Методы

void so_5_transport::a_channel_base_t::so_add_state_for_channel_events ( const so_5::rt::state_t state)
protected

Добавить состояние для подписки на события канала.

Если наследник определяет дополнительные состояния и надо чтобы события канала обрабатывались в этих дополнительных состояниях, то через so_add_state_for_channel_events их можно добавить в список состояний для которых обрабатываются события канала. Например:

class my_client_t : public so_5_transport::a_channel_base_t
{
typedef so_5_transport::a_channel_base_t base_type_t;
// Версия протокола 1.
const so_5::state_t m_protocol_v1;
// Версия протокола 2.
const so_5::state_t m_protocol_v2;
public:
my_client_t(
const so_5::rt::mbox_ref_t & notification_mbox )
:
base_type_t( env )
m_protocol_v1( self_ptr() ),
m_protocol_v2( self_ptr() )
{
// В не зависимости от того какая версия протокола
// будет использована события канала надо обрабатывать.
}
virtual void
{
// Подписки базового класса.
so_subscribe( query_interface_mbox() )
.in( m_protocol_v1 )
.event( &my_client_t::evt_msg_1 );
so_subscribe( query_interface_mbox() )
.in( m_protocol_v2 )
.event( &my_client_t::evt_msg_1 );
// ...
so_subscribe( query_interface_mbox() )
.in( m_protocol_v1 )
.event( &my_client_t::evt_msg_N );
so_subscribe( query_interface_mbox() )
.in( m_protocol_v2 )
.event( &my_client_t::evt_msg_N );
// Во второй версии добавлена поддержка пинга.
so_subscribe( query_interface_mbox() )
.in( m_protocol_v2 )
.event( &my_client_t::evt_ping );
// ...
}
// ...
};
Заметки
Добавление состояний имеет смысл только до того момента как агент будет подписан на сообщения.

Перекрестные ссылки m_states_listeninig_channel_events и so_5::rt::agent_t::so_was_defined().

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

virtual void so_5_transport::a_channel_base_t::so_handle_client_connected ( const msg_channel_created msg)
protectedpure virtual

Hook-методы обработки событий канала.

Обработка появления нового клиента.

Замещается в mbapi_4::comm::a_mbapi_incoming_channel_t и mbapi_4::comm::a_mbapi_outgoing_channel_t.

Примеры:
so_5_transport/raw_channe/tcp_srv и so_5_transport/raw_channel/tcp_cln.

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


Документация по SObjectizer v.5.1 'Джимара'. Последние изменения: Ср 15 Май 2013 12:56:23. Создано системой  doxygen1.8.3.1 Intervale SourceForge.net Logo