Рекомендации по использованию библиотеки Atentis.Connection Типы подключения к серверу АЛОР-Трейд Для подключения объекта slot к серверу АЛОР-Трейд в Atentis.Connection реализованы два типа подключений: Standard Connection и Fast Connection. Соединение типа Fast Connection рекомендуется использовать для транзакционных слотов при высокочастотной торговле, во всех остальных случаях рекомендуется использовать Standard Connection. Standard Connection Для установления соединения типа Standard Connection используется метод Start из класса Slot. Автоматически запрашивает с сервера обновления таблиц с периодом, равным значению свойства RefreshPeriod в классе Slot. За состояние соединения с сервером отвечает библиотека Atentis.Connection, при разрыве связи никаких действий внешнему приложению производить не нужно, восстановление соединения происходит на уровне библиотеки. Таблицу SECURITIES необходимо в обязательном порядке добавлять в список загружаемых таблиц слота. Получения данных и отправка запросов на транзакции идет последовательно, т.е. запрос на транзакцию может ожидать отправки во внутреннем потоке Atentis.Connection в течение времени, необходимого для и обработки очередного пакета получаемых данных. Fast Connection Для установления соединения типа Fast Connection используется метод OpenConnection из класса Slot. Для обновления таблиц слота внешнее приложение должно само вызывать метод RefreshAllTables из класса Slot. Atentis.Connection не отслеживает состояние соединения с сервером, контроль за состоянием соединения с сервером должен быть реализован на уровне внешнего приложения. Таблица SECURITIES по умолчания добавляется в слот при вызове метода OpenConnection Запрос на транзакцию отправляется на сервер без задержки. Ограничение AcceptDelay со стороны сервера АЛОР-Трейд. Механизм AcceptDelay на сервере АЛОР-Трейд позволяет устанавливать соединение c сервером с одного IP адреса не чаще чем 1 раз в 1000 мс. При попытке установить повторное соединение ранее, чем через 1000 мс, от сервера придет сообщение “Access Denied”. При использовании внешним приложением более одного соединения с сервером необходимо перед очередным вызовом метода Start или OpenConnection из класса Slot сделать задержку на величину не менее 1000 мс (например, Thread.Sleep(1000)). Ограничение максимального кол-ва одновременных соединений. (Max connections exceeded) По умолчанию для всех клиентов включен режим ограничения соединений с отказом на новое соединение при превышении максимального числа разрешенных соединений. При превышении максимального числа разрешенных соединений сервер АЛОР-Трейд возвращает сообщение “Max connections exceeded.” По умолчанию, с одним сервером АЛОР-Трейд разрешено одно соединение типа Standard Connection и одно соединение типа Fast Connection. Событие evhNewSession Приход событие evhNewSession из класса RequestSocket означает, что клиенту необходимо установить новый сеанс связи с сервером АЛОР-Трейд. Причиной прихода события evhNewSession может быть как изменение идентификатора сессии (SessionID) сервера АЛОР-Трейд по причине планового или аварийного рестарта, так и в результате изменения свойств клиентской учетной записи (например, смены пароля). Порядок действий при использовании Standard Connection 1. Для соединения типа Standard Connection, после прихода события NewSession, разрыв соединения произойдет автоматически. 2. Внешнему приложению необходимо отписаться от используемых событий rqs. 3. Создать новый объект rqs, подписаться на нужные события. 4. Вызвать последовательно методы Init из класса RequestSocket и Start из класса Slot для установления соединения. Порядок действий при использовании Fast Connection 1. После прихода события evhNewSession, клиентское приложение должно вызвать метод CloseConnection из класса Slot. 2. Для установления соединения вызвать метод OpenConnection из класса Slot. Ниже приведен пример обработки события NewSession на C# для случая использования двух соединений. Здесь data_slot — ссылка на объект класса Slot, используемый для Standard Connection, trans_slot — для Fast Connection. public void RQS_NewSession(object sender, TableEventArgs e) { trans_slot.CloseConnection(out msg); data_slot.rqs.evhLogLine -= new TableEventHandler(RQS_LogLine); data_slot.rqs.evhSynchronized -= new TableEventHandler(RQS_Synchronized); data_slot.rqs.evhNewSession -= new TableEventHandler(RQS_NewSession); data_slot.rqs.evhUpdateAllTableViews -= new TableListEventHandler(RQS_UpdateAllTableViews); Connect(); } public void Connect() { data_slot.rqs = new RequestSocket(data_slot); data_slot.rqs.evhLogLine += new TableEventHandler(RQS_LogLine); data_slot.rqs.evhSynchronized += new TableEventHandler(RQS_Synchronized); data_slot.rqs.evhNewSession += new TableEventHandler(RQS_NewSession); data_slot.rqs.evhUpdateAllTableViews += new TableListEventHandler(RQS_UpdateAllTableViews); data_slot.rqs.Init(); data_slot.Start(); }