Пространство имен so_4::rt::comm::impl


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

Детали реализации.


Классы

struct  channels_times_impl_t
class  channels_filters_t
 Ассоциативное хранилище идентификаторов коммуникационных каналов и фильтров. Подробнее...
class  channels_times_t
 Ассоциативное хранилище идентификаторов коммуникационных каналов и времени получения последнего пакета из канала. Подробнее...
class  servers_filters_t
 Ассоциативное хранилище имен агентов серверных каналов и фильтров. Подробнее...

Определения типов

typedef std::set
< so_4::rt::comm_channel_t
channel_set_t
 Тип множества идентификаторов коммуникационных каналов.

Функции

void handle_package (const comm_channel_t &channel, comm_buf_t &package, const so_4::sop::filter_t *server_filter, const so_4::sop::filter_t &initial_filter, channels_filters_t &filters_map)
 Обрабатываем пакет и отсылает ответ указанному клиенту через указанный агент-коммуникатор.
void make_and_send_package (const so_4::sop::req_info_storage_t &reqs, const channel_set_t &channels)
 Формирование и отправка пакета клиентам.
void initiate_handshake (const comm_channel_t &channel, const so_4::sop::handshake_info_t &request)
 Инициировать операцию handshake для канала.
void format_handshake_resp (const so_4::sop::handshake_resp_info_t &what, so_4::rt::comm_buf_t &to)
 Вспомогательная функция для формирования бинарного представления ответа на handshake.
so_4::ret_code_t parse_sop_incoming_buffer (const so_4::rt::comm_channel_t &channel_id, so_4::rt::comm_buf_t &ibuf, bool &is_blocked)
static void make_error_response (const std::string &error_msg, req_info_storage_t &to)
static ret_code_t fill_msg_field (const send_msg_info_t::field_t &field, so_4::rt::msg_fld_handler_t &fld_handler)
static ret_code_t fill_msg (const send_msg_info_t &req, void *msg_data, so_4::rt::impl::msg_wrapper_t *msg_wrapper)
static ret_code_t create_and_send_msg (const send_msg_info_t &req, const comm_channel_t &channel, const so_4::sop::filter_t *server_filter, const so_4::sop::filter_t &filter)
static void process (const send_msg_info_t *req, req_info_storage_t &responses, const comm_channel_t &channel, const so_4::sop::filter_t *server_filter, const so_4::sop::filter_t &filter)
static void process (const query_agent_state_info_t *req, req_info_storage_t &responses)
static void process (const comm_channel_t &channel, const so_4::sop::filter_info_t *req, channels_filters_t &filters, req_info_storage_t &responses)
static void process (const comm_channel_t &channel, const so_4::sop::ping_info_t *req, req_info_storage_t &responses)
 Обработка ping-запроса.
static void process (const comm_channel_t &channel, const so_4::sop::handshake_info_t *req)
 Обработка инициирования handshake.
static void process (const comm_channel_t &channel, const so_4::sop::handshake_resp_info_t *req)
 Обработка ответа на handshake.
static void process (const comm_channel_t &channel, const so_4::sop::unknown_resp_info_t *req, channels_filters_t &filters, req_info_storage_t &responses)
 Обработка ответа на неизвестную серверу операцию.
static void process_request (const req_info_t *request, req_info_storage_t &responses, const comm_channel_t &channel, const so_4::sop::filter_t *server_filter, const so_4::sop::filter_t &initial_filter, channels_filters_t &filters_map)
static void send_to_client (const comm_channel_t &channel, const comm_buf_t &package)


Функции

void so_4::rt::comm::impl::format_handshake_resp ( const so_4::sop::handshake_resp_info_t what,
so_4::rt::comm_buf_t to 
)

Вспомогательная функция для формирования бинарного представления ответа на handshake.

Начиная с:
v.4.4.0-b5 Необходимо для того, чтобы транспортный агент мог самостоятельно сформировать этот ответ и записать его в канал.
Аргументы:
what  Что нужно форматировать.
to  Куда нужно помещать двоичный образ.

Перекрестные ссылки so_4::sop::format() и so_4::rt::comm_buf_t::set_pos().

Используется в so_4::rt::comm::a_sop_incoming_channel_processor_t::evt_sop_client_handshake().

void so_4::rt::comm::impl::handle_package ( const comm_channel_t &  channel,
comm_buf_t &  package,
const so_4::sop::filter_t server_filter,
const so_4::sop::filter_t initial_filter,
channels_filters_t &  filters_map 
)

Обрабатываем пакет и отсылает ответ указанному клиенту через указанный агент-коммуникатор.

v.4.2.7
Добавлен параметр server_filter, который должен обрабатываться следующим образом:
  • если он равен нулю (либо сообщение было получено через клиентский канал, либо для сервера не назначен входящий фильтр), то сообщение из пакета so_4::sop::send_msg_info_t должно проходить только через клиентский фильтр;
  • в противном случае сообщение из пакета so_4::sop::send_msg_info_t должно сначала успешно пройти через данный фильтр, а затем через клиентский фильтр.
v.4.4.0-b4
Начиная с этой версии при извлечении фильтра из SOP-пакета он сразу же сохраняется для канала в filters_map и отсылается сообщение msg_client_connected. В связи с этим параметр initial_filter играет лишь вспомогательную роль -- перед выполнением очередного SOP-запроса нужно сначала попытаться найти фильтр в filters_map. И только если в filters_map фильтра нет использовать initial_filter.
Аргументы:
channel  Канал из которого поступил пакет.
package  Содержимое пакета.
server_filter  Фильтр серверного канала, через который был получен пакет.
initial_filter  Начальный фильтр данного канала. Может быть изменен в процессе обработки SOP-пакета.
filters_map  Карта фильтров каналов. Передается для возможности завершения операции handshake.

Перекрестные ссылки so_4::sop::format(), so_4::sop::parse(), so_4::rt::comm_buf_t::read() и so_4::rt::comm_buf_t::set_pos().

Используется в so_4::rt::comm::a_communicator_t::evt_sop_package().

void so_4::rt::comm::impl::initiate_handshake ( const comm_channel_t &  channel,
const so_4::sop::handshake_info_t request 
)

Инициировать операцию handshake для канала.

Начиная с:
v.4.2.7 Формируется SOP пакет so_4::sop::handshake_info_t и отсылается в указанный канал.

Перекрестные ссылки make_and_send_package().

Используется в so_4::rt::comm::a_sop_outgoing_channel_t::form_and_send_handshake().

void so_4::rt::comm::impl::make_and_send_package ( const so_4::sop::req_info_storage_t reqs,
const channel_set_t &  channels 
)

Формирование и отправка пакета клиентам.

Аргументы:
reqs  Запросы, которые нужно поместить в один пакет.
channels  Каналы, в которые нужно переслать получившийся пакет.

Перекрестные ссылки so_4::sop::format() и so_4::rt::comm_buf_t::set_pos().

Используется в so_4::rt::comm::a_communicator_t::evt_check_no_activity_time(), so_4::rt::comm::a_communicator_t::evt_global_agent_msg(), so_4::rt::comm::a_communicator_t::evt_set_filter() и initiate_handshake().

so_4::ret_code_t so_4::rt::comm::impl::parse_sop_incoming_buffer ( const so_4::rt::comm_channel_t channel_id,
so_4::rt::comm_buf_t ibuf,
bool &  is_blocked 
) [inline]

Аргументы:
channel_id  Канал, из которого были полученны данные.
ibuf  Буфер с входящими данными.
is_blocked  Признак блокированности канала.

Перекрестные ссылки so_4::rt::comm::communicator_agent_name(), so_4::sop::package_header_t::e_image_size, so_4::rt::comm_buf_t::erase(), so_4::rt::comm_buf_t::pos(), so_4::rc_invalid_sop_package_header, so_4::rt::msg_auto_ptr_t< Msg >::send(), so_4::rt::comm_buf_t::set_pos(), so_4::sop::package_header_t::size(), so_4::rt::comm_buf_t::size() и SO_4_ERROR_RETURN.

Используется в so_4::rt::comm::sop_with_transformation_data_processor_t::process_incoming() и so_4::rt::comm::simple_sop_data_processor_t::process_incoming().

static void so_4::rt::comm::impl::process ( const comm_channel_t &  channel,
const so_4::sop::unknown_resp_info_t req,
channels_filters_t &  filters,
req_info_storage_t &  responses 
) [static]

Обработка ответа на неизвестную серверу операцию.

Начиная с:
v.4.4.0-b5 Ничего не делает.

static void so_4::rt::comm::impl::process ( const comm_channel_t &  channel,
const so_4::sop::handshake_resp_info_t req 
) [static]

Обработка ответа на handshake.

Начиная с:
v.4.2.7
v.4.4.0-b4
Транспортному агенту отсылается сообщение msg_sop_client_handshake_resp.

Перекрестные ссылки so_4::rt::comm_channel_t::comm_agent() и so_4::api::send_msg_safely().

static void so_4::rt::comm::impl::process ( const comm_channel_t &  channel,
const so_4::sop::handshake_info_t req 
) [static]

Обработка инициирования handshake.

Начиная с:
v.4.2.7
v.4.4.0-b4
Транспортному агенту отсылается сообщение msg_sop_client_handshake.

Перекрестные ссылки so_4::rt::comm_channel_t::comm_agent() и so_4::api::send_msg_safely().

static void so_4::rt::comm::impl::process ( const comm_channel_t &  channel,
const so_4::sop::ping_info_t req,
req_info_storage_t &  responses 
) [static]

Обработка ping-запроса.

В ответ отсылается ping-ответ.

static void so_4::rt::comm::impl::process ( const send_msg_info_t *  req,
req_info_storage_t &  responses,
const comm_channel_t &  channel,
const so_4::sop::filter_t server_filter,
const so_4::sop::filter_t filter 
) [static]

v.4.2.6
Ответ на send_msg отсылаем только, если отсылка сообщения прошла неудачно.

Перекрестные ссылки so_4::ret_code_t::m_code.


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:49 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo