Реализация подсистемы управления
Перейти к навигации
Перейти к поиску
Проект, реализующий подсистему управления - control.
Файл точки входа Веб-сервера - http_callee.cpp.
Обработка любого запроса начинается с получения Singleton-экземпляра, с интерфейсом IControlSystemServerSide, реализации подсистемы с помощью фабрики IControlFactory и ее статического метода IControlFactory::GetControlFactory. Интерфейс IControlSystemServerSide предоставляет доступ к интерфейсам различных подсистем системы моделирования, которые аггрегируются реализующим классом CControlSystem.
В зависимости от запроса, поступившего от веб-сервера, функция распаковывает параметры запроса и делегирует вызов соответствующей подсистеме.
Последовательности действий при обработке запросов со стороны веб-сервера
CreateModelId
- Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
- Через обращение к объекту control\CControlSystem получить доступ control\IGeometrySystem к подсистеме геометрического моделирования control\CGeometrySystem.
- Используя полученный экземпляр control\CGeometrySystem, создать экземпляр геометрической модели control\CGeometryModel.
- Запросить у созданной геометрической модели ее имя и вернуть его веб-серверу в качестве выходного параметра pPackedOutputParams функции ControlSystemEntryPoint.
- Вернуть код ошибки 0.
- В случае возникновения ошибки на любом этапе, преобразовать ее в тип control\return_code_t и вернуть веб-серверу.
CreateObjectId
- Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
- Через обращение к объекту control\CControlSystem получить доступ control\IGeometrySystem к подсистеме геометрического моделирования control\CGeometrySystem.
- Извлечь из параметров запроса CreateObjectId имя геометрической модели среды моделируемого поля, в которой создается новый элемент.
- Обращаясь к подсистеме геометрического моделирования с извлеченным именем, получить экземпляр геометрической модели.
- Получить доступ к коллекции control\CObjectStorage всех элементов геометрической модели.
- Создать в этой коллекции новый элемент.
- Получить имя созданного объекта и вернуть его веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
- Вернуть код ошибки 0.
- В случае возникновения ошибки на любом этапе, преобразовать ее в тип control\return_code_t и вернуть веб-серверу.
StartSimulationId
- Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
- Через обращение к объекту control\CControlSystem получить адрес control\IGeometrySystem подсистемы геометрического моделирования control\CGeometrySystem.
- Извлечь из параметров запроса CreateObjectId имя геометрической модели среды моделируемого поля, в которой создается новый элемент.
- Обращаясь к подсистеме геометрического моделирования с извлеченным именем, получить экземпляр геометрической модели, над которой планируется выполнить моделирования физического поля.
- Используя ссылку на экземпляр control\CControlSystem запустить процедуру моделирования, указав в качестве параметра имя экземпляра подсистемы предметной области, в которой должно выполняться моделирование, и получив при этом имя процесса моделирования.
- Вернуть имя веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
- Вернуть код ошибки 0.
- В случае возникновения ошибки на любом этапе, преобразовать ее в тип control\return_code_t и вернуть веб-серверу.
GetProcessStatusId
- Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
- Извлечь из параметров запроса имя процесса моделирования и, обращаясь к экземпляру control\CControlSystem, получить экземпляр класса control\CDomainSystem с интерфейсом IDomainSystem.
- Запросить у control\CDomainSystem статус процесса.
- Вернуть статус веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
- Вернуть код ошибки 0.
- В случае возникновения ошибки на любом этапе, вернуть ее control\return_code_t код веб-серверу.
GetSimulationResultsId
- Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
- Извлечь из параметров запроса имя процесса моделирования и, обращаясь к экземпляру control\CControlSystem, получить экземпляр класса control\CDomainSystem с интерфейсом IDomainSystem.
- Запросить у control\CDomainSystem размер результатов моделирования.
- Выделить память полученного объема, запросить у control\CDomainSystem результаты моделирования с записью их в выделенный буфер.
- Вернуть выделенный буфер веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
- Вернуть код ошибки 0.
- В случае возникновения ошибки на любом этапе, вернуть ее control\return_code_t код веб-серверу.
CloseSimulationId
- Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
- Извлечь из параметров запроса имя процесса моделирования.
- Через обращщение к control\CControlSystem выполнить закрытие процесса моделирования с извлеченным именем.
- Вернуть 0 через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
- Вернуть код ошибки 0.
- В случае возникновения ошибки на любом этапе, вернуть ее control\return_code_t код веб-серверу.
Конфигурация
См. base_config.h.
См. control\config.h
Интерфейсы
Интерфейс | Файл | Описание |
---|---|---|
INode | domain_interaction.h | Программный интерфейс, реализуемый узлом подсистемы предметной области и предоставляющий подсистеме управления методы для управления вычислительной нагрузкой, которая подается на узел. Физически может быть ассоциирован с вычислительным кластером (для реализации с локальным балансировщиком) либо с потоком на логическом ядре центрального процессора. |
ILoadBalancer | domain_interaction.h | Программный интерфейс, предоставляемый подсистемой управления для подсистемы предметной области. Предоставляет методы для регистрации задачи, которая должна быть выполнена как элемент параллельных вычислений, а также для регистрации свободного узла INode. |
IControlSystem | domain_interaction.h | Базовый интерфейс подсистемы управления. |
IControlSystemDomainSide | domain_interaction.h | Интерфейс, предоставляемый подсистеме предметной области, для установки соединения с подсистемой управления, а также для получения доступа к ее балансировщикам нагрузки. |
IDomainSystem | domain_interaction.h | Основной программный интерфейс экземпляра подсистемы предметной области. |
IControlFactory | control.h | Интерфейс фабрики экземпляров класса CControlSystem. |
IControlSystemServerSide | control.h | Интерфейс подсистемы управления для доступа со стороны компонентов подсистемы управления. |
IGeometryModel | geometry_model.h | Интерфейс геометрической модели среды моделируемого физического поля. |
IGeometrySystem | geometry_system.h | Интерфейс реализации подсистемы геометрического моделирования. |
IProxy | proxy.h | Полиморфный интерфейс прокси-сервера подсистемы предметной области на стороне подсистемы управления. |
Классы
Класс | Файл | Описание |
---|---|---|
CControlFactory | control.cpp | Фабрика основного класса CControlSystem подсистемы управления. |
CControlSystem | control.cpp | Класс, реализующий основные функции подсистемы управления. Всегда существует в единственном экземпляре. Доступ к методам осуществляется через интерфейсы IControlSystem, IControlSystemServerSide и IControlSystemDomainSide. |
CGeometryModel | geometr_model.cpp | Класс предметно-независимого описания геометрической модели среды распространения физического поля, используемый подсистемой управления. |
CGeometrySystem | geometry_system.cpp | Реализует подсистему геометрического моделирования и действует как фабрика и буфер экземпляров CGeometryModel. |
CInprocessProxy | inprocess_proxy.cpp | Реализует взаимодействие с внутрипроцессным сервером подсистемы предметной области через интерфейс IProxy. |
CLoadBalancer | lb.cpp | Реализует глобальный балансировщик нагрузки подсистемы управления, экземпляры которого создаются индивидуально для каждого экземпляра подсистемы предметной области. |
CObject | geometry_model.cpp | Обобщающий метатип с кастомизируемым программным интефейсом для элементов геометрической модели среды распространения моделируемого физического поля. |
CObjectStorage | geometry_model.cpp | Класс, имеющий семантику контейнера всех элементов геометрической модели среды распространения физического поля. |
CPlainObject | geometry_model.cpp | Реализация секущей плоскости вывода результатов моделирования. |
CPlainStorage | geometry_model.cpp | Реализует коллекцию секущих плоскостей вывода результатов моделирования. |
CPolyObject | geometry_model.cpp | Реализация полигонального элемента геометрической модели среды моделируемого поля. |
CPolyStorage | geometry_model.cpp | Реализация коллекции полигональных элементов модели среды распространения физического поля. |
CSourceObject | geometry_model.cpp | Общая реализация источника моделируемого физического поля. |
CSourceStorage | geometry_model.cpp | Реализация коллекции источников моделируемого физического поля. |
CDomainSystemInprocessProxy | domain.cpp | Перенаправляет вызовы методов интерфейса IDomainSystem со стороны подсистемы управления в виде запросов подсистеме предметной области |
CResponseCode | control.h | Парсер кода ответа подсистемы предметной области. |
identity | config.h | Вспомогательный метатип для анализа свойств типа, указанного параметром. |
inprocess_proxy_connect_param | proxy.h | Инкапсулирует параметры соединения с экземпляром подсистемы предметной области при динамической компоновке последней. |
ip_proxy_connect_param | proxy.h | Инкапсулирует параметры TCP/IP соединения с экземпляром подсистемы предметной области. |
node_compare | lb.cpp | Бинарный предикат выбора более приоритетного узла INode экземпляра подсистемы предметной области. |
object_only_packing_service | geometry_model.cpp | |
proxy_connect_params | proxy.h | Обобщенный класс параметров установки коммуникации с экземпляром подсистемы предметной области. |
Глобальные функции
- CreateGeometryModel
- CreateGeometrySystem
- CreateInprocessProxy
- CreateLoadBalancer
- ControlSystemEntryPoint
- ControlSystemFreeData
- GetDefaultUniqueName
- ControlSystemGetErrorDescription
- ReportToLog
- ControlSystemSetErrorLogFile
- to_utf8