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;
                    }
                }
            }
        }
Beispiel #2
0
        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;
                    }
                }
            }
        }