Изображение блога
Алексей Ван <o-s-a.net>
Алексей Ван <o-s-a.net> Блог компании Os_Engine
16 января 2024, 13:12

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

Сегодня подробнее рассмотрим Prime поток AServer, процедуры Connect и Disconnect и обработку Securities с Portfolio. Повторим то, где они хранятся, и поговорим о том, как это всё вместе связано.

 AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

 

AServer в проекте.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

 

Интересующие нас регионы внутри AServer.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

Рассматривать их будем вот в этой последовательности с картинки выше, т.к. они так или иначе друг с другом связаны и все используются из региона «Thread 1. Work with connection».

В самом конце статьи по пунктам пройдёмся по тому, как они взаимодействуют.

 

 

1. РегионStart / Stop server – user direction.

Регион, в котором хранятся члены, отвечающие за внешнее управление коннектором со стороны пользователя.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

  1. Статус сервера, который заказал пользователь. Connect / Disconnect.
  2. StartServer. Публичный метод, вызываемый из внешних интерфейсов для смены желаемого статуса на Connect.
  3. StopServer. Публичный метод, вызываемый из внешних интерфейсов для смены желаемого статуса на Disconnect.
  4. Событие: пользователь заказал статус Connect.
  5. Событие: пользователь заказал статус Disconnect.

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

 

 

2. Регион Server status.

Регион, в котором хранится текущий статус сервера. Connect – полностью готов к торгам. Disconnect – не готов ни к чему.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

  1. Текущий статус сервера. Connect / Disconnect.
  2. Тип сервера.
  3. Реализация сервера подключилась к API.
  4. Реализация сервера отключилась от API.
  5. Событие: Изменился статус сервера.
  6. Событие: Необходим перезапуск сервера. В основном вызывается для того, чтобы CandleConnector всех источников начали процедуру переподключения бумаг к торгам.

Суть в том, чтобы дождаться, когда в обработчики событий 3 и 4 придёт оповещение о смене статуса IServerRealization и сохранить этот статус в свойство 1.

 

 

3. Регион Portfolios.

Регион, в котором хранятся и обрабатываются портфели клиента.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

  1. Массив с портфелями клиента.
  2. Запросить объект портфеля по его имени.
  3. Обработчик события обновления портфеля.
  4. Событие: Портфели изменились.

 

 

4.РегионSecurities.

Регион, в котором хранятся и обрабатываются бумаги по площадке.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

  1. Массив с доступными на площадке бумагами.
  2. Часто запрашиваемые бумаги. Добавлено для оптимизации, чтобы не обходить верхний массив постоянно до конца из следующего метода.
  3. Запрос объекта бумаги по имени и классу.
  4. Показать бумаги на площадке в виде таблицы.
  5. Обработчик события обновления бумаг в источнике.
  6. Событие: Обновился список бумаг по площадке.

 

 

5. РегионThread 1. Work with connection.

Регион, в котором работает главный поток AServer. Отвечающий за статус подключения, запрашивающий Portfolios и Securities, разворачивающий CandleManager данного коннектора.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

  1. Место работы Main потока.
  2. Последнее время старта сервера.
  3. Запустить класс, отвечающий за сборку свечек.
  4. Удалить класс, отвечающий за сборку свечек.

 

 

6.PrimeThreadArea.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

1. У метода есть спецатрибут для перехватов исключений в неуправляемой памяти. Это важно. Кое-где возможно при создании нового коннектора тоже придётся это использовать.
2. Задержка у потока – 1 секунда. Он никуда не торопится. Торопиться нужно при рассылке и парсинге данных (и ловле мух). Но не здесь.
3. Если реализацию сервера ещё не подгрузили в AServer – ничего не делаем.
4. Механизм активации подключения.
  1. Вызывается, когда статус Disconnect, а пользователь заказал Connect.
  2. Вызывается Dispose у реализации для предварительной очистки памяти.
  3. Очищаются портфели, если таковые уже есть.
  4. Удаляется менеджер свечей.
  5. Вызывается Connect у реализации.
  6. Вызывается событие NeadToReconnectEvent, чтобы все источники у роботов были оповещены о том, что нужно переподключаться.
5. Механизм отключения от источника.
  1. Вызывается Dispose у реализации для предварительной очистки памяти.
  2. Удаляет менеджер свечей.
6. Это условие блокирует проход потока ниже, если статус сервера Disconnect.
7. Если менеджера свечей нет, создаёт его.
8. Вызывает у реализации GetPortfolio.
9. Вызывает у реализации GetSecurities.

 

7. Последовательность взаимодействия.

7.1 ПользовательиStart / Stop server – user direction.

Пользователь из GUI сервера подаёт приказ на коннект, нажимая на соответствующую кнопку. Вот здесь:

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

При этом статус сервера, который хочет пользователь от AServer, меняется на Connect, вот здесь:

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58


7.2 Поток из Thread 1. Обращается к IServerRealization, активируя подключение.

Поток Prime, видя желаемый статус, вызывает вот эту процедуру:

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

Т.е. вызывает сначала Dispose у реализации, а затем и Connect.

 

7.3 IServerRealization высылает в регион Server Status данные по подключению.

Теперь переходим в AlorServerRealization (как пример). У неё вызывали метод Connect. И через какое-то время все web-socket активированы, она вызывает событие подключение, вот здесь:

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

AServer узнаёт об этом из обработчика события ConnectEvent, и его статус меняется на Connect:

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

 

7.4 Поток из Thread 1. Обращается к IServerRealization, вызывая скачивание бумаг и портфеля.

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

7.5 IServerRealization высылает в регион Securities скачанные бумаги, а в регион Portfolio скачанные портфели.

Через обработчики событий обновления бумаг и портфелей. Вот здесь:

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

Удачных алгоритмов!


Пост из серии «Коннекторы к OsEngine»

Серия о том, как стать настоящим программистом и изменить свою профессию.

Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php

Комментарии открыты для друзей, добавляйтесь!

AServer #4. PRIME THREAD. Статус сервера. Запрос бумаг. Запрос портфеля. Коннекторы к OsEngine #58

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

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн