Коннектор Plaza II. Обзор кода в OsEngine – архитектура и модули.

Коннектор Plaza II. Обзор кода в OsEngine – архитектура и модули.

В этой статье посмотрим, как устроен код Плазы в OsEngine. Для понимая достаточно будет минимальных знаний C#, здесь не будет какой-либо сложной логики. Пройдёмся по основному.

OsEngine – проект с открытым кодом, поэтому посмотреть раздел, относящийся к коннектору можно прямо сейчас онлайн по адресу https://github.com/AlexWan/OsEngine

Также можно просто скачать весь проект и открыть его в Visual Studio, чтобы смотреть более наглядно.

Структура коннектора не имеет каких-либо сложных объектов. В папке Entity находятся классы-сущности для удобной передачи данных внутри коннектора.

Сам коннектор расположен в классе PlazaServer и имеет следующую архитектуру.

Всего в коннекторе 13 регионов. Так как Плаза получает всю рыночную информацию через потоки и не имеет прямого способа запросить какие-либо данные, то архитектура коннектора отличается от большинства других в OsEngine.

При включении коннектор читает параметры конфигурации, в нашем случае это ключ для подключения, для тестового сервера это 11111111, для реального сервера это ключ сертификата. Также кол-во заявок, сервис Cancel on disconnect и тип соединения (по дефолту p2lrpcq, т.к он быстрее, но для удобства разработки лучше выбрать p2tcp)

Подключение начинается с запуска метода Connection. Сам метод выглядит так.

В первом регионе 1 Constructor, Connection, Dispose содержится конструктор с двумя потоками: PrimeWorkerThreadSpace и HeartBeatSender. С HeartBeatSender думаю все понятно, в нем каждую секунду отправляются пинги, которые уведомляют сервер о том, что наше ПО активно.

А вот поток PrimeWorkerThreadSpace является основным потоком коннектора. В нем каждую итерацию цикла проверяется статус объекта Connection, который отвечает за подключение к роутеру. Если у роутера произошла какая-то ошибка, то сразу произойдет попытка переподключения. Помимо объекта Connection в данном потоке также опрашиваются статусы Листнеров и Паблишера, если у них происходит ошибка, то также предпринимается попытка переподключения.

Листнеры как раз отвечают за подписку на потоки, которые мы хотим получать. В OsEngine реализована работа со следующими потоками:

FORTS_TRADE_REPL, заявки и сделки пользователя, таблицы user_deal, orders_log.

FORTS_DEALS_REPL, поток анонимных сделок, таблица deal.

– FORTS_AGGR20_REPL, рисуем стакан, таблица orders_aggr

FORTS_POS_REPL, информация о позициях, таблица position

– FORTS_PART_REPL, информация о средствах и лимитах, таблица part

– FORTS_REFDATA_REPL, справочная и сессионная информация, таблица fut_sess_contents.

– FORTS_USERORDERBOOK_REPL, Заявки пользователя: срез стакана, таблица orders

Пример строк для подключения листнеров находится в регионе 2 Properties, Connection strings.

В регионе 4 Check for a listener connection находятся методы, которые опрашивают статусы листнеров, производят их подключение и переподключение. Данные методы вызываются из главного потока коннектора PrimeWorkerThreadSpace каждую итерацию.

Для примера разберем метод CheckListnerTrades

Остальные методы работают аналогично.

В методе-подписчике происходит обработка полученных данных из потоков.

В регионах 5, 6 ,7, 8, 9 находятся методы-подписчики, которые получают данные от потоков, на которые они были подписаны. В регионе 10 Trade находятся методы для отправки ордеров: выставление заявок, отмена заявок и изменение заявок.

Коннектор Plaza в OsEngine представляет собой комплексное решение для торговли на срочном рынке, обеспечивающее удобство и эффективность работы трейдеров. За счет открытого кода данный коннектор можно легко расширять и внедрять новый необходимый для торговли функционал.

Поддержка OsEngine: https://t.me/osengine_official_support

16:13
423

Комментарии

Нет комментариев. Ваш будет первым!