Реализация подсистемы управления: различия между версиями
Перейти к навигации
Перейти к поиску
(Новая страница: «{{NavBar|{{Системная иерархия:Реализация подсистемы управления}}}}») |
(Точки входа в control.dll давно уже имеют другие имена) |
||
(не показано 37 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{NavBar|{{Системная иерархия:Реализация подсистемы управления}}}} | {{NavBar|{{Системная иерархия:Реализация подсистемы управления}}}} | ||
Проект, реализующий [[подсистема управления|подсистему управления]] - control. | |||
Файл точки входа [[Веб-сервер|Веб-сервера]] - http_callee.cpp. | |||
Обработка любого [[Запросы веб-сервера к подсистеме управления|запроса]] начинается с получения Singleton-экземпляра, с интерфейсом [[control\IControlSystemServerSide|IControlSystemServerSide]], реализации подсистемы с помощью фабрики [[control\IControlFactory|IControlFactory]] и ее статического метода [[IControlFactory::GetControlFactory]]. Интерфейс [[control\IControlSystemServerSide|IControlSystemServerSide]] предоставляет доступ к интерфейсам различных подсистем системы моделирования, которые аггрегируются реализующим классом [[control\CControlSystem|CControlSystem]]. | |||
В зависимости от запроса, поступившего от веб-сервера, функция распаковывает параметры запроса и делегирует вызов соответствующей подсистеме. | |||
=Последовательности действий при обработке запросов со стороны [[Веб-сервер|веб-сервера]]= | |||
==[[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]] код веб-серверу. | |||
=Конфигурация= | |||
См. [[base_config.h]]. | |||
См. [[control\config.h]] | |||
=Интерфейсы= | |||
{| class="wikitable" | |||
|- | |||
! Интерфейс | |||
! Файл | |||
! Описание | |||
|- | |||
| [[INode]] | |||
| domain_interaction.h | |||
| {{INode brief}} | |||
|- | |||
| [[ILoadBalancer]] | |||
| domain_interaction.h | |||
| {{ILoadBalancer brief}} | |||
|- | |||
| [[IControlSystem]] | |||
| domain_interaction.h | |||
| {{IControlSystem brief}} | |||
|- | |||
| [[IControlSystemDomainSide]] | |||
| domain_interaction.h | |||
| {{IControlSystemDomainSide brief}} | |||
|- | |||
| [[IDomainSystem]] | |||
| domain_interaction.h | |||
| {{IDomainSystem brief}} | |||
|- | |||
| [[control\IControlFactory|IControlFactory]] | |||
| control.h | |||
| {{control\IControlFactory brief}} | |||
|- | |||
| [[control\IControlSystemServerSide|IControlSystemServerSide]] | |||
| control.h | |||
| {{IControlSystemServerSide brief}} | |||
|- | |||
| [[IGeometryModel]] | |||
| geometry_model.h | |||
| {{IGeometryModel brief}} | |||
|- | |||
| [[control\IGeometrySystem|IGeometrySystem]] | |||
| geometry_system.h | |||
| {{control\IGeometrySystem brief}} | |||
|- | |||
| [[control\IProxy|IProxy]] | |||
| proxy.h | |||
| {{control\IProxy brief}} | |||
|} | |||
=Классы= | |||
{| class="wikitable" | |||
|- | |||
! Класс | |||
! Файл | |||
! Описание | |||
|- | |||
| [[control\CControlFactory|CControlFactory]] | |||
| control.cpp | |||
| Фабрика основного класса [[control\CControlSystem|CControlSystem]] подсистемы управления. | |||
|- | |||
| [[control\CControlSystem|CControlSystem]] | |||
| control.cpp | |||
| {{control\CControlSystem brief}} | |||
|- | |||
| [[control\CGeometryModel|CGeometryModel]] | |||
| geometr_model.cpp | |||
| {{control\CGeometryModel brief}} | |||
|- | |||
| [[control\CGeometrySystem|CGeometrySystem]] | |||
| geometry_system.cpp | |||
| {{control\CGeometrySystem brief}} | |||
|- | |||
| [[control\CInprocessProxy|CInprocessProxy]] | |||
| inprocess_proxy.cpp | |||
| {{control\CInprocessProxy brief}} | |||
|- | |||
| [[control\CLoadBalancer|CLoadBalancer]] | |||
| lb.cpp | |||
| {{control\CLoadBalancer brief}} | |||
|- | |||
| [[control\CObject|CObject]] | |||
| geometry_model.cpp | |||
| {{control\CObject brief}} | |||
|- | |||
| [[control\CObjectStorage|CObjectStorage]] | |||
| geometry_model.cpp | |||
| {{control\CObjectStorage brief}} | |||
|- | |||
| [[control\CPlainObject|CPlainObject]] | |||
| geometry_model.cpp | |||
| {{control\CPlainObject brief}} | |||
|- | |||
| [[control\CPlainStorage|CPlainStorage]] | |||
| geometry_model.cpp | |||
| {{control\CPlainStorage brief}} | |||
|- | |||
| [[control\CPolyObject|CPolyObject]] | |||
| geometry_model.cpp | |||
| {{control\CPolyObject brief}} | |||
|- | |||
| [[control\CPolyStorage|CPolyStorage]] | |||
| geometry_model.cpp | |||
| {{control\CPolyStorage brief}} | |||
|- | |||
| [[control\CSourceObject|CSourceObject]] | |||
| geometry_model.cpp | |||
| {{control\CSourceObject brief}} | |||
|- | |||
| [[control\CSourceStorage|CSourceStorage]] | |||
| geometry_model.cpp | |||
| {{control\CSourceStorage brief}} | |||
|- | |||
| [[control\CDomainSystemInprocessProxy|CDomainSystemInprocessProxy]] | |||
| domain.cpp | |||
| {{control\CDomainSystemInprocessProxy brief}} | |||
|- | |||
| [[control\CResponseCode|CResponseCode]] | |||
| control.h | |||
| Парсер кода ответа подсистемы предметной области. | |||
|- | |||
| [[control\identity|identity]] | |||
| config.h | |||
| Вспомогательный метатип для анализа свойств типа, указанного параметром. | |||
|- | |||
| [[control\inprocess_proxy_connect_param|inprocess_proxy_connect_param]] | |||
| proxy.h | |||
| Инкапсулирует параметры соединения с экземпляром [[подсистема предметной области|подсистемы предметной области]] при динамической компоновке последней. | |||
|- | |||
| [[control\ip_proxy_connect_param|ip_proxy_connect_param]] | |||
| proxy.h | |||
| Инкапсулирует параметры TCP/IP соединения с экземпляром [[подсистема предметной области|подсистемы предметной области]]. | |||
|- | |||
| [[control\node_compare|node_compare]] | |||
| lb.cpp | |||
| Бинарный предикат выбора более приоритетного узла [[INode]] экземпляра подсистемы предметной области. | |||
|- | |||
| [[control\object_only_packing_service|object_only_packing_service]] | |||
| geometry_model.cpp | |||
| | |||
|- | |||
| [[control\proxy_connect_params|proxy_connect_params]] | |||
| proxy.h | |||
| Обобщенный класс параметров установки коммуникации с экземпляром подсистемы предметной области. | |||
|} | |||
=Глобальные функции= | |||
* [[control\CreateGeometryModel|CreateGeometryModel]] | |||
* [[control\CreateGeometrySystem|CreateGeometrySystem]] | |||
* [[control\CreateInprocessProxy|CreateInprocessProxy]] | |||
* [[control\CreateLoadBalancer|CreateLoadBalancer]] | |||
* [[ControlSystemEntryPoint]] | |||
* [[ControlSystemFreeData]] | |||
* [[control\GetDefaultUniqueName|GetDefaultUniqueName]] | |||
* [[ControlSystemGetErrorDescription]] | |||
* [[control\ReportToLog|ReportToLog]] | |||
* [[ControlSystemSetErrorLogFile]] | |||
* [[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