Ejemplo n.º 1
0
        protected void eventoUmdfThreadWork(object param)
        {
            EventoUmdfWorkerState workerstate = param as EventoUmdfWorkerState;
            long lastTick       = 0;
            long threadWatchDog = 0;

            if (workerstate != null)
            {
                logger.Info("Iniciando eventoUmdfThreadWork para channelID [" + workerstate.ChannelID + "]");

                while (bKeepRunning)
                {
                    if (MDSUtils.shouldLog(threadWatchDog, 30))
                    {
                        logger.Info("eventoUmdfThreadWork(" + workerstate.ChannelID + ") ativo");
                        threadWatchDog = DateTime.UtcNow.Ticks;
                    }

                    try
                    {
                        EventoUmdf evento;
                        if (workerstate.QueueEventos.TryDequeue(out evento))
                        {
                            //logger.InfoFormat("Processando mensagem UMDF [{0}]", evento.MsgSeqNum);

                            trataEventoUmdf(evento);

                            if (MDSUtils.shouldLog(lastTick))
                            {
                                logger.Info("eventoUmdfThreadWork(" + workerstate.ChannelID + ") msgs na fila: " + workerstate.QueueEventos.Count);
                                lastTick = DateTime.UtcNow.Ticks;
                            }

                            continue;
                        }

                        lock (workerstate.SyncObj)
                        {
                            Monitor.Wait(workerstate.SyncObj, 50);
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error("eventoUmdfThreadWork(" + workerstate.ChannelID + "): " + ex.Message, ex);
                    }
                }

                logger.Info("Finalizando eventoUmdfThreadWork para channelID [" + workerstate.ChannelID + "]");
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="param"></param>
        protected void messageFixThreadWork(object param)
        {
            FIXMessageWorkerState workerstate = param as FIXMessageWorkerState;
            long lastTick       = 0;
            long threadWatchDog = 0;

            if (workerstate != null)
            {
                logger.Info("Iniciando messageFixThreadWork para channelID [" + workerstate.ChannelID + "]");

                while (bKeepRunning)
                {
                    if (MDSUtils.shouldLog(threadWatchDog, 30))
                    {
                        logger.Info("messageFixThreadWork(" + workerstate.ChannelID + ") ativo");
                        threadWatchDog = DateTime.UtcNow.Ticks;
                    }

                    try
                    {
                        EventoFIX evento;
                        if (workerstate.QueueMensagens.TryDequeue(out evento))
                        {
                            trataMensagemFIX(evento);

                            if (MDSUtils.shouldLog(lastTick))
                            {
                                logger.Info("messageFixThreadWork(" + workerstate.ChannelID + ") msgs na fila: " + workerstate.QueueMensagens.Count);
                                lastTick = DateTime.UtcNow.Ticks;
                            }

                            continue;
                        }

                        lock (workerstate.SyncObjFIX)
                        {
                            Monitor.Wait(workerstate.SyncObjFIX, 50);
                        }
                    }
                    catch (Exception ex)
                    {
                        logger.Error("messageFixThreadWork(" + workerstate.ChannelID + "): " + ex.Message, ex);
                    }
                }

                logger.Info("Finalizando messageFixThreadWork para channelID [" + workerstate.ChannelID + "]");
            }
        }
        protected override void queueProcessor()
        {
            logger.Info("Iniciando thread para otimizar eventos");

            thOtimizadorEventos      = new Thread(new ThreadStart(otimizadorEventos));
            thOtimizadorEventos.Name = "thOtimizadorEventos-";
            thOtimizadorEventos.Start();

            logger.Info("Iniciando processamento da fila de envio streamer de LOA");
            long lastLogTicks = 0;

            while (bKeepRunning)
            {
                try
                {
                    string msglof = null;
                    lock (objLockSnapshot)
                    {
                        if (queueToStreamer.TryDequeue(out msglof))
                        {
                            if (!String.IsNullOrEmpty(msglof))
                            {
                                SocketPackage.SendData(msglof, ClientSocket);
                            }

                            if (MDSUtils.shouldLog(lastLogTicks))
                            {
                                lastLogTicks = DateTime.UtcNow.Ticks;
                                logger.Info("Mensagens na fila: " + queueToStreamer.Count);
                            }
                            continue;
                        }
                    }

                    lock (syncQueueToStreamer)
                    {
                        Monitor.Wait(syncQueueToStreamer, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("queueProcessor(): " + ex.Message, ex);
                }
            }

            logger.Info("Finalizando processamento da fila de envio streamer de LOA");
        }
Ejemplo n.º 4
0
        protected virtual void processaMensagemFIX(EventoFIX evento)
        {
            // Se nao existe thread para tratar o evento, cria
            FIXMessageWorkerState workerState = null;

            if (evento == null)
            {
                logger.Error("Mensagem FIX nao pode ser nula");
                return;
            }

            if (String.IsNullOrEmpty(evento.ChannelID))
            {
                logger.Error("Eita porra....channelID nulo");
                return;
            }

            if (!poolFixWorkers.TryGetValue(evento.ChannelID, out workerState))
            {
                logger.Info("Criando worker para  channel [" + evento.ChannelID + "]");
                workerState             = new FIXMessageWorkerState();
                workerState.ChannelID   = evento.ChannelID;
                workerState.Thread      = new Thread(new ParameterizedThreadStart(messageFixThreadWork));
                workerState.Thread.Name = myThreadName + "-Worker-" + workerState.ChannelID;
                workerState.Thread.Start(workerState);

                poolFixWorkers.Add(evento.ChannelID, workerState);
            }

            bool bsinaliza = workerState.QueueMensagens.IsEmpty;

            workerState.QueueMensagens.Enqueue(evento);
            if (MDSUtils.shouldLog(workerState.lastEnqueueLog, 30))
            {
                logger.Info("processaMensagemFIX para channelID [" + workerState.ChannelID + "] fila:" + workerState.QueueMensagens.Count);
                workerState.lastEnqueueLog = DateTime.UtcNow.Ticks;
            }

            //if (bsinaliza)
            //{
            //    lock (workerState.SyncObjFIX)
            //    {
            //        Monitor.Pulse(workerState.SyncObjFIX);
            //    }
            //}
        }
Ejemplo n.º 5
0
        protected virtual void procRun()
        {
            logger.Info(myThreadName + " - iniciando procRun()");
            long threadWatchDog = 0;

            while (bKeepRunning)
            {
                if (MDSUtils.shouldLog(threadWatchDog, 30))
                {
                    logger.Info("procRun() ativo");
                    threadWatchDog = DateTime.UtcNow.Ticks;
                }

                try
                {
                    EventoUmdf evento;
                    if (queueEventos.TryDequeue(out evento))
                    {
                        //logger.InfoFormat("Distribuindo mensagem UMDF [{0}]", evento.MsgSeqNum);

                        processaEventoUmdf(evento);

                        if (MDSUtils.shouldLog(lastEventTicks))
                        {
                            logger.Info("EnqueueEventoUmdf - Mensagens na fila principal: " + queueEventos.Count);
                            lastEventTicks = DateTime.UtcNow.Ticks;
                        }

                        continue;
                    }

                    lock (SyncObj)
                    {
                        Monitor.Wait(SyncObj, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("procRun(): " + ex.Message, ex);
                }
            }

            logger.Info(myThreadName + " End of procRun()");
        }
Ejemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        protected virtual void procRunFix()
        {
            logger.Info(myThreadName + " - iniciando procRunFix()");

            long threadWatchDog = 0;

            while (bKeepRunning)
            {
                if (MDSUtils.shouldLog(threadWatchDog, 30))
                {
                    logger.Info("procRunFix() ativo");
                    threadWatchDog = DateTime.UtcNow.Ticks;
                }

                try
                {
                    EventoFIX evento;
                    if (queueFIX.TryDequeue(out evento))
                    {
                        processaMensagemFIX(evento);

                        if (MDSUtils.shouldLog(lastEventTicks))
                        {
                            logger.Info("procRunFix - Mensagens na fila principal: " + queueFIX.Count);
                            lastEventTicks = DateTime.UtcNow.Ticks;
                        }

                        continue;
                    }

                    lock (SyncObjFix)
                    {
                        Monitor.Wait(SyncObjFix, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("procRunFix(): " + ex.Message, ex);
                }
            }

            logger.Info(myThreadName + " End of procRunFix()");
        }
        //protected override EPStatement createStatement(string tipo, string instrumento)
        //{
        //    try
        //    {
        //        string consultaEsper = "";

        //        consultaEsper = "select * from EventoHttpNegocio where instrumento='" + instrumento + "'";

        //        consultaEsper += " output all every 1 msec";

        //        EPStatement comandoEsper = NesperManager.Instance.epService.EPAdministrator.CreateEPL(consultaEsper);
        //        comandoEsper.Events += new UpdateEventHandler(eventUpdateHandler);

        //        logger.Debug("Consulta [" + consultaEsper + "] cadastrada no ESPER!");

        //        return comandoEsper;
        //    }
        //    catch (EPException epex)
        //    {
        //        logger.Error("Exception in createEPL - " + epex.Message, epex);
        //    }
        //    catch (Exception ex)
        //    {
        //        logger.Error("Error in CreateStatement() " + ex.Message, ex);
        //    }

        //    return null;
        //}


        protected override void queueProcessor()
        {
            logger.Info("Iniciando processamento da fila de envio streamer de Negocios");
            long lastLogTicks = 0;

            while (bKeepRunning)
            {
                try
                {
                    string msgneg = null;

                    if (queueToStreamer.TryDequeue(out msgneg))
                    {
                        if (!String.IsNullOrEmpty(msgneg))
                        {
                            SocketPackage.SendData(msgneg, ClientSocket);
                        }

                        if (MDSUtils.shouldLog(lastLogTicks))
                        {
                            lastLogTicks = DateTime.UtcNow.Ticks;
                            logger.Info("Mensagens na fila: " + queueToStreamer.Count);
                        }

                        continue;
                    }

                    lock (syncQueueToStreamer)
                    {
                        Monitor.Wait(syncQueueToStreamer, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("queueProcessor(): " + ex.Message, ex);
                }
            }

            logger.Info("Finalizando processamento da fila de envio streamer de Negocios");
        }
Ejemplo n.º 8
0
        protected void queueProcessor()
        {
            logger.Info("Iniciando processamento da fila de envio Analise Grafica");
            long lastLogTicks = 0;

            while (bKeepRunning)
            {
                try
                {
                    string msgNEG = null;
                    if (queueToAnaliseGrafica.TryDequeue(out msgNEG))
                    {
                        SocketPackage.SendData(msgNEG, ClientSocket);

                        if (MDSUtils.shouldLog(lastLogTicks))
                        {
                            lastLogTicks = DateTime.UtcNow.Ticks;
                            logger.Info("Fila de eventos : " + queueToAnaliseGrafica.Count);
                        }
                        logger.DebugFormat("Mensagem [{0}]", msgNEG);

                        continue;
                    }

                    lock (syncQueueToAnaliseGrafica)
                    {
                        Monitor.Wait(syncQueueToAnaliseGrafica, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("queueProcessor(): " + ex.Message, ex);
                }
            }

            logger.Info("Finalizando processamento da fila de envio home broker de Negocios");
        }
Ejemplo n.º 9
0
        protected void queueProcessor()
        {
            logger.Info("Iniciando processamento da fila de envio home broker de livro de ofertas agregado");
            long lastLogTicks = 0;

            while (bKeepRunning)
            {
                try
                {
                    string msgLOA = null;
                    if (queueToHomeBroker.TryDequeue(out msgLOA))
                    {
                        SocketPackage.SendData(msgLOA, ClientSocket);

                        if (MDSUtils.shouldLog(lastLogTicks))
                        {
                            lastLogTicks = DateTime.UtcNow.Ticks;
                            logger.Info("Fila de eventos : " + queueToHomeBroker.Count);
                        }

                        continue;
                    }

                    lock (syncObj)
                    {
                        Monitor.Wait(syncObj, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("queueProcessor(): " + ex.Message, ex);
                }
            }

            logger.Info("Finalizando processamento da fila de envio home broker de livro de ofertas");
        }
        private void otimizadorEventos()
        {
            logger.Info("Iniciando otimizacao de eventos");
            long   lastLogTicks         = 0;
            long   lastOtimizationTicks = 0;
            string lastInstrumento      = null;

            EventoHttpLivroOfertasAgregado evtCache = null;

            while (bKeepRunning)
            {
                try
                {
                    EventoHttpLivroOfertasAgregado evento;
                    if (queueEventosLOA.TryDequeue(out evento))
                    {
                        // Se houver cache, descarrega
                        if (!String.IsNullOrEmpty(lastInstrumento))
                        {
                            if (!lastInstrumento.Equals(evento.instrumento))
                            {
                                flushEventCache(evtCache);
                                lastInstrumento = null;
                                evtCache        = null;
                            }
                        }

                        // Se cache vazio, cria um novo cache
                        if (String.IsNullOrEmpty(lastInstrumento))
                        {
                            lastInstrumento      = evento.instrumento;
                            evtCache             = new EventoHttpLivroOfertasAgregado();
                            evtCache.cabecalho   = evento.cabecalho;
                            evtCache.instrumento = evento.instrumento;
                            evtCache.livroCompra = new List <Dictionary <string, string> >();
                            evtCache.livroVenda  = new List <Dictionary <string, string> >();
                        }

                        // Se for igual, acrescenta as operacoes de livro no final
                        if (lastInstrumento.Equals(evento.instrumento))
                        {
                            if (evento.livroCompra != null && evento.livroCompra.Count > 0)
                            {
                                evtCache.livroCompra.AddRange(evento.livroCompra);
                            }

                            if (evento.livroVenda != null && evento.livroVenda.Count > 0)
                            {
                                evtCache.livroVenda.AddRange(evento.livroVenda);
                            }
                        }

                        if (MDSUtils.shouldLog(lastLogTicks))
                        {
                            lastLogTicks = DateTime.UtcNow.Ticks;
                            logger.Info("Fila de eventos a serem otimizados: " + queueEventosLOA.Count);
                        }

                        continue;
                    }

                    // Se a fila estiver vazia e estourar o timeout, descarrega o cache
                    //if (!String.IsNullOrEmpty(lastInstrumento) && (DateTime.UtcNow.Ticks - lastOtimizationTicks) > TimeSpan.TicksPerMillisecond)
                    if (!String.IsNullOrEmpty(lastInstrumento))
                    {
                        flushEventCache(evtCache);
                        lastInstrumento = null;
                        evtCache        = null;

                        continue;
                    }

                    lock (syncQueueEventosLOA)
                    {
                        Monitor.Wait(syncQueueEventosLOA, 50);
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("otimizadorEventos(): " + ex.Message, ex);
                }
            }
        }