/// <summary> /// /// </summary> /// <returns></returns> public List <string> ObterLNGNaoEnviadosHB(long intervalo) { List <string> lstNotSent = new List <string>(); string[] keys = dctTimestampLNGHB.Keys.ToArray(); foreach (string instrumento in keys) { SinalTimestampInfo entry; if (dctTimestampLNGHB.TryGetValue(instrumento, out entry)) { if (entry != null) { TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - entry.LastTick); DateTime corte = DateTime.UtcNow.Subtract(new TimeSpan(0, 0, Convert.ToInt32(intervalo * 2 / 1000))); if (ts.TotalMilliseconds > NEGIntervaloNaoEnviados && entry.LastTick > corte.Ticks) { lstNotSent.Add(instrumento); SinalTimestampInfo newEntry = new SinalTimestampInfo(instrumento, entry.TipoSinal); newEntry.LastTick = DateTime.UtcNow.Ticks; //dctTimestampLNGHB.TryUpdate(instrumento, newEntry, entry); } } else { logger.Error("Caralho de asa LNG"); } } } return(lstNotSent); }
/// <summary> /// /// </summary> /// <returns></returns> public List <string> ObterLOFNaoEnviados() { List <string> lstNotSent = new List <string>(); string [] keys = dctTimestampLOF.Keys.ToArray(); //foreach (KeyValuePair<string, SinalTimestampInfo> entry in dctTimestampLOF) foreach (string instrumento in keys) { SinalTimestampInfo entry; if (dctTimestampLOF.TryGetValue(instrumento, out entry)) { TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - entry.LastTick); DateTime corte = DateTime.UtcNow.Subtract(new TimeSpan(TimeSpan.TicksPerMinute / 2)); if (ts.TotalMilliseconds > LOFIntervaloNaoEnviadosHB && entry.LastTick > corte.Ticks) { lstNotSent.Add(instrumento); SinalTimestampInfo newEntry = new SinalTimestampInfo(instrumento, entry.TipoSinal); newEntry.LastTick = DateTime.UtcNow.Ticks; //dctTimestampLOF.TryUpdate(instrumento, newEntry, entry); } } } return(lstNotSent); }
/// <summary> /// /// </summary> /// <param name="instrumento"></param> /// <returns></returns> public bool ShouldSendNEGStreamer(string instrumento) { try { if (String.IsNullOrEmpty(instrumento)) { return(true); } SinalTimestampInfo info = null; // Envia o sinal se for o 1o envio if (!dctTimestampNEGStreamer.TryGetValue(instrumento, out info)) { info = new SinalTimestampInfo(instrumento, ConstantesMDS.TIPO_REQUISICAO_NEGOCIOS); dctTimestampNEGStreamer.AddOrUpdate(instrumento, info, (key, oldValue) => info); return(true); } // Envia o sinal se nao estiver no horario de pregao if (DateTime.Compare(DateTime.Now, DataHoraInicioPregao) <= 0 || DateTime.Compare(DateTime.Now, DataHoraFinalPregao) >= 0) { return(true); } // Testa se o ultimo envio esta fora do intervalo TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - info.LastTick); if (ts.TotalMilliseconds >= NEGIntervalStreamer) { info.LastTick = DateTime.UtcNow.Ticks; return(true); } // Garante mandar um sinal por segundo, no minimo DateTime x = new DateTime(info.LastTick); if (String.CompareOrdinal(x.ToString("yyyyMMddHHmmss"), DateTime.UtcNow.ToString("yyyyMMddHHmmss")) < 0) { info.LastTick = DateTime.UtcNow.Ticks; return(true); } return(false); } catch (Exception ex) { logger.Error("ShouldSendNEGStreamer(): " + ex.Message, ex); } return(true); }
/// <summary> /// /// </summary> /// <param name="instrumento"></param> /// <returns></returns> public bool ShouldSendLOF(string instrumento) { if (String.IsNullOrEmpty(instrumento)) { return(true); } SinalTimestampInfo info = null; // Envia o sinal se for o 1o envio if (!dctTimestampLOF.TryGetValue(instrumento, out info)) { info = new SinalTimestampInfo(instrumento, ConstantesMDS.TIPO_REQUISICAO_LIVRO_OFERTAS); dctTimestampLOF.AddOrUpdate(instrumento, info, (key, oldValue) => info); return(true); } // Envia o sinal se nao estiver no horario de pregao if (DateTime.Compare(DateTime.Now, DataHoraInicioPregao) <= 0 || DateTime.Compare(DateTime.Now, DataHoraFinalPregao) >= 0) { return(true); } // Testa se o ultimo envio esta fora do intervalo TimeSpan ts = new TimeSpan(DateTime.UtcNow.Ticks - info.LastTick); if (ts.TotalMilliseconds >= LOFInterval) { dctTimestampLOF[instrumento].LastTick = DateTime.UtcNow.Ticks; return(true); } // Garante mandar um sinal por segundo, no minimo DateTime x = new DateTime(info.LastTick); if (String.CompareOrdinal(x.ToString("yyyyMMddHHmmss"), DateTime.UtcNow.ToString("yyyyMMddHHmmss")) < 0) { dctTimestampLOF[instrumento].LastTick = DateTime.UtcNow.Ticks; return(true); } //TODO: incluir um calculo para casos de papeis pouco negociados, // que podem sofrer 2 atualizacoes dentro do intervalo, e nao serem atualizados depois return(false); }