Для изменения размера нажмите или перетащите
Пример работы с TwimeTrader

Пример работы с TwimeTrader демонстрирует приложение SampleTwime, показанное на рисунке ниже. Исходные коды примера лежат в дистрибутиве в папке Samples/Twime.

Twime Sample
  1. В области определений переменных создаем экземпляр коннектора TwimeTrader.

    C#
    public TwimeTrader Trader = new TwimeTrader();
  2. Для корректной работы коннектор должен содержать адаптер рыночных данных, которые отсутствуют в протоколе TWIME. Поэтому в в конструкторе главного окна создается экземпляр пустого адаптера PassThroughMessageAdapter и добавляется к коннектору.

    C#
    public MainWindow()
    {
        ..................................................
    
        var mdAdapter = new PassThroughMessageAdapter(Trader.TransactionIdGenerator);
        mdAdapter.AddMarketDataSupport();
        Trader.Adapter.InnerAdapters.Add(mdAdapter);
    }
  3. Далее устанавливаем необходимые обработчики событий IConnector. Если соединение не установлено, то устанавливаем логин и адреса соединения:

    1. TransactionAddress;

    2. RecoveryAddress.

    И устанавливаем соединение.

    C#
    private void ConnectClick(object sender, RoutedEventArgs e)
    {
        if (!_isInitialized)
        {
            _isInitialized = true;
    
            Trader.Restored += () => this.GuiAsync(() =>
            {
                // обновляем метки GUI
                ChangeConnectStatus(true);
                MessageBox.Show(this, LocalizedStrings.Str2958);
            });
    
            Trader.Connected += () =>
            {
                this.GuiAsync(() => ChangeConnectStatus(true));
            };
    
            Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    
            // подписываемся на событие ошибки соединения
            Trader.ConnectionError += error => this.GuiAsync(() =>
            {
                // обновляем метки GUI
                ChangeConnectStatus(false);
                MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
            });
    
            // подписываемся на событие ошибки
            Trader.Error += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));
    
            // подписываемся на событие ошибки подписки на рыночные данные
            Trader.MarketDataSubscriptionFailed += (security, type, error) => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(type, security)));
    
            Trader.NewSecurities += securities => _securitiesWindow.SecurityPicker.Securities.AddRange(securities);
            Trader.NewMyTrades += trades => _myTradesWindow.TradeGrid.Trades.AddRange(trades);
            Trader.NewTrades += trades => _tradesWindow.TradeGrid.Trades.AddRange(trades);
            Trader.NewOrders += orders => _ordersWindow.OrderGrid.Orders.AddRange(orders);
    
            Trader.NewPortfolios += portfolios =>
            {
                // подписываемся на событие обновления портфеля
                //portfolios.ForEach(Trader.RegisterPortfolio);
    
                _portfoliosWindow.PortfolioGrid.Portfolios.AddRange(portfolios);
            };
            Trader.NewPositions += positions => _portfoliosWindow.PortfolioGrid.Positions.AddRange(positions);
    
             .................................................
    
            _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;
    
            .................................................
    
        }
    
        switch (Trader.ConnectionState)
        {
            case ConnectionStates.Failed:
            case ConnectionStates.Disconnected:
                 Trader.TransactionAddress = TransactionAddress.EndPoint;
                 Trader.RecoveryAddress = RecoveryAddress.EndPoint;
                 Trader.Login = Login.Text;
                 Trader.Connect();
                 break;
            case ConnectionStates.Connected:
                 Trader.Disconnect();
                break;
        }
    }