Сегодня подробнее рассмотрим Prime поток AServer, процедуры Connect и Disconnect и обработку Securities с Portfolio. Повторим то, где они хранятся, и поговорим о том, как это всё вместе связано.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/734fdb.webp)
AServer в проекте.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/474fa0.webp)
Интересующие нас регионы внутри AServer.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/0f35a2.webp)
Рассматривать их будем вот в этой последовательности с картинки выше, т.к. они так или иначе друг с другом связаны и все используются из региона «Thread 1. Work with connection».
В самом конце статьи по пунктам пройдёмся по тому, как они взаимодействуют.
1. РегионStart / Stop server – user direction.
Регион, в котором хранятся члены, отвечающие за внешнее управление коннектором со стороны пользователя.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/b1af85.webp)
- Статус сервера, который заказал пользователь. Connect / Disconnect.
- StartServer. Публичный метод, вызываемый из внешних интерфейсов для смены желаемого статуса на Connect.
- StopServer. Публичный метод, вызываемый из внешних интерфейсов для смены желаемого статуса на Disconnect.
- Событие: пользователь заказал статус Connect.
- Событие: пользователь заказал статус Disconnect.
Прямо из визуального интерфейса пользователю нельзя послать поток, который будет подключать коннектор к бирже. Поток из визуального интерфейса лишь изменит флаг в этом регионе, а остальное будут делать внутренние потоки AServer, о которых речь пойдёт ниже.
2. Регион Server status.
Регион, в котором хранится текущий статус сервера. Connect – полностью готов к торгам. Disconnect – не готов ни к чему.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/aa8a97.webp)
- Текущий статус сервера. Connect / Disconnect.
- Тип сервера.
- Реализация сервера подключилась к API.
- Реализация сервера отключилась от API.
- Событие: Изменился статус сервера.
- Событие: Необходим перезапуск сервера. В основном вызывается для того, чтобы CandleConnector всех источников начали процедуру переподключения бумаг к торгам.
Суть в том, чтобы дождаться, когда в обработчики событий 3 и 4 придёт оповещение о смене статуса IServerRealization и сохранить этот статус в свойство 1.
3. Регион Portfolios.
Регион, в котором хранятся и обрабатываются портфели клиента.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/132932.webp)
- Массив с портфелями клиента.
- Запросить объект портфеля по его имени.
- Обработчик события обновления портфеля.
- Событие: Портфели изменились.
4.РегионSecurities.
Регион, в котором хранятся и обрабатываются бумаги по площадке.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/337138.webp)
- Массив с доступными на площадке бумагами.
- Часто запрашиваемые бумаги. Добавлено для оптимизации, чтобы не обходить верхний массив постоянно до конца из следующего метода.
- Запрос объекта бумаги по имени и классу.
- Показать бумаги на площадке в виде таблицы.
- Обработчик события обновления бумаг в источнике.
- Событие: Обновился список бумаг по площадке.
5. РегионThread 1. Work with connection.
Регион, в котором работает главный поток AServer. Отвечающий за статус подключения, запрашивающий Portfolios и Securities, разворачивающий CandleManager данного коннектора.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/d7527d.webp)
- Место работы Main потока.
- Последнее время старта сервера.
- Запустить класс, отвечающий за сборку свечек.
- Удалить класс, отвечающий за сборку свечек.
6.PrimeThreadArea.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/c2fb38.webp)
1. У метода есть спецатрибут для перехватов исключений в неуправляемой памяти. Это важно. Кое-где возможно при создании нового коннектора тоже придётся это использовать.
2. Задержка у потока – 1 секунда. Он никуда не торопится. Торопиться нужно при рассылке и парсинге данных (и ловле мух). Но не здесь.
3. Если реализацию сервера ещё не подгрузили в AServer – ничего не делаем.
4. Механизм активации подключения.
- Вызывается, когда статус Disconnect, а пользователь заказал Connect.
- Вызывается Dispose у реализации для предварительной очистки памяти.
- Очищаются портфели, если таковые уже есть.
- Удаляется менеджер свечей.
- Вызывается Connect у реализации.
- Вызывается событие NeadToReconnectEvent, чтобы все источники у роботов были оповещены о том, что нужно переподключаться.
5. Механизм отключения от источника.
- Вызывается Dispose у реализации для предварительной очистки памяти.
- Удаляет менеджер свечей.
6. Это условие блокирует проход потока ниже, если статус сервера Disconnect.
7. Если менеджера свечей нет, создаёт его.
8. Вызывает у реализации GetPortfolio.
9. Вызывает у реализации GetSecurities.
7. Последовательность взаимодействия.
7.1 ПользовательиStart / Stop server – user direction.
Пользователь из GUI сервера подаёт приказ на коннект, нажимая на соответствующую кнопку. Вот здесь:
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/3bbf0e.webp)
При этом статус сервера, который хочет пользователь от AServer, меняется на Connect, вот здесь:
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/da42b4.webp)
7.2 Поток из Thread 1. Обращается к IServerRealization, активируя подключение.
Поток Prime, видя желаемый статус, вызывает вот эту процедуру:
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/e0bae5.webp)
Т.е. вызывает сначала Dispose у реализации, а затем и Connect.
7.3 IServerRealization высылает в регион Server Status данные по подключению.
Теперь переходим в AlorServerRealization (как пример). У неё вызывали метод Connect. И через какое-то время все web-socket активированы, она вызывает событие подключение, вот здесь:
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/54fc27.webp)
AServer узнаёт об этом из обработчика события ConnectEvent, и его статус меняется на Connect:
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/005bff.webp)
7.4 Поток из Thread 1. Обращается к IServerRealization, вызывая скачивание бумаг и портфеля.
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/f097ec.webp)
7.5 IServerRealization высылает в регион Securities скачанные бумаги, а в регион Portfolio скачанные портфели.
Через обработчики событий обновления бумаг и портфелей. Вот здесь:
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/ded4d1.webp)
Удачных алгоритмов!
Пост из серии «Коннекторы к OsEngine»
Серия о том, как стать настоящим программистом и изменить свою профессию.
Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php
Комментарии открыты для друзей, добавляйтесь!
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/21/16/44/2024/08/22/50c5ba.webp)
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php
![AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58](/uploads/2024/images/00/78/53/2024/01/16/67f208.webp)