/// <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(); }
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); }
/// <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); } }
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); } }
/// <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"); }
/// <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); }