Для изменения размера нажмите или перетащите
Множество подключений

S# имеет механизм для работы одновременно с несколькими соединениями (коннекторами). Например, робот может одновременно вести торговлю через Quik и SmartCOM, или работать с несколькими терминалами Quik. Этот механизм реализован на уровне сообщений. (см. Сообщения). За кулисами механизма лежит использование класса BasketMessageAdapter, который позволяет последовательно оперировать несколькими адаптерами, связанными с различными торговыми системами. Класс Connector имеет свойство Adapter этого типа.

Организовать работу с несколькими коннекторами можно загрузив настойки из специального конфигурационного файла, в котором сохранены настройки коннектора, в том числе настройки адаптеров, или ли же можно воспользоваться компонентом ConnectorWindow, который является графическим сервисом для конфигурации коннектора.

Ниже показан пример создания множественного подключения. Исходные коды примера находятся в проекте Samples/Common/SampleMultiConnection.

multiconnection main

Создание множественного подключения

  1. В конструкторе главного окна вызываем метод InitConnector, в котором выполняется конфигурирование коннектора, а также подписка на необходимые события.

    C#
    public MainWindow()
    {
        InitializeComponent();
        Instance = this;
    
        Title = Title.Put("Multi connection");
    
        _ordersWindow.MakeHideable();
        _securitiesWindow.MakeHideable();
    
        var logManager = new LogManager();
        logManager.Listeners.Add(new FileLogListener("sample.log"));
        logManager.Sources.Add(Connector);
    
        InitConnector();
    }
  2. В методе InitConnector выполняется подписка на события коннектора, а также загрузка настроек коннектора из конфигурационного файла при помощи метода ConnectorLoad(SettingsStorage).

    C#
    private void InitConnector()
    {
        // subscribe on connection successfully event
        Connector.Connected += () =>
        {
            this.GuiAsync(() => ChangeConnectStatus(true));
        };
    
        // subscribe on connection error event
        Connector.ConnectionError += error => this.GuiAsync(() =>
        {
            ChangeConnectStatus(false);
            MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
        });
    
        Connector.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    
        // subscribe on error event
        Connector.Error += error =>
            this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));
    
        // subscribe on error of market data subscription event
        Connector.MarketDataSubscriptionFailed += (security, type, error) =>
            this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(type, security)));
    
        Connector.NewSecurities += securities => _securitiesWindow.SecurityPicker.Securities.AddRange(securities);
        Connector.NewOrders += orders => _ordersWindow.OrderGrid.Orders.AddRange(orders);
    
        // subscribe on error of order registration event
        Connector.OrdersRegisterFailed += OrdersFailed;
        // subscribe on error of order cancelling event
        Connector.OrdersCancelFailed += OrdersFailed;
    
        // set market data provider
        _securitiesWindow.SecurityPicker.MarketDataProvider = Connector;
    
        try
        {
            if (File.Exists(_settingsFile))
                Connector.Load(new XmlSerializer<SettingsStorage>().Deserialize(_settingsFile));
        }
        catch
        {
        }
    }
  3. Ниже показан код обработчика события Click кнопки Настройки. В обработчике вызывается метод Configure(Connector, Window). Этот метод открывает окно Настройки подключений (см. ниже). Также в обработчике выполняется сохранение настроек коннектора в конфигурационный файл. Этот файл в последующем можно использовать для конфигурирования коннектора без вызова окна Настроек подключения.

    C#
    private void SettingsClick(object sender, RoutedEventArgs e)
    {
        Connector.Configure(this);
        new XmlSerializer<SettingsStorage>().Serialize(Connector.Save(), _settingsFile);
    }
  4. Здесь представлено окно настройки подключений. Из раскрывающегося списка (открывается кнопкой '+') необходимо выбрать нужные адаптеры и настроить их свойства в окне свойств, расположенном справа. Например, для SmartCOM нужно указать адрес сервера, логин и пароль. Для работы с несколькими Quik будет нужно указать адреса серверов Lua.

    multiconnection settings
    Примечание Примечание

    Корректность подключения можно проверить при помощи кнопки Проверить.

    Результатом работы этого окна будет создание и добавление адаптеров в список внутренних адаптеров свойства ConnectorAdapter.