コード例 #1
0
 /// <summary>
 /// Envia o relatorio de execucao para os assinantes
 /// </summary>
 /// <param name="order">objeto OrdemInfo</param>
 private void _sendConnectionStatus(StatusConexaoBolsaInfo conexao)
 {
     lock (queueStatus)
     {
         queueStatus.Enqueue(conexao);
     }
     semGoHorse.Release();
 }
コード例 #2
0
        public void StatusConexaoAlterada(StatusConexaoBolsaInfo status)
        {
            string msg = "";

            msg += "Bolsa ..: " + status.Bolsa + "\r\n";
            msg += "Operador ..: " + status.Operador + "\r\n";
            msg += "Conectado .: " + status.Conectado.ToString() + "\r\n";

            this.txtConexoes.Text = msg;
            //_addMsg(msg);
        }
コード例 #3
0
        /// <summary>
        /// Envia o relatorio de execucao para os assinantes
        /// </summary>
        /// <param name="order">objeto OrdemInfo</param>
        protected virtual void _sendConnectionStatus()
        {
            List <IRoteadorOrdensCallback> toDelete = new List <IRoteadorOrdensCallback>();

            StatusConexaoBolsaInfo conexao = new StatusConexaoBolsaInfo();

            conexao.Bolsa     = _config.Bolsa;
            conexao.Operador  = _config.Operador;
            conexao.Conectado = _bConectadoBolsa;

            try
            {
                lock (_exchangeStatusSubscribers)
                {
                    foreach (IRoteadorOrdensCallback subscriber in _exchangeStatusSubscribers)
                    {
                        if (Ativador.IsValidChannel(subscriber))
                        {
                            try
                            {
                                subscriber.StatusConexaoAlterada(conexao);
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex);

                                logger.Info("Abortando channel para assinante: " + subscriber.ToString());
                                Ativador.AbortChannel(subscriber);

                                logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                                toDelete.Add(subscriber);
                            }
                        }
                        else
                        {
                            logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                            toDelete.Add(subscriber);
                        }
                    }

                    // Remove os assinantes abandonados/falhos da lista
                    foreach (IRoteadorOrdensCallback subscriber in toDelete)
                    {
                        _exchangeStatusSubscribers.Remove(subscriber);
                    }

                    toDelete.Clear();
                }
            }
            catch (Exception ex)
            {
                logger.Error("Erro em _sendExecutionReport(): " + ex.Message, ex);
            }
        }
コード例 #4
0
        public void StatusConexaoAlterada(StatusConexaoBolsaInfo status)
        {
            gLog4Net.Debug(string.Format("Ex [{0}] Chan [{1}] Conn [{2}]", status.Bolsa, status.Operador, status.Conectado));

            Timestamp = _getSecsFromTicks(DateTime.Now.Ticks);

            if (OnStatusConexao != null)
            {
                OnStatusConexao(status);
            }
        }
コード例 #5
0
        /// <summary>
        /// Monitor de conexoes aos canais de comunicacao
        /// </summary>
        private void RunMonitor()
        {
            logger.Info("Iniciando thread de monitoracao de canais");
            int _iMonitorConexoes = 0;

            while (_bKeepRunning)
            {
                // 4 * 250 = 1 segundo
                if (_iMonitorConexoes == 30 * 4)
                {
                    lock (_canais)
                    {
                        foreach (CanalInfo canal in _canais.Values)
                        {
                            // Se nao receber um Status info do canal em 45 segundos
                            // marca como desconectado
                            if ((_getSecsFromTicks(DateTime.Now.Ticks) - canal.LastHeartbeat) > 45)
                            {
                                StatusConexaoBolsaInfo status = new StatusConexaoBolsaInfo();
                                status.Bolsa     = canal.Exchange;
                                status.Operador  = Convert.ToInt32(canal.ChannelID);
                                status.Conectado = canal.Conectado = false;

                                _resetCanal(canal);

                                _sendConnectionStatus(status);
                            }
                        }
                    }

                    _iMonitorConexoes = 0;
                }
                else
                {
                    _iMonitorConexoes++;
                }

                Thread.Sleep(250);
            }

            logger.Info("Thread de monitoracao de canais finalizada");
        }
コード例 #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="status"></param>
        public void StatusConexaoAlterada(StatusConexaoBolsaInfo status)
        {
            logger.Debug("On StatusConexaoAlterada(): recebeu status ");

            logger.Debug("Bolsa ..: " + status.Bolsa);
            logger.Debug("Operador ..: " + status.Operador);
            logger.Debug("Conectado .: " + status.Conectado.ToString());

            lock (_canais)
            {
                if (_canais.ContainsKey(status.Bolsa + status.Operador))
                {
                    CanalInfo canal = (CanalInfo)_canais[status.Bolsa + status.Operador];

                    canal.LastHeartbeat = _getSecsFromTicks(DateTime.Now.Ticks);
                    canal.Conectado     = status.Conectado;
                    canal.roteador.Ping(new PingRequest());
                }
            }

            _sendConnectionStatus(status);
        }