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