SObjectizer  5.1
so_5: Механизм слоев

Механизм слоев SObjectizer. so_5: Версия 5.0.0.

Введение

5-ое поколение предполагает развертывание SObjectizer-а не как набора глобальных объектов и свободных функций, а как ядра SObjectizer Environment. Поэтому функциональность SObjectizer-а нельзя расширять путем простого добавления ряда глобальных объектов и свободных функций. Для решения задачи расширения стандартных возможностей SObjectizer в него введен механизм слоев. Слой – это объект, который внедряется в SObjectizer Environment и может доступен из него. Все методы работы со слоями синхронизируются, но о синхронизации обращений к методам слоя должен заботиться прикладной программист.

Слой SObjectizer

Слой SObjectizer должен реализовывать интерфейс so_layer_t. Для этого необходимо перегрузить следующие методы: so_layer_t::start(), so_layer_t::shutdown(), so_layer_t::wait().

start()

Метод служит для инициализации слоя. Реализация в базовом классе ничего не делает. Если для работы слоя необходимо выполнить какие-либо действия для инициализации слоя, то необходимо переопределить so_layer_t::start().

Завершени работы слоя

Завершение работы слоя предусматривает две фазы:

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

shutdown()

Метод служит для инициализации завершения работы слоя. Реализация в базовом классе ничего не делает. В тех случаях, когда завршение слоя связано с выполнением ряда действия, то следует переопредялять so_layer_t::shutdown().

wait()

Метод служит для ожидания завершения слоя. Реализация в базовом классе ничего не делает.

Добавление слоя

В SObjectizer слой можно добавить 2-мя способами. В зависимости от способа добавления слои можно разделить на 2 типа:

Независимо от способа добавлени слоя, любой слой при передаче в SObjectizer Environment будет сначала привязан к so_environment_t, а только затем будет вызван so_layer_t::start(). Это позволит обращаться к SObjectizer Environment из внутрениих методов слоя при помощи so_layer_t::so_environment().

Слои по умолчанию

Слои по умолчанию, добавляются в момент инициализации so_environment_t. Передача слоев происходит при помощи so_environment_params_t.

См. также
so_environment_params_t::add_layer()
Заметки
При завершении работы SObjectizer слои по умолчанию не уничтожаются. При повторном запуске они будут снова запущены вместе SObjectizer Environment. Поэтому при разработке слоя по умолчанию, следует учитывать, что он должен уметь запускаться несколько раз.

Дополнительные слои

Дополнительные слои добавляются во время работы SObjectizer Environment при помощи so_environment_t::add_extra_layer(). Если слой успешно запущен, то он становится слоем SObjectizer и с ним можно Работа со слоем работать.

Заметки
При завершении работы SObjectizer все дополнительные слои после их завершения уничтожаются, и при повторном запуске SObjectizer их необходимо будет добавлять по новой.

Работа со слоем

Доступ к слою осуществляется при помощи шаблонного метода so_environment_t::query_layer():

template< class SO_LAYER >
SO_LAYER *
throwing_strategy_t throwing_strategy = THROW_ON_ERROR ) const;

Параметр SO_LAYER указывает на тип шаблона. В зависимости от параметра throwing_strategy при отсутствии заданного слоя в составе SObjectizer будет выбрашено исключение или возвращен нулевой указатель.

Пример использования слоев sample/so_5/layer/main.cpp


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