Ejemplo n.º 1
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (!_isInitialized)
            {
                _isInitialized = true;

                Trader.Restored += () => this.GuiAsync(() =>
                {
                    // update gui labes
                    ChangeConnectStatus(true);
                    MessageBox.Show(this, LocalizedStrings.Str2958);
                });

                // subscribe on connection successfully event
                Trader.Connected += () =>
                {
                    this.GuiAsync(() => ChangeConnectStatus(true));
                };
                Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));

                // subscribe on connection error event
                Trader.ConnectionError += error => this.GuiAsync(() =>
                {
                    // update gui labes
                    ChangeConnectStatus(false);

                    MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
                });

                // subscribe on error event
                Trader.Error += error =>
                                this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));

                // subscribe on error of market data subscription event
                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.NewStopOrders += orders => _stopOrdersWindow.OrderGrid.Orders.AddRange(orders);

                Trader.NewPortfolios += portfolios =>
                {
                    // subscribe on portfolio updates
                    //portfolios.ForEach(Trader.RegisterPortfolio);

                    _portfoliosWindow.PortfolioGrid.Portfolios.AddRange(portfolios);
                };
                Trader.NewPositions += positions => _portfoliosWindow.PortfolioGrid.Positions.AddRange(positions);

                // subscribe on error of order registration event
                Trader.OrdersRegisterFailed += OrdersFailed;
                // subscribe on error of order cancelling event
                Trader.OrdersCancelFailed += OrdersFailed;

                // subscribe on error of stop-order registration event
                Trader.StopOrdersRegisterFailed += OrdersFailed;
                // subscribe on error of stop-order cancelling event
                Trader.StopOrdersCancelFailed += OrdersFailed;

                Trader.MassOrderCancelFailed += (transId, error) =>
                                                this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str716));

                Trader.NewNews += news => _newsWindow.NewsPanel.NewsGrid.News.Add(news);

                // set market data provider
                _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;

                // set news provider
                _newsWindow.NewsPanel.NewsProvider = Trader;

                ShowSecurities.IsEnabled         = ShowTrades.IsEnabled = ShowNews.IsEnabled =
                    ShowMyTrades.IsEnabled       = ShowOrders.IsEnabled =
                        ShowPortfolios.IsEnabled = ShowStopOrders.IsEnabled = true;
            }

            if (Trader.ConnectionState == ConnectionStates.Failed || Trader.ConnectionState == ConnectionStates.Disconnected)
            {
                new XmlSerializer <SettingsStorage>().Serialize(Trader.Save(), _settingsFile);

                if (!NewPassword.Password.IsEmpty())
                {
                    Trader.SendInMessage(new ChangePasswordMessage {
                        NewPassword = NewPassword.Password.To <SecureString>()
                    });
                }
                else
                {
                    Trader.Connect();
                }
            }
            else if (Trader.ConnectionState == ConnectionStates.Connected)
            {
                Trader.Disconnect();
            }
        }
Ejemplo n.º 2
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (!_isInitialized)
            {
                _isInitialized = true;

                Trader.ReConnectionSettings.ConnectionSettings.Restored += () => this.GuiAsync(() =>
                {
                    // разблокируем кнопку Экспорт (соединение было восстановлено)
                    ChangeConnectStatus(true);
                    MessageBox.Show(this, LocalizedStrings.Str2958);
                });

                // подписываемся на событие успешного соединения
                Trader.Connected += () =>
                {
                    if (Trader.MarketDataSession.Address != null)
                    {
                        Trader.StartExport();
                    }

                    this.GuiAsync(() => ChangeConnectStatus(true));
                };
                Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));

                // подписываемся на событие разрыва соединения
                Trader.ConnectionError += error => this.GuiAsync(() =>
                {
                    // заблокируем кнопку Экспорт (так как соединение было потеряно)
                    ChangeConnectStatus(false);

                    MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
                });

                // подписываемся на ошибку обработки данных (транзакций и маркет)
                Trader.ProcessDataError += 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.NewStopOrders += orders => _stopOrdersWindow.OrderGrid.Orders.AddRange(orders);

                Trader.NewPortfolios += portfolios =>
                {
                    // регистрирует портфели на обновление данных
                    portfolios.ForEach(Trader.RegisterPortfolio);

                    _portfoliosWindow.PortfolioGrid.Portfolios.AddRange(portfolios);
                };
                Trader.NewPositions += positions => _portfoliosWindow.PortfolioGrid.Positions.AddRange(positions);

                // подписываемся на событие о неудачной регистрации заявок
                Trader.OrdersRegisterFailed += OrdersFailed;
                // подписываемся на событие о неудачном снятии заявок
                Trader.OrdersCancelFailed += OrdersFailed;

                // подписываемся на событие о неудачной регистрации стоп-заявок
                Trader.StopOrdersRegisterFailed += OrdersFailed;
                // подписываемся на событие о неудачном снятии стоп-заявок
                Trader.StopOrdersCancelFailed += OrdersFailed;

                Trader.NewNews += news => _newsWindow.NewsPanel.NewsGrid.News.Add(news);

                // устанавливаем поставщик маркет-данных
                _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;

                ShowSecurities.IsEnabled         = ShowTrades.IsEnabled = ShowNews.IsEnabled =
                    ShowMyTrades.IsEnabled       = ShowOrders.IsEnabled =
                        ShowPortfolios.IsEnabled = ShowStopOrders.IsEnabled = true;
            }

            if (Trader.ConnectionState == ConnectionStates.Failed || Trader.ConnectionState == ConnectionStates.Disconnected)
            {
                new XmlSerializer <SettingsStorage>().Serialize(Trader.Save(), _settingsFile);

                Trader.Connect();
            }
            else if (Trader.ConnectionState == ConnectionStates.Connected)
            {
                if (Trader.ExportState == ConnectionStates.Connected && Trader.MarketDataSession.Address != null)
                {
                    Trader.StopExport();
                }

                Trader.Disconnect();
            }
        }