protected void _sendMDSLoginMSG(MDSPackageSocket mdsSocket) { string msg = "QLPP"; try { if (ConfigurationManager.AppSettings["EfetuarLogonMDS"] == null) { logger.Warn("Chave 'EfetuarLogonMDS' nao declarada no appsettings. Nao efetua login"); return; } if (!ConfigurationManager.AppSettings["EfetuarLogonMDS"].ToString().Equals("true")) { logger.Warn("Nao efetua login no MDS, EfetuarLogonMDS=false."); return; } msg += DateTime.Now.ToString("yyyyMMddHHmmssfff"); msg += System.Environment.MachineName.PadRight(20); logger.Info("Efetuando login no MDS [" + msg + "]"); if (mdsSocket != null && mdsSocket.IsConectado()) { mdsSocket.SendData(msg, true); } logger.Info("Mensagem de login enviada ao MDS"); } catch (Exception ex) { logger.Info("_sendMDSLoginMSG():" + ex.Message, ex); } }
protected virtual void MonitorConexaoMDS() { int i = 0; int iTrialInterval = 600; logger.Info("Iniciando thread de monitoracao de conexao com MDS"); while (bKeepRunning) { try { // Reconecta a cada 5 min if (!lSocket.IsConectado()) { if (i > iTrialInterval) { _enviaAlertaDesconexao(lSocket.IpAddr, lSocket.Port); logger.Info("Reabrindo conexao com MDS..."); // Não precisa acrescentar outro Handler no OnNegocio, quando ocorre restart do MDS //lSocket.OnFastQuoteReceived += new MDSMessageReceivedHandler(OnNegocio); lSocket.OpenConnection(); _sendMDSLoginMSG(lSocket); i = 0; } else { i++; // Configura intervalos de 1 minuto durante o dia ou // 5 minutos if (DateTime.Now.Hour > 7 && DateTime.Now.Hour < 21) { iTrialInterval = 600; } else { iTrialInterval = 3000; } } } else { if (i > 600) { logger.Info("Conexao com MDS ativa " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + " LastPkt: [" + QueueManager.Instance.LastNegocioPacket.ToString("dd/MM/yyyy HH:mm:ss.ffff") + "] [" + QueueManager.Instance.LastNegocioMsg + "]"); // Verifica dessincronizacao de sinal if (DateTime.Now.DayOfWeek != DayOfWeek.Saturday && DateTime.Now.DayOfWeek != DayOfWeek.Sunday) { if (DateTime.Now.Hour > 7 && DateTime.Now.Hour < 20) { TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - lSocket.HorarioUltimaSonda.Ticks); if (ts.TotalMilliseconds > MaxDifHorarioBolsa) { _enviaAlertaAtraso(lSocket.IpAddr, lSocket.Port); } } } // Verifica ultima comunicacao com MDS TimeSpan tslastpkt = new TimeSpan(DateTime.Now.Ticks - lSocket.LastPacket.Ticks); if (tslastpkt.TotalMilliseconds > TimeoutMDS) { logger.Warn("Finalizando conexao com MDS por timeout!!!"); lSocket.CloseConnection(); } i = 0; } else { i++; } } Thread.Sleep(100); } catch (Exception ex) { logger.Fatal("MonitorCotacaoMDS(): " + ex.Message, ex); Thread.Sleep(1000); } } logger.Info("Thread de monitoracao de conexao com MDS finalizacao"); }