Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }