FFL  1.0
Finfly Foundation Library
Открытые члены | Открытые статические члены | Открытые атрибуты | Статические открытые данные | Защищенные члены | Защищенные данные | Закрытые статические члены | Закрытые данные
Класс ffl::cssc::multithreaded::server::processor

Обработчик. Подробнее...

Производные классы:server::processor и service::server::processor.

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

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

void enqueue (signal::tag _t) throw (...)
void enqueue (signal::tag _t, client *_c) throw (...)
void dequeue (signal &_s) throw (...)
signal::tag do_authorize (client *_c) throw (...)
signal::tag do_request (client *_c) throw (...)
 Действие по обработке запроса.
 processor (server &_server, const char *_log) throw (...)
bool inactive () throw ()
void cancel () throw ()

Открытые статические члены

static processorself () throw ()
 Получить указатель на обработчика текущего потока.

Открытые атрибуты

std::auto_ptr< ipc::socketProcessor
 Сигнальный сокет обработчика.
std::auto_ptr< ipc::socketDispatcher
 Сигнальный сокет диспетчера.
int QueueSize
 Оценка размера очереди обработчика.
logbook Log
 Журнал обработчика.

Статические открытые данные

static const long IOTimeout = 1000
 Время ожидения ввода/вывода данных для клиентского соединения.

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

int run () throw ()
virtual void idle () throw ()
virtual userauthorize (const char *_name, const char *_pass) throw (...)
virtual void process (user &_u, request &_r) throw (...)
 Обработать запрос клиента.
virtual void trace_exception (const user &_u) throw ()
 Трассировать исключительную ситуацию.
void checkpoint () throw (...)
 Подтвердить продолжение выполения запроса в контрольной точке.

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

serverServer

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

static __declspec (thread) processor *Self
 Указатель на класс обработчика для статических функций.

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

clientClient
 Контекст клиента.

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

Обработчик.


Методы

static ffl::cssc::multithreaded::server::processor::__declspec ( thread  ) [static, private]

Указатель на класс обработчика для статических функций.

Статическая локальная для потока переменная, которая может использоваться функциями, где невозможно получить доступ к текущему обработчику через параметры. Переменная доступна только для чтения и не должна меняться потоком.

void server::processor::checkpoint ( ) throw (...) [protected]

Подтвердить продолжение выполения запроса в контрольной точке.

Обработчик должен периодически вызывать этот метод для запросов, которые требуют длительного времени выполнения. Это позволит клиенту принять решение о продолжении выполнения или о его прекращении. Клиенту отправляется запрос прохождения контрольной точки (сообщение с тегом cssc::CHECKPOINT). В ответ клиент должен отправить одно из сообщений:

  • cssc::BREAK - прекратить выполнение;
  • cssc::CONTINUE - возобновить выполнение. В случае получения сообщения о прекращении выполнения запроса метод вызывает исключительную ситуацию cssc::failure с сообщением об ошибке SERV:0002:Processing interrupted. Это сообщение об ошибке возвращается клиенту как результат выполнения запроса. В случае продолжения выполнения, обработчик продолжает работу до следующей контрольной точки.

Метод должен вызываться только при обработке запроса из метода processor::process. В этом случае установлен контекст клиента, для которого обрабатывается запрос. В других случаях результат вызова не определен.

Исключения:
cssc::failureПрерывание запроса.
server::signal::tag server::processor::do_request ( client _c) throw (...)

Действие по обработке запроса.

Действие, которое выполняет обработчик для авторизованного соединения при поступлении данных. В этом случае предполагается, что клиент передает серверу объект cssc::request, который обработчик считывает из потока соединения и передает в виртуальный метод process для обработки производным классом. В случае успешного завершения обработки выходные параметры запроса возвращаются клиенту. Если метод process вернул исключительную ситуацию cssc::failure, то она возвращается клиенту. В этом случае обработка запроса считается успешно завершенной (с точки сзения сервера).

Аргументы:
[in]_cУказатель на соединение.
Исключения:
std::exceptionОшибка ввода/вывода или прочие ошибки.
virtual void ffl::cssc::multithreaded::server::processor::process ( user _u,
request _r 
) throw (...) [inline, protected, virtual]

Обработать запрос клиента.

Метод выполняет обработку запроса, полученного от клиента. Производный класс должен переопределять этот метод для реализации обработки запросов.

Аргументы:
[in]_uКонтекст пользователя.
[in]_rЗапрос.
Исключения:
ffl::cssc::failureИсключительная ситуация обработки запроса.
static processor* ffl::cssc::multithreaded::server::processor::self ( ) throw () [inline, static]

Получить указатель на обработчика текущего потока.

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

virtual void ffl::cssc::multithreaded::server::processor::trace_exception ( const user _u) throw () [inline, protected, virtual]

Трассировать исключительную ситуацию.

Метод вызывается при возникновении исключительной ситуации в ходе выполнения действия (запроса, авторизации). Может использоваться производным классом для добавления в журнал информации из контекста пользователя. Метод вызывается сразу после записи в журнал обработчика информации об адресе клиента и текста исключительной ситуации.

Аргументы:
[in]_uКонтекст пользователя.
[in]_xИсключительная ситуация.

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

Контекст клиента.

Контекст клиента существует только в момент обработки запроса (при выполнении метода processor::process). В других случаях контекст не определен.

Сигнальный сокет диспетчера.

Используется обработчиком для получения и передачи управляющих сигналов диспетчеру (см. #signal).

Журнал обработчика.

При создании обработчика для него открывается журнал, куда должны записываться трассировочные сообщения. Каждый обработчик имеет собственный файл журнала. Имя файла жернала указывается в конструкторе обработчика.

Сигнальный сокет обработчика.

Используется диспетчером для передачи и получения управляющих сигналов обработчику (cм #signal).

Оценка размера очереди обработчика.

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


Объявления и описания членов классов находятся в файлах:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Макросы