Класс so_4::rt::comm::channels_impl::client_connection_t

Граф наследования:so_4::rt::comm::channels_impl::client_connection_t:

so_4::rt::comm::channels_impl::raw_client_connection_t so_4::rt::comm::channels_impl::sop_client_connection_t Полный список членов класса

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

Класс для работы с установленным соединением.

Начиная с:
4.2.4
Берет на себя заботу о буферах ввода/вывода.

4.2.4.3
Является абстрактным базовым типом. Методы append_odata() и parse_ibuf() сделаны чистыми виртуальными, чтобы можно было создавать реализации как для SOP, так и для raw данных.
4.2.6
Добавлен метод in_package_processed(), который производные классы ДОЛЖНЫ вызывать при каждой отсылке сообщения с разобранным из входного потока пакетом.
4.2.6
Подсчитывает объем входящего трафика и контролирует превышение порога. Если порог оказывается превзойденным, то входной поток блокируется до явного вызова метода unblock().
4.2.7
Добавлена поддержка трансформаторов трафика.


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

 client_connection_t (const so_4::rt::comm_channel_t &comm_channel, io_channel_t *phys_channel, unsigned int ibuf_max_size, unsigned int awaiting_obuf_max_size, const threshold_t &in_threshold, const threshold_t &out_threshold)
bool is_readable ()
 Есть ли в канале входящие данные.
so_4::ret_code_t read ()
 Прочитать данные из канала.
virtual so_4::ret_code_t append_odata (const comm_buf_t &data, bool &is_out_threshold_exceeded)=0
 отправки.
so_4::ret_code_t write (unsigned int &bytes_sent)
 Осуществить запись ожидающих отправки данных.
void close_because_error ()
 Закрыть физический канал из-за обнаруженной ошибки.
void close_normal ()
 Закрыть физический канал в нормальном режиме.
void unblock ()
 Разблокировать канал.
void set_traffic_transformator (traffic_transformator_t *tranformator)
 Установить указанный трансформатор трафика.

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

virtual so_4::ret_code_t parse_ibuf ()=0
 входного буфера на пакеты.
bool in_package_processed (unsigned int package_size)
 пакет.
bool out_package_processed (unsigned int package_size)
 очередной пакет.

Защищенные данные

so_4::rt::comm_channel_t m_comm_channel
 соединению.
auto_ptr_3::obj_ptr_t< so_4::rt::comm::io_channel_tm_phys_channel_ptr
 данному соединению.
unsigned int m_ibuf_max_size
 прочитанных, но не разобранных данных.
comm_buf_t m_ibuf
 Буфер ожидающих прочитанных данных.
unsigned int m_awaiting_obuf_max_size
 ожидающих отправки данных.
comm_buf_t m_awaiting_obuf
 Буфер ожидающих отправки данных.
time_t m_notwriteable_start
 Время начала периода недоступности для записи.
threshold_t m_in_threshold
 Порог для входного потока.
threshold_t m_in_traffic_bulk
 Текущий объем входного потока.
threshold_t m_out_threshold
 Порог для выходного потока.
threshold_t m_out_traffic_bulk
 после последнего обращения к методу write.
auto_ptr_3::obj_ptr_t< traffic_transformator_tm_transformator
 Текущий трансформатор трафика.

Закрытые члены

bool is_writeable ()
 Готов ли клиент для записи?
unsigned int query_read_buf_size () const
 Размер буфера для выполнения одной операции чтения.
unsigned int query_write_buf_size () const
 Размер буфера для выполнения одной операции записи.
unsigned int query_max_notwriteable_time () const
 Максимально допустимое время недоступности для записи.
so_4::ret_code_t process_notwriteable_state ()
 Обработка состояния недоступности для записи.
so_4::ret_code_t transform_incoming (const char *what, size_t what_size, size_t &transformed_size)
 Выполнить детрансформацию очередной порции входящих данных.
bool is_outgoing_data_exists () const
 Проверяет наличие готовых исходящих данных.
so_4::ret_code_t make_outgoing_data (const char *&outgoing_data, size_t &outgoing_size)
 Подготовить данные для отсылки.
void clear_outgoing_data (size_t bytes_sent)
 Осуществить очистку тех данных, которые были успешно записаны в физический канал.
so_4::ret_code_t transform_awaiting_obuf ()
 Пропускает через текущий трансформатор все содержимое m_awaiting_obuf.

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

so_4::rt::comm_buf_t m_outgoing_data
 Буфер преобразованных исходящих данных.


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

so_4::rt::comm::channels_impl::client_connection_t::client_connection_t const so_4::rt::comm_channel_t &  comm_channel,
io_channel_t phys_channel,
unsigned int  ibuf_max_size,
unsigned int  awaiting_obuf_max_size,
const threshold_t in_threshold,
const threshold_t out_threshold
 

Аргументы:
comm_channel  Коммуникационный канал SObjectizer-а, который назначен данному подключению.
phys_channel  Физический коммуникационный канал, выделенный подключению. Указатель на динамически созданный объект, который должен быть уничтожен посредством delete.
ibuf_max_size  Максимально допустимый объем буфера прочитанных, но не разобранных данных.
awaiting_obuf_max_size  Максимально допустимый объем буфера ожидающий отправки данных.
in_threshold  Порог для входного потока.
Начиная с:
v.4.2.6
out_threshold  Порог для выходного потока.
Начиная с:
v.4.2.6


Методы

virtual so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::append_odata const comm_buf_t data,
bool &  is_out_threshold_exceeded
[pure virtual]
 

отправки.

v.4.2.4.3
Является чистым виртуальным методом для того, чтобы можно было реализовывать разную обработку как для SOP, так и для raw данных.
v.4.2.6
Добавлен аргумент is_out_threshold_exceeded, который на выходе должен принимать true, если порог наполнения буфера ожидающих данных был привышен и нужно выполнить внеочередную операцию ввода-вывода. В противном случае должен принимать значение false. Для корректного установления значения этого атрибута предназначен вспомогательный метод out_package_processed().
Аргументы:
data  Данные для отправки.
is_out_threshold_exceeded  Был ли превышен порог накопления исходящих данных?
Заметки:
Не должен изменять своего значения в случае возникновения ошибок.

Замещается в so_4::rt::comm::channels_impl::raw_client_connection_t и so_4::rt::comm::channels_impl::sop_client_connection_t.

void so_4::rt::comm::channels_impl::client_connection_t::clear_outgoing_data size_t  bytes_sent  )  [private]
 

Осуществить очистку тех данных, которые были успешно записаны в физический канал.

Начиная с:
v.4.2.7
Аргументы:
bytes_sent  Количество реально записанных в канал байт.

bool so_4::rt::comm::channels_impl::client_connection_t::in_package_processed unsigned int  package_size  )  [protected]
 

пакет.

Начиная с:
v.4.2.6
Базовый класс увеличивает значение m_in_traffic_bulk.

Возвращает:
false, если порог входного потока не превышен. true, если порог входного потока превышен и канал заблокирован до явного вызова unblock().
Аргументы:
package_size  Размер прикладного пакета.

bool so_4::rt::comm::channels_impl::client_connection_t::is_outgoing_data_exists  )  const [private]
 

Проверяет наличие готовых исходящих данных.

Начиная с:
v.4.3.1
Возвращает:
true, если есть данные либо в m_outgouing_data, либо в m_awaiting_obuf.

bool so_4::rt::comm::channels_impl::client_connection_t::is_readable  ) 
 

Есть ли в канале входящие данные.

v.4.2.6
Физическая проверка наличия данных в канале осуществляется только, если !(m_in_threshold.is_exeeded( m_in_traffic_bulk )). В противном случае всегда возвращается false.
Возвращает:
true, если в канале есть данные для чтения. false, если в канале нет данных для чтения или канал заблокирован из-за превышения порога.

bool so_4::rt::comm::channels_impl::client_connection_t::is_writeable  )  [private]
 

Готов ли клиент для записи?

Возвращает:
true, если в сокет можно осуществлять запись.

so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::make_outgoing_data const char *&  outgoing_data,
size_t &  outgoing_size
[private]
 

Подготовить данные для отсылки.

Начиная с:
v.4.2.7
Выполнить трансформацию очередной порции данных из m_awaiting_obuf.

Возвращает:
so_4::rt::comm::success, если данные были преобразованы успешно.
Аргументы:
outgoing_data  Приемник указателя на буфер, из которого можно извлекать подготовленные для отсылки данные.
outgoing_size  Приемник размера получившихся в результате трансформации данных.

bool so_4::rt::comm::channels_impl::client_connection_t::out_package_processed unsigned int  package_size  )  [protected]
 

очередной пакет.

Начиная с:
v.4.2.6
Базовый класс увеличивает значение m_out_traffic_bulk.

Возвращает:
false, если порог накопления исходящих данных не превышен. true, если порог накопления исходящих данных превышен и необходимо выполнить внеочередную операцию ввода-вывода.
Аргументы:
package_size  Размер прикладного пакета.

virtual so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::parse_ibuf  )  [protected, pure virtual]
 

входного буфера на пакеты.

v.4.2.4.3
Является чистым виртуальным методом для того, чтобы можно было реализовывать разную обработку как для SOP, так и для raw данных.
v.4.2.6
Должен устанавливать значение поля msg_sop_package::m_is_blocked (msg_raw_package::m_is_blocked) и, если канал оказывается заблокированным, дожен прекратить разбор входного буфера.

Замещается в so_4::rt::comm::channels_impl::raw_client_connection_t и so_4::rt::comm::channels_impl::sop_client_connection_t.

so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::process_notwriteable_state  )  [private]
 

Обработка состояния недоступности для записи.

Вызывается каждый раз, когда метод write() обнаруживает, что канал недоступен для записи. Если обнаруживается, что канал недоступен для записи более query_max_notwriteable_time() секунд, то возвращается значение notwriteable_timeout.

unsigned int so_4::rt::comm::channels_impl::client_connection_t::query_max_notwriteable_time  )  const [private]
 

Максимально допустимое время недоступности для записи.

В секундах.

so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::read  ) 
 

Прочитать данные из канала.

Если данные прочитаны, то производится попытка их разбора на отдельные пакеты. Каждый отдельный пакет отсылается главному агенту коммуникатору сообщением so_4::rt::comm::msg_sop_package.

Возвращает:
so_4::rt::comm::success, если операция чтения завершилась успешно.

void so_4::rt::comm::channels_impl::client_connection_t::set_traffic_transformator traffic_transformator_t tranformator  ) 
 

Установить указанный трансформатор трафика.

Начиная с:
v.4.2.7
Предыдущий трансформатор, если был, уничтожается.
Аргументы:
tranformator  Указатель на динамически созданный объект, который будет автоматически удален посредством delete.

so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::transform_awaiting_obuf  )  [private]
 

Пропускает через текущий трансформатор все содержимое m_awaiting_obuf.

Начиная с:
v.4.3.1
Возвращает:
код возврата метода traffic_transformator_t::out_transform().

so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::transform_incoming const char *  what,
size_t  what_size,
size_t &  transformed_size
[private]
 

Выполнить детрансформацию очередной порции входящих данных.

Начиная с:
v.4.2.7
Вызывается сразу после очередной порции входящих данных из физического канала. Полученные после детрансформации данные помещаются в m_ibuf для того, чтобы их смог обработать метод parse_ibuf().

Возвращает:
so_4::rt::comm::success, если данные были преобразованы успешно.
Аргументы:
what  Что должно быть преобразовано.
what_size  Объем подлежащих преобразованию данных.
transformed_size  Получившийся в результате детрансформации объем. Может принимать значение 0, если трансформатору этой порции данных оказалось недостаточно и нужно дождаться очередной порции входящих данных. Если этот параметр получает значение 0, то метод parse_ibuf() вызываться не должен.

void so_4::rt::comm::channels_impl::client_connection_t::unblock  ) 
 

Разблокировать канал.

Начиная с:
v.4.2.6
Обнуляется m_in_traffic_bulk. После чего вызвается метод parse_ibuf().

so_4::ret_code_t so_4::rt::comm::channels_impl::client_connection_t::write unsigned int &  bytes_sent  ) 
 

Осуществить запись ожидающих отправки данных.

Если в буфере ожидающих отправки данных есть данные, то отсылаются первые N байт из них.

Аргументы:
bytes_sent  Сколько всего данных было отослано.


Данные класса

threshold_t so_4::rt::comm::channels_impl::client_connection_t::m_in_threshold [protected]
 

Порог для входного потока.

Начиная с:
v.4.2.6
После превышения этого порога входной поток блокируется до явного вызова метода unblock().

threshold_t so_4::rt::comm::channels_impl::client_connection_t::m_in_traffic_bulk [protected]
 

Текущий объем входного потока.

Начиная с:
v.4.2.6
Объем входного потока после последней разблокировки входного потока.

time_t so_4::rt::comm::channels_impl::client_connection_t::m_notwriteable_start [protected]
 

Время начала периода недоступности для записи.

Значение 0 означает, что канал доступен для записи.

threshold_t so_4::rt::comm::channels_impl::client_connection_t::m_out_threshold [protected]
 

Порог для выходного потока.

Начиная с:
v.4.2.6
После превышения этого порога выставляется признак необходимости проведения внеочередной операции ввода-вывода.

threshold_t so_4::rt::comm::channels_impl::client_connection_t::m_out_traffic_bulk [protected]
 

после последнего обращения к методу write.

Начиная с:
v.4.2.6
Всегда сбрасывается методом write(), даже если в канал ничего не было записано.

so_4::rt::comm_buf_t so_4::rt::comm::channels_impl::client_connection_t::m_outgoing_data [private]
 

Буфер преобразованных исходящих данных.

Начиная с:
v.4.3.1
В этот буфер помещаются результаты преобразования данных трансформаторами и отсюда беруться данные для их физической записи в канал.

auto_ptr_3::obj_ptr_t< traffic_transformator_t > so_4::rt::comm::channels_impl::client_connection_t::m_transformator [protected]
 

Текущий трансформатор трафика.

Начиная с:
v.4.2.7
v.4.3.1
Не может быть нулем. По-умолчанию, содержит указатель на null_transformator_t.


Документация по SObjectizer. Последние изменения: Thu Jan 12 10:52:51 2006. Создано системой  doxygen 1.4.6-NO
Hosted by uCoz