Реализация подсистемы управления: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
(Точки входа в control.dll давно уже имеют другие имена)
 
(не показаны 34 промежуточные версии этого же участника)
Строка 5: Строка 5:
Файл точки входа [[Веб-сервер|Веб-сервера]] - http_callee.cpp.
Файл точки входа [[Веб-сервер|Веб-сервера]] - http_callee.cpp.


Обработка любого [[Запросы веб-сервера к подсистеме управления|запроса]] начинается с получения Singleton-экземпляра, с интерфейсом [[control\IControlSystemServerSide|IControlSystemServerSide]], реализации подсистемы с помощью фабрики [[control\IControlFactory|IControlFactory]] и ее статического метода [[IControlFactory::GetControlFactory]]. Интерфейс [[control\IControlSystemServerSide|IControlSystemServerSide]] предоставляет доступ к интерфейсам различных подсистем системы моделирования, которые аггругируются реализующим классом [[control\CControlSystem|CControlSystem]].
Обработка любого [[Запросы веб-сервера к подсистеме управления|запроса]] начинается с получения 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]] код веб-серверу.


=Конфигурация=
=Конфигурация=
Строка 14: Строка 76:


См. [[control\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

  1. Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
  2. Через обращение к объекту control\CControlSystem получить доступ control\IGeometrySystem к подсистеме геометрического моделирования control\CGeometrySystem.
  3. Используя полученный экземпляр control\CGeometrySystem, создать экземпляр геометрической модели control\CGeometryModel.
  4. Запросить у созданной геометрической модели ее имя и вернуть его веб-серверу в качестве выходного параметра pPackedOutputParams функции ControlSystemEntryPoint.
  5. Вернуть код ошибки 0.
  6. В случае возникновения ошибки на любом этапе, преобразовать ее в тип control\return_code_t и вернуть веб-серверу.

CreateObjectId

  1. Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
  2. Через обращение к объекту control\CControlSystem получить доступ control\IGeometrySystem к подсистеме геометрического моделирования control\CGeometrySystem.
  3. Извлечь из параметров запроса CreateObjectId имя геометрической модели среды моделируемого поля, в которой создается новый элемент.
  4. Обращаясь к подсистеме геометрического моделирования с извлеченным именем, получить экземпляр геометрической модели.
  5. Получить доступ к коллекции control\CObjectStorage всех элементов геометрической модели.
  6. Создать в этой коллекции новый элемент.
  7. Получить имя созданного объекта и вернуть его веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
  8. Вернуть код ошибки 0.
  9. В случае возникновения ошибки на любом этапе, преобразовать ее в тип control\return_code_t и вернуть веб-серверу.

StartSimulationId

  1. Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
  2. Через обращение к объекту control\CControlSystem получить адрес control\IGeometrySystem подсистемы геометрического моделирования control\CGeometrySystem.
  3. Извлечь из параметров запроса CreateObjectId имя геометрической модели среды моделируемого поля, в которой создается новый элемент.
  4. Обращаясь к подсистеме геометрического моделирования с извлеченным именем, получить экземпляр геометрической модели, над которой планируется выполнить моделирования физического поля.
  5. Используя ссылку на экземпляр control\CControlSystem запустить процедуру моделирования, указав в качестве параметра имя экземпляра подсистемы предметной области, в которой должно выполняться моделирование, и получив при этом имя процесса моделирования.
  6. Вернуть имя веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
  7. Вернуть код ошибки 0.
  8. В случае возникновения ошибки на любом этапе, преобразовать ее в тип control\return_code_t и вернуть веб-серверу.

GetProcessStatusId

  1. Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
  2. Извлечь из параметров запроса имя процесса моделирования и, обращаясь к экземпляру control\CControlSystem, получить экземпляр класса control\CDomainSystem с интерфейсом IDomainSystem.
  3. Запросить у control\CDomainSystem статус процесса.
  4. Вернуть статус веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
  5. Вернуть код ошибки 0.
  6. В случае возникновения ошибки на любом этапе, вернуть ее control\return_code_t код веб-серверу.

GetSimulationResultsId

  1. Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
  2. Извлечь из параметров запроса имя процесса моделирования и, обращаясь к экземпляру control\CControlSystem, получить экземпляр класса control\CDomainSystem с интерфейсом IDomainSystem.
  3. Запросить у control\CDomainSystem размер результатов моделирования.
  4. Выделить память полученного объема, запросить у control\CDomainSystem результаты моделирования с записью их в выделенный буфер.
  5. Вернуть выделенный буфер веб-серверу через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
  6. Вернуть код ошибки 0.
  7. В случае возникновения ошибки на любом этапе, вернуть ее control\return_code_t код веб-серверу.

CloseSimulationId

  1. Через интерфейс IControlFactory получить singleton-реализацию control\CControlSystem подсистемы управления.
  2. Извлечь из параметров запроса имя процесса моделирования.
  3. Через обращщение к control\CControlSystem выполнить закрытие процесса моделирования с извлеченным именем.
  4. Вернуть 0 через выходной параметр pPackedOutputParams функции ControlSystemEntryPoint.
  5. Вернуть код ошибки 0.
  6. В случае возникновения ошибки на любом этапе, вернуть ее 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 Обобщенный класс параметров установки коммуникации с экземпляром подсистемы предметной области.

Глобальные функции

Файлы