Control\CControlSystem
Класс, реализующий основные функции подсистемы управления. Всегда существует в единственном экземпляре. Доступ к методам осуществляется через интерфейсы IControlSystem, IControlSystemServerSide и IControlSystemDomainSide.
Типы
Тип | Описание |
---|---|
name_type | Тип имени элементов подсистемы управления. Наследуется из IControlSystem. |
domain_name_type | Тип имени экземпляра подсистемы предметной области. Эквивалентно name_type |
process_name_type | Тип имени процесса моделирования. Эквивалентно name_type |
size_type | Целочисленный беззнаковый четырехбайтовый тип для описания размеров. |
Методы

Единственный экземпляр класса CControlSystem осуществляет агрегирование других подсистем системы управления и предоставляет доступ к ним по запросу из-вне.
Агрегируемыми компонентами являются: один экземпляр подсистемы геометрического моделирования CGeometrySystem, хеш-таблицы (от имени) активных подсистем предметной области CDomainSystem и связынных с ними экземпляров балансировщика нагрузки CLoadBalancer, а также хеш-таблицы (от имени) активных (и, возможно, уже завершенных, но не закрытых) процессов моделирования. Доступ к этим подсистемам осуществляется строго через их интерфейсы (IGeometrySystem, IDomainSystem и ILoadBalancer соответственно).
Непосредственное хранение балансировщиков нагрузки и экземпляров подсистем предметной области осуществляется с помощью смарт-указателей со счетчиком ссылок std::shared_ptr на ILoadBalancer и на IDomainSystem. Такие указатели хранятся в таблице активных процессов вместе со ссылками на строки таблицы активных подсистем предметной области.
В свою очередь, таблица активных подсистем предметной области хранит указатели weak_ptr на те же экземпляры ILoadBalancer и IDomainSystem. Такие указатели не управляют временем жизни указываемых объектов.
Экземпляр подсистемы предметной области создается в таблице активных экземпляров при запуске процесса моделирования, т.е. при вызове StartSimulation, вместе с созданием экземпляра балансировщика нагрузки и внесением записи в таблицу активных процессов. Если на момент вызова StartSimulation указанный в запросе экземпляр подсистемы предметной уже зарегистрирован в таблице активных экземпляров, используется существующая запись, в которой счетчики ссылок на экземпляры подсистем инкрементируются. В любом случае (при условии успешной обработки запроса) создается новый процесс моделирования, запись о котором вносится в таблицу активных процессов.
При закрытии процесса вызовом CloseSimulation происходит закрытие процесса моделирования и удаление записи о нем из таблицы активных процессов. При этом счетчики ссылок на экземпляры балансироващика и подсистемы предметной области декрементируется. При достижении ими нуля, соответствующая запись таблицы активных подсистем предметной области, а также сами экземпляры подсистемы и связанного балансировщика удаляются.