Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
 /// <summary>
 /// приостановить подключение
 /// </summary>
 private void Disconnect()
 {
     AstsServer.Disconnect();
     Thread.Sleep(5000);
 }
Exemplo n.º 4
0
        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;
                    }
                }
            }
        }
Exemplo n.º 5
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;
                    }
                }
            }
        }