Класс so_4::transport_layer::data_processor_t

Граф наследования:so_4::transport_layer::data_processor_t:

so_4::rt::comm::raw_data_processor_t so_4::rt::comm::simple_sop_data_processor_t so_4::rt::comm::sop_with_transformation_data_processor_t

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


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

Интерфейс обработчика входящих и исходящих данных.

Начиная с:
v.4.4.0-b4 Когда контроллер канала извлечет из канала очередную порцию входящих данных, он должен будет каким-то образом отдать их транспортному агенту для дальнейшей обработки. Интерфес input_data_processor_t скрывает от контроллера детали этой операции.
При формировании исходящих данных может потребоваться их преобразование (например, обрамление заголовками SOP-пакетов и zip-ование). Контроллеру канала в этом случае передают исходный пакет данных, который пропускается через data_processor_t и контроллер получает готовые к отправке данные.

Заметки:
Текущая архитектура транспортного слоя вызывает методы process_incoming() и process_outgoing() на контекстах разных нитей. Поэтому, если data_processor нуждается в разделении какой-то информации между этими методами, то он должен обеспечивать внутреннюю синхронизацию.

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

virtual so_4::ret_code_t process_incoming (const void *data, size_t data_size, bool &is_channel_blocked)=0
 Метод для обработки входящих данных.
Методы для подготовки исходящих данных
virtual so_4::ret_code_t append_outgoing_data (const void *what, size_t what_size, oess_1::io::obinstream_t &awaiting, oess_1::io::obinstream_t &outgoing)=0
 Добавление очередной порции исходящих данных.
virtual so_4::ret_code_t make_outgoing_data (const void *what, size_t what_size, oess_1::io::obinstream_t &outgoing)=0
 Выполнение окончательных преобразований ожидающих отправки данных.

Методы

virtual so_4::ret_code_t so_4::transport_layer::data_processor_t::process_incoming ( const void *  data,
size_t  data_size,
bool &  is_channel_blocked 
) [pure virtual]

Метод для обработки входящих данных.

Этот метод вызывается контроллером канала после извлечения из канала очередной порции входящих данных. Метод должен передать транспортному агенту все данные, находящиеся в data.

Аргументы:
data  Буфер с прочитанными данными.
data_size  Объем прочитанных данных.
is_channel_blocked  Оказался ли канал заблокированным после чтения очередной порции. Преобразователь трафика может сбросить этот флаг, если окажется, что было вычитано недостаточно информации для разбора пакета и останавливать чтение на данной стадии нельзя.

Замещается в so_4::rt::comm::raw_data_processor_t, so_4::rt::comm::simple_sop_data_processor_t и so_4::rt::comm::sop_with_transformation_data_processor_t.

virtual so_4::ret_code_t so_4::transport_layer::data_processor_t::append_outgoing_data ( const void *  what,
size_t  what_size,
oess_1::io::obinstream_t &  awaiting,
oess_1::io::obinstream_t &  outgoing 
) [pure virtual]

Добавление очередной порции исходящих данных.

Начиная с:
v.4.4.0-b5 Channel_controller хранит исходящие данные в двух буферах:
  • awaiting, в котором данные накапливаются между операциями write;
  • outgoing, из которого данные записываются в канал во время операции write.
Смысл такого хранения в том, чтобы при необходимости преобразования трафика (например, архивирования) накопить в awaiting некоторый объем мелких пакетов, а затем, непосредственно перед операцией write, преобразовать его в нужный формат и сохранить в outgoing.

Т.е. данные, которые помещаются в awaiting должны подвергаться последущией обработке перед записью. Данные же в outgoing уже полностью готовы к отправке.

Когда channel_controller получает отчередной пакет для отсылки в канал, он вызывает у data_processor метод append_outgoing_data(). Data_processor сам решает, нужно ли использовать awaiting или же данные можно сразу подготовить к записи и сохранить в outgoing. Если данные сохраняются в awaiting, то перед операцией write channel_controller вызовет у data_processor-а метод make_outgoing_data().

Аргументы:
what  Очередная порция данных.
what_size  Размер очередной порции данных.
awaiting  Приемник ожидающих последующего преобразования данных.
outgoing  Приемник готовых к записи данных.

Замещается в so_4::rt::comm::raw_data_processor_t, so_4::rt::comm::simple_sop_data_processor_t и so_4::rt::comm::sop_with_transformation_data_processor_t.

virtual so_4::ret_code_t so_4::transport_layer::data_processor_t::make_outgoing_data ( const void *  what,
size_t  what_size,
oess_1::io::obinstream_t &  outgoing 
) [pure virtual]

Выполнение окончательных преобразований ожидающих отправки данных.

Начиная с:
v.4.4.0-b5 Если у channel_controller перед очередной операцией write что-нибудь находится в буфере ожидающих преобразования данных, то он вызывает у data_processor метод make_outgoing_data(). Этот метод должен преобразовать все данные из буфера ожидающих данных и поместить их в буфер готовых для отправки данных.
После успешного выполнения данной операции channel_controller будет использовать данные из буфера готовых исходящих данных для выполнения операций write.

См. также:
append_outgoing_data().
Аргументы:
what  Ожидающие преобразования данные.
what_size  Размер ожидающих преобразования данных.
outgoing  Приемник преобразованных данных.

Замещается в so_4::rt::comm::raw_data_processor_t, so_4::rt::comm::simple_sop_data_processor_t и so_4::rt::comm::sop_with_transformation_data_processor_t.


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