private void Dispose() { try { if (AstsServer != null && AstsServer.IsConnected) { AstsServer.Disconnect(); } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } if (AstsServer != null) { AstsServer.ConnectedEvent -= Connected; AstsServer.DisconnectedEvent -= Disconnected; AstsServer.NewSecurityEvent -= NewSecurityEvent; AstsServer.PortfolioUpdateEvent -= AddPortfolio; AstsServer.NewTradesEvent -= NewTradesEvent; AstsServer.NewMyTradeEvent -= AddMyTrade; AstsServer.MarketDepthUpdateEvent -= UpdateBidAsk; AstsServer.OrderUpdateEvent -= UpdateOrder; AstsServer.OrderFailedEvent -= OrderFailedEvent; AstsServer.SecurityMoexUpdateEvent -= LevelOneUpdateEvent; } AstsServer = null; _getPortfoliosAndSecurities = false; }
/// <summary> /// начать процесс подключения /// </summary> private void Connect() { StringBuilder settings = new StringBuilder(); /*HOST={ip1:port1,ip2:port2,...} * SERVER={te_access_point_id} * USERID={te_userid} * PASSWORD={te_password} * INTERFACE={te_interface_id} * FEEDBACK={contact_info}*/ if (!Directory.Exists(Application.StartupPath + "\\AstsBridge")) { Directory.CreateDirectory(Application.StartupPath + "\\AstsBridge"); } settings.Append("HOST=" + ServerAdress + "\r\n"); settings.Append("PREFERREDHOST=" + ServerAdress + "\r\n"); settings.Append("SERVER=" + ServerName + "\r\n"); settings.Append("SERVICE=" + ServiseName + "\r\n"); settings.Append("USERID=" + UserLogin + "\r\n"); settings.Append("PASSWORD="******"\r\n"); settings.Append("INTERFACE=" + "IFCBroker_26" + "\r\n"); settings.Append("COMPRESSION=" + "0" + "\r\n"); settings.Append("LOGFOLDER=" + Application.StartupPath + "\\AstsBridge" + "\r\n"); settings.Append("LOGGING=" + "2,2" + "\r\n"); AstsServer.Connect(settings); _lastStartServerTime = DateTime.Now; Thread.Sleep(10000); }
/// <summary> /// приостановить подключение /// </summary> private void Disconnect() { AstsServer.Disconnect(); Thread.Sleep(5000); }
private void PrimeThreadArea() { DateTime timeLastProcess = DateTime.MinValue; while (true) { Thread.Sleep(3); lock (_serverLocker) { try { if (AstsServer == null) { SendLogMessage("Создаём коннектор Asts Bridge", LogMessageType.System); CreateNewServer(); continue; } bool stateIsActiv = AstsServer.IsConnected; if (stateIsActiv == false && _serverStatusNead == ServerConnectStatus.Connect) { SendLogMessage("Запущена процедура активации подключения", LogMessageType.System); Connect(); continue; } if (stateIsActiv && _serverStatusNead == ServerConnectStatus.Disconnect) { SendLogMessage("Запущена процедура отключения подключения", LogMessageType.System); Disconnect(); continue; } if (stateIsActiv == false) { continue; } if (_candleManager == null) { SendLogMessage("Создаём менеджер свечей", LogMessageType.System); StartCandleManager(); continue; } if (_metaDataIsExist == false) { SendLogMessage("Запрашиваем схему данных у сервера", LogMessageType.System); AstsServer.GetStructureData(); _metaDataIsExist = true; } if (_getPortfoliosAndSecurities == false) { SendLogMessage("Скачиваем бумаги и портфели", LogMessageType.System); AstsServer.OpenTablesInFirstTime(); _getPortfoliosAndSecurities = true; continue; } if (Portfolios == null || Securities == null) { SendLogMessage("Бумаги или портфели по прежнему недоступны. Ошибка при открытии таблиц Asts Bridge", LogMessageType.System); _getPortfoliosAndSecurities = false; Thread.Sleep(10000); SendLogMessage("Запущена процедура отключения подключения", LogMessageType.System); Disconnect(); } if (Dislocation == AstsDislocation.Colo) { AstsServer.Process(); } else { if (timeLastProcess == DateTime.MinValue || timeLastProcess.AddMilliseconds(100) < DateTime.Now) { AstsServer.Process(); timeLastProcess = DateTime.Now; } } } catch (Exception error) { SendLogMessage("КРИТИЧЕСКАЯ ОШИБКА. Реконнект", LogMessageType.Error); SendLogMessage(error.ToString(), LogMessageType.Error); ServerStatus = ServerConnectStatus.Disconnect; Dispose(); // очищаем данные о предыдущем коннекторе Thread.Sleep(5000); // переподключаемся _threadPrime = new Thread(PrimeThreadArea); _threadPrime.CurrentCulture = new CultureInfo("ru-RU"); _threadPrime.IsBackground = true; _threadPrime.Start(); if (NeadToReconnectEvent != null) { NeadToReconnectEvent(); } return; } } } }
private void PrimeThreadArea() { DateTime timeLastProcess = DateTime.MinValue; while (true) { Thread.Sleep(3); lock (_serverLocker) { try { if (AstsServer == null) { CreateNewServer(); continue; } bool stateIsActiv = AstsServer.IsConnected; if (stateIsActiv == false && _serverStatusNead == ServerConnectStatus.Connect) { SendLogMessage(OsLocalization.Market.Message8, LogMessageType.System); Connect(); continue; } if (stateIsActiv && _serverStatusNead == ServerConnectStatus.Disconnect) { SendLogMessage(OsLocalization.Market.Message9, LogMessageType.System); Disconnect(); continue; } if (stateIsActiv == false) { continue; } if (_candleManager == null) { StartCandleManager(); continue; } if (_metaDataIsExist == false) { AstsServer.GetStructureData(); _metaDataIsExist = true; } if (_getPortfoliosAndSecurities == false) { AstsServer.OpenTablesInFirstTime(); _getPortfoliosAndSecurities = true; continue; } if (Portfolios == null || Securities == null) { _getPortfoliosAndSecurities = false; Thread.Sleep(10000); Disconnect(); } if (Dislocation == AstsDislocation.Colo) { AstsServer.Process(); } else { if (timeLastProcess == DateTime.MinValue || timeLastProcess.AddMilliseconds(100) < DateTime.Now) { AstsServer.Process(); timeLastProcess = DateTime.Now; } } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); ServerStatus = ServerConnectStatus.Disconnect; Dispose(); // очищаем данные о предыдущем коннекторе Thread.Sleep(5000); // переподключаемся _threadPrime = new Thread(PrimeThreadArea); _threadPrime.CurrentCulture = new CultureInfo("ru-RU"); _threadPrime.IsBackground = true; _threadPrime.Start(); if (NeadToReconnectEvent != null) { NeadToReconnectEvent(); } return; } } } }