/** * Генератор для главной страницы документации. * Что тут да как? * * Новый блок должен состоять из тагов: * name - где значением будет число. Все блоки сортируются по имени. * поэтому что бы вставить блок между 01 и 02, нужно написать 01.0 * * mainpage - таг который указывает, что этот блок будет использован для документации * memberof - указывает предка для блока. Но в случае документации это используется, * что бы эти блоки не попали в глобальное пространство. */ /** * ### Документация по работе с GUI версии 2.9.1 * @name 01 * @mainpage * @memberof mainpage * */ /** * ### Содержание: * - #### [Архитектура](./arch.html) * - #### [Наследование](./inheritance.html) * - #### [Наследование GUI(деревом)](./gui_tree.html) * - #### [Наследование GUI(графом)](./gui_graph.html) * - #### [Наследование CORE(деревом)](./core_tree.html) * - #### [Наследование CORE(графом)](./core_graph.html) * - #### Виджеты * - #### Датасорсы * - #### Сигнал-Слоты * - #### Грид * - #### Графики * - #### {@link ProvidersSystem Система провайдеров}: * - - #### {@link Trees} - Менеджер для работы с деревьями * - - #### {@link Models} - Менеджер для работы с девайсами(моделями) * - - #### {@link Publishers} * - - #### {@link ModelTypes} * - - #### {@link GroupTypes} - Менеджер для доступа к типам компонентов * - - #### {@link EventTypes} - Менеджер для доступа к типам событий * - - #### {@link CoreConfig} * - - #### {@link CoreErrors} * - - #### {@link CoreTranslations} * - - #### {@link UserManager} - Менеджер для доступа к настройкам доступа пользователей * - - #### {@link Publishers} - Менеджер для доступа к настройкам доступа пользователей * - #### Библиотеки: * - - #### {@link std} - реализация сишной библиотеки на js. * - - #### {@link v2} - сериализуемые типы, которыми можно обмениваться с ядром. * - - #### {@link tools} - разного рода хелперы и инструменты. * * @name 02 * @mainpage * @memberof mainpage * */ /** * ### Система провайдеров. * *
* * Провайдеры это механизм, который осуществляет общий доступ к любой доступной информации, которую можно получить от ядра * * Проще говоря, они моделируют объекты, которые существют в ядре и поддерживаются в акутальном состоянии, * * до тех пор, пока кто-либо ими пользуются. Как только истекает таймер жизни объекта, он вычищается. * *
* Провайдеры запускаются перед стартом системы _**js/main.js**_ и определены в глобальной области видимости: **window.ps**. * * Как только происходит хендшейк и логин пользователя, начинает загружаться GUI. * *
* #### Как пользоваться провайдерами? * * Внутри провайдеров проинициализирован объект {@link Platform} в переменной **ps.pl**. * * По-сути он моделирует платформу со стороны сервера и содержит в себе менеджеры, через которые можно связываться с ядром. * * *
* #### Как устроены провайдеры? (**Важно прочитать!**) * * Механизм провайдеров загружает данные из ядра и моделирует объект, если он изменяется во времени, * и ядро допускает подписку на данные объекта. * * _К таким объектам относятся например:_ * {@link GroupTypes.GroupType GroupType}, * {@link Models.Model Model}, * {@link ModelTypes.ModelType ModelType}, * {@link Trees.GlobalTree.Node Node}. * * Основная идея состоит в том, что один раз загрузив данные, клиент не будет нагружать сервер запросами. * * Так что система провайдеров по факту кеширует в себе модели сервера, и если происходят обновления данных, то * * обновление происходит по частям. * * Вся основная работа с провайдерами начинается с точки доступа **ps.pl**. Это корневая платформа, она же мастер. * * Посмотреть какие есть интерфейсы у платформы можно {@link Platform тут}. * * Платформа содержит в себе все менеджеры, через которые можно осуществлять общение с сервером. * * _Например:_ {@link GroupTypes Типы компонентов}, {@link Models Менеджер моделей}, {@link Trees Менеджер деревьев}. *
* **Как корректно запрашивать и работать с данными предоставляемыми API?** * * - 1) У каждого менеджера как правило есть метод **get**. Этот метод, у кажого менеджера принимает свой тип данных. * - - **get** всегда возвращает {@link tools.promise Промис}. * - - Результатом промиса всегда будет {@link tools.reference ссылка}. * - - **Работа ссылкой (ВАЖНО)**: * - - - после того, как вы закончите работать с ссылкой, **ОБЯЗАТЕЛЬНО** вызвать у неё {@link tools.reference.reset reset} * - - - если вы получили ссылку, и получили данные из объекта, вызовите у неё {@link tools.reference.reset reset} * - - - если необходимо следить за состоянием, то сохраните ссылку в переменную и после того, как закончите работу с объектом вызовите {@link tools.reference.reset reset} * - - - всегда вызывайте {@link tools.reference.reset reset}, если вам не нужен объект. В противном случае он не будет выгружаться из памяти. * * - 2) У кажого промиса есть возможность отмены. Если вам больше нет надобности ждать ответ, просто вызовите cancel. * - 3) Будте внимательны к методам: * - - все публичные методы и свойства будут идти без нижнего подчеркивания. * - - все приватные методы будут и должны быть подписаны <_name> * - - если нет нужного метода, а данные вы нашли где-то в приватных переменных, то следует разобраться почему, так. И: * - - - а) сделать публичный метод. * - - - б) спросить почему так сделано у автора. * - 4) Перед началом работы стоит ознакомится с содержимым папки js/providers/system * - - **base/base.js** - файл в котором определена машина состояний * - - **base/item.js** - класс от которого наследуются все НЕ менеджеры * - - **base/manager.js** - базовый класс для любого менеджера. Содержит API работы с менеджерами. * - - **platform.js** - {@link Platform платформа}. Оно же точка доступа ps.pl. * * *
* Доступные менеджеры у платформы: * * - {@link GroupTypes} - Менеджер, который позволяет получить данные по типу компонента, определен как **ps.pl.gtm** * - {@link EventTypes} - Менеджер, который позволяет получить данные по типу события, определен как **ps.pl.etm** * - {@link ModelTypes} - Менеджер, который позволяет узнать о содержимом модели **ps.pl.mtm** * - {@link Models} - Менеджер, для доступа к устройствам, определен как **ps.pl.mm** * - {@link Trees} - Менеджер, для доступа к деревьям, определен как **ps.pl.tm** * - {@link CoreConfig} - Менеджер, для доступа к конфигу платформы, определен как **ps.pl.core_config** * - {@link CoreErrors} - Менеджер, для доступа к конфигу платформы, определен как **ps.pl.core_errors** * - {@link CoreTranslations} - Менеджер, для доступа к переводам, определен как **ps.pl.translations** * - {@link UserManager} - Менеджер, для доступа к данным пользоваталей, определен как **ps.pl.users** * - {@link UserManager} - Менеджер, для доступа к публишерам, определен как **ps.pl.pm** * * * *

* ### {@link Trees} Деревья: * * Для чего нужны деревья? * * Например для отображения рабочего стола, каталога моделей, схемы топологии и т.д. * * * *

* ### {@link Publishers}. Паблишеры. * * Для чего нужны паблишеры? * * В общем случае они предназначены для отображение очень больших списков, которые могут подвесить GUI. * * Пример использования паблишера есть в форме результатов обнауржения. * * * *

* ### {@link Models}. Менеджер моделей. * * Менеджер моделей предоставляет доступ к устройствами находящимся в системе, которые были обнаружены в сети или добавлены иным способом. * * Пример использования можно найти в Схеме моделей. * * * *

* ### {@link GroupTypes}. Менеджер типов групп. * * Позволяет получить данные связанные с группой (cTag) * * Этот механизм используется в виджете для отображения атрибутов модели. * * А так же для отображения атрибутов компонент. * * @name 04 * @mainpage * @memberof mainpage * */