Реализация подсистемы управления: различия между версиями
Перейти к навигации
Перейти к поиску
(Точки входа в control.dll давно уже имеют другие имена) |
|||
(не показано 28 промежуточных версий этого же участника) | |||
Строка 8: | Строка 8: | ||
В зависимости от запроса, поступившего от веб-сервера, функция распаковывает параметры запроса и делегирует вызов соответствующей подсистеме. | В зависимости от запроса, поступившего от веб-сервера, функция распаковывает параметры запроса и делегирует вызов соответствующей подсистеме. | ||
=Последовательности действий при обработке запросов со стороны [[Веб-сервер|веб-сервера]]= | |||
==[[CreateModelId]]== | |||
# Через интерфейс [[control\IControlFactory|IControlFactory]] получить singleton-реализацию [[control\CControlSystem]] подсистемы управления. | |||
# Через обращение к объекту [[control\CControlSystem]] получить доступ [[control\IGeometrySystem]] к подсистеме геометрического моделирования [[control\CGeometrySystem]]. | |||
# Используя полученный экземпляр [[control\CGeometrySystem]], создать экземпляр геометрической модели [[control\CGeometryModel]]. | |||
# Запросить у созданной геометрической модели ее имя и вернуть его веб-серверу в качестве выходного параметра <tt>pPackedOutputParams</tt> функции [[ControlSystemEntryPoint]]. | |||
# Вернуть код ошибки 0. | |||
# В случае возникновения ошибки на любом этапе, преобразовать ее в тип [[control\return_code_t]] и вернуть веб-серверу. | |||
==[[CreateObjectId]]== | |||
# Через интерфейс [[control\IControlFactory|IControlFactory]] получить singleton-реализацию [[control\CControlSystem]] подсистемы управления. | |||
# Через обращение к объекту [[control\CControlSystem]] получить доступ [[control\IGeometrySystem]] к подсистеме геометрического моделирования [[control\CGeometrySystem]]. | |||
# Извлечь из параметров запроса [[CreateObjectId]] имя геометрической модели среды моделируемого поля, в которой создается новый элемент. | |||
# Обращаясь к подсистеме геометрического моделирования с извлеченным именем, получить экземпляр геометрической модели. | |||
# Получить доступ к коллекции [[control\CObjectStorage]] всех элементов геометрической модели. | |||
# Создать в этой коллекции новый элемент. | |||
# Получить имя созданного объекта и вернуть его веб-серверу через выходной параметр <tt>pPackedOutputParams</tt> функции [[ControlSystemEntryPoint]]. | |||
# Вернуть код ошибки 0. | |||
# В случае возникновения ошибки на любом этапе, преобразовать ее в тип [[control\return_code_t]] и вернуть веб-серверу. | |||
==[[StartSimulationId]]== | |||
# Через интерфейс [[control\IControlFactory|IControlFactory]] получить singleton-реализацию [[control\CControlSystem]] подсистемы управления. | |||
# Через обращение к объекту [[control\CControlSystem]] получить адрес [[control\IGeometrySystem]] подсистемы геометрического моделирования [[control\CGeometrySystem]]. | |||
# Извлечь из параметров запроса [[CreateObjectId]] имя геометрической модели среды моделируемого поля, в которой создается новый элемент. | |||
# Обращаясь к подсистеме геометрического моделирования с извлеченным именем, получить экземпляр геометрической модели, над которой планируется выполнить моделирования физического поля. | |||
# Используя ссылку на экземпляр [[control\CControlSystem]] запустить процедуру моделирования, указав в качестве параметра имя экземпляра подсистемы предметной области, в которой должно выполняться моделирование, и получив при этом имя процесса моделирования. | |||
# Вернуть имя веб-серверу через выходной параметр <tt>pPackedOutputParams</tt> функции [[ControlSystemEntryPoint]]. | |||
# Вернуть код ошибки 0. | |||
# В случае возникновения ошибки на любом этапе, преобразовать ее в тип [[control\return_code_t]] и вернуть веб-серверу. | |||
==[[GetProcessStatusId]]== | |||
# Через интерфейс [[control\IControlFactory|IControlFactory]] получить singleton-реализацию [[control\CControlSystem]] подсистемы управления. | |||
# Извлечь из параметров запроса имя процесса моделирования и, обращаясь к экземпляру [[control\CControlSystem]], получить экземпляр класса [[control\CDomainSystem]] с интерфейсом [[IDomainSystem]]. | |||
# Запросить у [[control\CDomainSystem]] статус процесса. | |||
# Вернуть статус веб-серверу через выходной параметр <tt>pPackedOutputParams</tt> функции [[ControlSystemEntryPoint]]. | |||
# Вернуть код ошибки 0. | |||
# В случае возникновения ошибки на любом этапе, вернуть ее [[control\return_code_t]] код веб-серверу. | |||
==[[GetSimulationResultsId]]== | |||
# Через интерфейс [[control\IControlFactory|IControlFactory]] получить singleton-реализацию [[control\CControlSystem]] подсистемы управления. | |||
# Извлечь из параметров запроса имя процесса моделирования и, обращаясь к экземпляру [[control\CControlSystem]], получить экземпляр класса [[control\CDomainSystem]] с интерфейсом [[IDomainSystem]]. | |||
# Запросить у [[control\CDomainSystem]] размер результатов моделирования. | |||
# Выделить память полученного объема, запросить у [[control\CDomainSystem]] результаты моделирования с записью их в выделенный буфер. | |||
# Вернуть выделенный буфер веб-серверу через выходной параметр <tt>pPackedOutputParams</tt> функции [[ControlSystemEntryPoint]]. | |||
# Вернуть код ошибки 0. | |||
# В случае возникновения ошибки на любом этапе, вернуть ее [[control\return_code_t]] код веб-серверу. | |||
==[[CloseSimulationId]]== | |||
# Через интерфейс [[control\IControlFactory|IControlFactory]] получить singleton-реализацию [[control\CControlSystem]] подсистемы управления. | |||
# Извлечь из параметров запроса имя процесса моделирования. | |||
# Через обращщение к [[control\CControlSystem]] выполнить закрытие процесса моделирования с извлеченным именем. | |||
# Вернуть 0 через выходной параметр <tt>pPackedOutputParams</tt> функции [[ControlSystemEntryPoint]]. | |||
# Вернуть код ошибки 0. | |||
# В случае возникновения ошибки на любом этапе, вернуть ее [[control\return_code_t]] код веб-серверу. | |||
=Конфигурация= | =Конфигурация= | ||
Строка 33: | Строка 95: | ||
| [[IControlSystem]] | | [[IControlSystem]] | ||
| domain_interaction.h | | domain_interaction.h | ||
| {{IControlSystem | | {{IControlSystem brief}} | ||
|- | |- | ||
| [[IControlSystemDomainSide]] | | [[IControlSystemDomainSide]] | ||
Строка 45: | Строка 107: | ||
| [[control\IControlFactory|IControlFactory]] | | [[control\IControlFactory|IControlFactory]] | ||
| control.h | | control.h | ||
| | | {{control\IControlFactory brief}} | ||
|- | |- | ||
| [[control\IControlSystemServerSide|IControlSystemServerSide]] | | [[control\IControlSystemServerSide|IControlSystemServerSide]] | ||
| control.h | | control.h | ||
| {{IControlSystemServerSide brief}} | | {{IControlSystemServerSide brief}} | ||
|- | |||
| [[IGeometryModel]] | |||
| geometry_model.h | |||
| {{IGeometryModel brief}} | |||
|- | |- | ||
| [[control\IGeometrySystem|IGeometrySystem]] | | [[control\IGeometrySystem|IGeometrySystem]] | ||
| geometry_system.h | | geometry_system.h | ||
| | | {{control\IGeometrySystem brief}} | ||
|- | |- | ||
| [[control\IProxy|IProxy]] | | [[control\IProxy|IProxy]] | ||
| proxy.h | | proxy.h | ||
| | | {{control\IProxy brief}} | ||
|} | |} | ||
Строка 74: | Строка 140: | ||
| [[control\CControlSystem|CControlSystem]] | | [[control\CControlSystem|CControlSystem]] | ||
| control.cpp | | control.cpp | ||
| | | {{control\CControlSystem brief}} | ||
|- | |- | ||
| [[control\CGeometryModel|CGeometryModel]] | | [[control\CGeometryModel|CGeometryModel]] | ||
| geometr_model.cpp | | geometr_model.cpp | ||
| | | {{control\CGeometryModel brief}} | ||
|- | |- | ||
| [[control\ | | [[control\CGeometrySystem|CGeometrySystem]] | ||
| geometry_system.cpp | | geometry_system.cpp | ||
| | | {{control\CGeometrySystem brief}} | ||
|- | |- | ||
| [[control\CInprocessProxy|CInprocessProxy]] | | [[control\CInprocessProxy|CInprocessProxy]] | ||
| inprocess_proxy.cpp | | inprocess_proxy.cpp | ||
| | | {{control\CInprocessProxy brief}} | ||
|- | |- | ||
| [[control\CLoadBalancer|CLoadBalancer]] | | [[control\CLoadBalancer|CLoadBalancer]] | ||
| lb.cpp | | lb.cpp | ||
| | | {{control\CLoadBalancer brief}} | ||
|- | |- | ||
| [[control\CObject|CObject]] | | [[control\CObject|CObject]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CObject brief}} | ||
|- | |- | ||
| [[control\CObjectStorage|CObjectStorage]] | | [[control\CObjectStorage|CObjectStorage]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CObjectStorage brief}} | ||
|- | |- | ||
| [[control\CPlainObject|CPlainObject]] | | [[control\CPlainObject|CPlainObject]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CPlainObject brief}} | ||
|- | |- | ||
| [[control\CPlainStorage|CPlainStorage]] | | [[control\CPlainStorage|CPlainStorage]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CPlainStorage brief}} | ||
|- | |- | ||
| [[control\CPolyObject|CPolyObject]] | | [[control\CPolyObject|CPolyObject]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CPolyObject brief}} | ||
|- | |- | ||
| [[control\CPolyStorage|CPolyStorage]] | | [[control\CPolyStorage|CPolyStorage]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CPolyStorage brief}} | ||
|- | |- | ||
| [[control\CSourceObject|CSourceObject]] | | [[control\CSourceObject|CSourceObject]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CSourceObject brief}} | ||
|- | |- | ||
| [[control\CSourceStorage|CSourceStorage]] | | [[control\CSourceStorage|CSourceStorage]] | ||
| geometry_model.cpp | | geometry_model.cpp | ||
| | | {{control\CSourceStorage brief}} | ||
|- | |- | ||
| [[control\ | | [[control\CDomainSystemInprocessProxy|CDomainSystemInprocessProxy]] | ||
| domain.cpp | | domain.cpp | ||
| | | {{control\CDomainSystemInprocessProxy brief}} | ||
|- | |||
| [[control\CResponseCode|CResponseCode]] | |||
| control.h | |||
| Парсер кода ответа подсистемы предметной области. | |||
|- | |- | ||
| [[control\identity|identity]] | | [[control\identity|identity]] | ||
Строка 159: | Строка 229: | ||
* [[control\CreateInprocessProxy|CreateInprocessProxy]] | * [[control\CreateInprocessProxy|CreateInprocessProxy]] | ||
* [[control\CreateLoadBalancer|CreateLoadBalancer]] | * [[control\CreateLoadBalancer|CreateLoadBalancer]] | ||
* [[ | * [[ControlSystemEntryPoint]] | ||
* [[ | * [[ControlSystemFreeData]] | ||
* [[control\GetDefaultUniqueName|GetDefaultUniqueName]] | * [[control\GetDefaultUniqueName|GetDefaultUniqueName]] | ||
* [[ | * [[ControlSystemGetErrorDescription]] | ||
* [[control\ReportToLog|ReportToLog]] | * [[control\ReportToLog|ReportToLog]] | ||
* [[ | * [[ControlSystemSetErrorLogFile]] | ||
* [[control\to_utf8|to_utf8]] | * [[control\to_utf8|to_utf8]] | ||
=Файлы= | =Файлы= |
Текущая версия на 18:51, 4 июня 2019
Проект, реализующий подсистему управления - 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