← Назад

MultiConnection независимая работа адаптеров

Здравствуйте. Я добавляю в коннектор два адаптера:


_connector.Adapter.InnerAdapters.AddRange(new MessageAdapter[]
            {
                new LuaFixMarketDataMessageAdapter(_connector.TransactionIdGenerator){/*Инициализация*/},
                new TransaqMessageAdapter(_connector.TransactionIdGenerator){/*Инициализация*/}
            });

Могу ли я сними работать не зависимо? То есть подключать и отключать их по отдельности, запрашивать свечи одного инструмента от обоих адаптеров либо только от одного т.д.

Комментарии (10)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Support
Support

Добрый день

Выключение адаптеров возможно через свойство Connector.Adapter.InnerAdapters передав в него значение -1.

Отправка сообщений в конкретный адаптер осуществляется через параметр adapter в методе LookupSecurities

Константин
Константин Автор

Здравствуйте. Про значение -1 не понял. Можно поподробнее что значит передать значение -1?

Support
Support

Код ниже выключает адаптер из коннектора, не удаляя его физически

Connector.Adapter.InnerAdapters[transaqAdapter] = -1;
Константин
Константин Автор

То есть для того что бы мне проверить подключение одного конкретного адаптера (например LuaFixMarketDataMessageAdapter) нужно сделать так?


//Выключаем которые проверять на подключение не нужно
Connector.Adapter.InnerAdapters[transaqAdapter] = -1;
Connector.Adapter.InnerAdapters[....] = -1;
Connector.Adapter.InnerAdapters[....] = -1; 

Connector.ConnectedEx += ConnectAction; //Подписаться на успешное подключения адаптера
Connector.ConnectionErrorEx += ConnectErrorAction; //Подписаться на ошибки подключения адаптера
Connector.Connect();

            void ConnectErrorAction(IMessageAdapter messageAdapter1, Exception exception)
            {
                //Ошибка подключения
            }
            void ConnectAction(IMessageAdapter adapter)
            {
                //подключение установлено;
Connector.Disconnect();

                //Включаем все остальные адаптеры
                Connector.Adapter.InnerAdapters[transaqAdapter] = 1;
                Connector.Adapter.InnerAdapters[....] = 1;
                Connector.Adapter.InnerAdapters[....] = 1;
            }

Не ругайтесь сильно... Код набросал на коленке для общего представления алгоритма. И еще вопрос. Событие Connector.Connected(); срабатывает при успешном подключении любого из адаптераов?

Константин
Константин Автор

???

Support
Support

Добрый день

Событие Connected вызывается один или для каждого адаптера в зависимости от опции Connector.RaiseConnectedOnFirstAdapter Событие ConnectedEx вызывается для каждого адаптера всегда.

Константин
Константин Автор

Здравствуйте! Не могу разобраться с получением инструментов от разных адаптеров. Использую LuaFixMarketDataMessageAdapter и TransaqMessageAdapter. Сначала пытаюсь получить инструменты от TransaqMessageAdapter так:

            Connector.LookupSecuritiesResult += (exception, securities) => { };
            Connector.Adapter.InnerAdapters[LuaFixMarketDataMessageAdapter ] = -1;
            Connector.LookupSecurities(new Security(), TransaqMessageAdapter);

Инструменты от TransaqMessageAdapter приходят. Но когда далее пытаюсь получить инструменты от LuaFixMarketDataMessageAdapter так:

            Connector.Adapter.InnerAdapters[TransaqMessageAdapter] = -1;
            Connector.Adapter.InnerAdapters[LuaFixMarketDataMessageAdapter ] = 1;
            Connector.LookupSecurities(new Security(), LuaFixMarketDataMessageAdapter );

то инструменты не приходят. Connector содержит инструменты от TransaqMessageAdapter. Как можно получать инструменты от разных адаптеров?

Support
Support

Добрый день

Пришлите пожалуйста лог Луа.

Константин
Константин Автор

Вроде бы разобрался. Инструменты приходят от обоих адаптеров. Просто запутался в событиях LookupSecuritiesResult и NewSecurities. Инструменты приходят при подключении коннектора. Мне не понятно почему при получении инструментов адаптера TransaqMessageAdapter срабатывает только событие NewSecurities, а при получении инструментов FixMarketDataMessageAdapter срабатывают и NewSecurities и LookupSecuritiesResult. В чем разница этих событий? Все инструменты приходят в одну коллекцию Connector.Securities. Есть ли способ отфильтровать инструменты по адаптеру?

Support
Support

Добрый день

NewSecurity вызывается постоянно как только появляется в системе новый инструмент. LookupSecuritiesResult вызывается только при запросе на поиск инструментов.

Инструменты одни единые на разные подключения. В случае множества подключений рекомендуем выключить Connector.UpdateSecuritiesByLevel1 с целью предотвращения перезаписи данных.