В протоколе Plaza2 применяется push-технология распространения данных. Это означает, что данные клиенту поступают по мере их возникновения, без запроса. Клиент определяет, какие данные он будет получать во время работы на первоначальном этапе согласования схемы обмена данными между клиентом и сервера Plaza2.

Топология, или что к чему подключается, описано в документе P2ClienGate.doc в разделе «Топология сети». Простыми словами схему подключения можно описать так: конечное клиентское приложение (робот) соединяется и обменивается данными с роутером по протоколу TCP, либо по протоколу LRPCQ на ваш выбор. Роутер соединяется и обменивается данными по протоколу TCP с инфраструктурой биржи. Роутер – это приложение Windows, которое также было установлено на ваш компьютер из дистрибутива вместе с библиотекой P2ClientGate, если в процессе установки были отмечены соответствующие опции. Роутер может быть установлен на той же машине, что и клиент, либо клиент и роутер могут находиться на разных машинах. Возможно 2 варианта установки роутера (опции в мастере установки): Роутер может быть установлен как служба Windows, либо как приложение. О протоколе LRPCQ в документации написано так:

LRPCQ является простым транспортом, основанным на использовании shared-memory в ОС Windows. Использование LRPCQ возможно только при запуске приложения-клиента и роутера на одном компьютере. Протокол LRPCQ имеет меньшие накладные расходы, чем TCP, передача сообщений между приложением и роутером с использованием LRPCQ будет происходить быстрее.

Файлы установленных модулей, включая настройки и log файлы, находятся в папке установки ( по умолчанию C:\Program Files\P2FORTSGate\ ).

Данные от сервера поступают в виде реплик. Реплика- это команда от сервера на изменение/добавление/удаление записей таблиц (заявок, сделок, и т.д). Таблицы сгруппированы в потоки репликационных данных.

На этапе согласования схемы репликации клиент сообщает, какие потоки данных требуются для получения, какие таблицы в потоках и какие поля в таблицах. Программно это осуществляется посредством набора COM-интерфейсов, описанных в документации. Клиент назначает набор функций обратного вызова для обработки реплик каждого необходимого потока данных. Поступающие от сервера реплики обрабатываются путем вызова одного из методов ProcessMesage ( либо ProcessMessage2 или ProcessMessage3) интерфейса IP2Connection. В зависимости от потоков данных и действиям, к которым относятся вновь пришедшие реплики, метод ProcessMessage последовательно вызывает зарегистрированные процедуры обратного вызова клиента, передавая в них параметры реплик. Метод ProcessMessage должен вызываться как можно чаще, иначе новые реплики накапливаются в очереди и очень быстро теряют свою актуальность с течением времени. Если у клиента накапливаются очереди в течении сессии, значит он теряет в своевременности получения рыночных данных из-за неэффективности реализации. Для контроля состояния очереди необходимо в файле P2SimpleReplClient_trace.ini в каталоге установки найти и установить в 1 (вместо точек) значение в строке «New message added to recvList. Size: %d=…» В ходе записи логов можно просматривать записи вида New message added to recvList. Size: xxx в файле лога P2ClientGate.log.

Транзакции (заявки на покупку/продажу, снятие, перемещение заявок) также организованы как методы интерфейсов. На каждую транзакцию от сервера приходит ответ в виде реплике с информацией об успешном или не успешном результате выполнения транзакции, причиной неудачи (если транзакция не выполнена), а также информацией, связанной с исполнением транзакции (например присвоенный номер заявки). Реализован метод асинхронной отправки транзакций, т.е. сообщение-транзакция отправлятся на сервер и код клиентского приложения продолжает исполняться без задержек на ожидание ответа от сервера. Когда ответ будет получен – он встанет в очередь вместе с остальными репликами и будет получен при следующем вызове функции ProcessMessage. Обработка ответов на транзакции осуществляется похожим механизмом, что и остальные реплики: при инициализации клиента регистрируется специальная функция обратного вызова, которая и будет вызвана из ProcessMessages для обработки ответов на транзакции