Esempio n. 1
0
        private void InitConnector()
        {
            // subscribe on connection successfully event
            Connector.Connected += () =>
            {
                this.GuiAsync(() => ChangeConnectStatus(true));

                if (Connector.Adapter.IsMarketDataTypeSupported(DataType.News) && !Connector.Adapter.IsSecurityNewsOnly)
                {
                    if (Connector.Subscriptions.All(s => s.DataType != DataType.News))
                    {
                        Connector.SubscribeNews();
                    }
                }
            };

            // subscribe on connection error event
            Connector.ConnectionError += error => this.GuiAsync(() =>
            {
                ChangeConnectStatus(false);
                MessageBox.Show(this.GetWindow(), 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, msg, error) =>
                                                      this.GuiAsync(() => MessageBox.Show(this.GetWindow(), error.ToString(), LocalizedStrings.Str2956Params.Put(msg.DataType2, security)));

            Connector.SecurityReceived     += (s, sec) => _securitiesWindow.SecurityPicker.Securities.Add(sec);
            Connector.TickTradeReceived    += (s, t) => _tradesWindow.TradeGrid.Trades.Add(t);
            Connector.OrderLogItemReceived += (s, ol) => _orderLogWindow.OrderLogGrid.LogItems.Add(ol);
            Connector.Level1Received       += (s, l) => _level1Window.Level1Grid.Messages.Add(l);

            Connector.NewOrder     += Connector_OnNewOrder;
            Connector.OrderChanged += Connector_OnOrderChanged;
            Connector.OrderEdited  += Connector_OnOrderEdited;

            Connector.NewMyTrade += _myTradesWindow.TradeGrid.Trades.Add;

            Connector.PortfolioReceived += (sub, p) => _portfoliosWindow.PortfolioGrid.Positions.TryAdd(p);
            Connector.PositionReceived  += (sub, p) => _portfoliosWindow.PortfolioGrid.Positions.TryAdd(p);

            // subscribe on error of order registration event
            Connector.OrderRegisterFailed += Connector_OnOrderRegisterFailed;
            // subscribe on error of order cancelling event
            Connector.OrderCancelFailed += Connector_OnOrderCancelFailed;
            // subscribe on error of order edition event
            Connector.OrderEditFailed += Connector_OnOrderEditFailed;

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

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

            Connector.LookupTimeFramesResult += (message, timeFrames, error) =>
            {
                if (error == null)
                {
                    this.GuiAsync(() => _securitiesWindow.UpdateTimeFrames(timeFrames));
                }
            };

            var nativeIdStorage = ServicesRegistry.TryNativeIdStorage;

            if (nativeIdStorage != null)
            {
                Connector.Adapter.NativeIdStorage = nativeIdStorage;

                try
                {
                    nativeIdStorage.Init();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this.GetWindow(), ex.ToString());
                }
            }

            if (Connector.StorageAdapter != null)
            {
                LoggingHelper.DoWithLog(ServicesRegistry.EntityRegistry.Init);
                LoggingHelper.DoWithLog(ServicesRegistry.ExchangeInfoProvider.Init);

                Connector.Adapter.StorageSettings.DaysLoad = TimeSpan.FromDays(3);
                Connector.Adapter.StorageSettings.Mode     = StorageModes.Snapshot;
                Connector.LookupAll();

                Connector.SnapshotRegistry.Init();
            }

            ConfigManager.RegisterService <IMessageAdapterProvider>(new FullInMemoryMessageAdapterProvider(Connector.Adapter.InnerAdapters));

            try
            {
                if (File.Exists(_settingsFile))
                {
                    var ctx = new ContinueOnExceptionContext();
                    ctx.Error += ex => ex.LogError();

                    using (ctx.ToScope())
                        Connector.Load(new XmlSerializer <SettingsStorage>().Deserialize(_settingsFile));
                }
            }
            catch
            {
            }
        }