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 { } }