Control\CControlSystem

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
Компоненты на верхнем уровне \ Подсистема управления \ Реализация \ CControlSystem

Класс, реализующий основные функции подсистемы управления. Всегда существует в единственном экземпляре. Доступ к методам осуществляется через интерфейсы IControlSystem, IControlSystemServerSide и IControlSystemDomainSide.

Типы

Тип Описание
name_type Тип имени элементов подсистемы управления. Наследуется из IControlSystem.
domain_name_type Тип имени экземпляра подсистемы предметной области. Эквивалентно name_type
process_name_type Тип имени процесса моделирования. Эквивалентно name_type
size_type Целочисленный беззнаковый четырехбайтовый тип для описания размеров.

Методы

Конструкторы Шаблон:Control\CControlSystem::CControlSystem brief
GetGeometrySystem Шаблон:Control\CControlSystem::GetGeometrySystem brief
GetProcessDomainSystem Шаблон:Control\CControlSystem::GetProcessDomainSystem brief
StartSimulation Шаблон:Control\CControlSystem::StartSimulation brief
CloseSimulation Шаблон:Control\CControlSystem::CloseSimulation brief
Marshal Шаблон:Control\CControlSystem::Marshal brief
GetLoadBalancer Шаблон:Control\CControlSystem::GetLoadBalancer brief


Единственный экземпляр класса CControlSystem осуществляет агрегирование других подсистем системы управления и предоставляет доступ к ним по запросу из-вне.

Агрегируемыми компонентами являются: один экземпляр подсистемы геометрического моделирования CGeometrySystem, хеш-таблицы (от имени) активных подсистем предметной области CDomainSystem и связынных с ними экземпляров балансировщика нагрузки CLoadBalancer, а также хеш-таблицы (от имени) активных (и, возможно, уже завершенных, но не закрытых) процессов моделирования. Доступ к этим подсистемам осуществляется строго через их интерфейсы (IGeometrySystem, IDomainSystem и ILoadBalancer соответственно).

Непосредственное хранение балансировщиков нагрузки и экземпляров подсистем предметной области осуществляется с помощью смарт-указателей со счетчиком ссылок std::shared_ptr на ILoadBalancer и на IDomainSystem. Такие указатели хранятся в таблице активных процессов вместе со ссылками на строки таблицы активных подсистем предметной области.

В свою очередь, таблица активных подсистем предметной области хранит указатели weak_ptr на те же экземпляры ILoadBalancer и IDomainSystem. Такие указатели не управляют временем жизни указываемых объектов.

Экземпляр подсистемы предметной области создается в таблице активных экземпляров при запуске процесса моделирования, т.е. при вызове StartSimulation, вместе с созданием экземпляра балансировщика нагрузки и внесением записи в таблицу активных процессов. Если на момент вызова StartSimulation указанный в запросе экземпляр подсистемы предметной уже зарегистрирован в таблице активных экземпляров, используется существующая запись, в которой счетчики ссылок на экземпляры подсистем инкрементируются. В любом случае (при условии успешной обработки запроса) создается новый процесс моделирования, запись о котором вносится в таблицу активных процессов.

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