示例#1
0
        public void Run()
        {
            try
            {
                logger.Info("Iniciando thread de repasse de mensagens ao subscriber");

                prepareNesper();

                int  qtdeFila      = 0;
                long lastHeartbeat = 0;
                while (_bKeepRunning)
                {
                    queueSem.WaitOne(250);

                    lock (queue)
                    {
                        qtdeFila = queue.Count;
                    }

                    for (int i = 0; i < qtdeFila; i++)
                    {
                        object evento;
                        string msgid = "";
                        lock (queue)
                        {
                            evento = queue.Dequeue();
                        }

                        if (evento.GetType() == typeof(EventoMega))
                        {
                            EventoMega mega = (EventoMega)evento;

                            msgid = mega.MsgID;

                            repassaEventoMega(mega);
                        }

                        if (evento.GetType() == typeof(EventoCBLC))
                        {
                            EventoCBLC cblc = (EventoCBLC)evento;
                            msgid = cblc.MsgID;
                            repassaEventoCBLC(cblc);
                        }

                        logger.Debug("Encaminhou mensagem [" + msgid + "]");
                    }

                    TimeSpan tspan = new TimeSpan(DateTime.Now.Ticks - lastHeartbeat);

                    if (tspan.TotalSeconds > 30)
                    {
                        lastHeartbeat = DateTime.Now.Ticks;
                        subscriberChannel.OnHeartBeat();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("Run() Error: " + ex.Message);

                if (Ativador.IsValidChannel(subscriberChannel))
                {
                    Ativador.AbortChannel(subscriberChannel);
                }
            }

            ServicoConectorSTM.epService.EPAdministrator.GetStatement(eplName1).RemoveListener(this);
            ServicoConectorSTM.epService.EPAdministrator.GetStatement(eplName2).RemoveListener(this);

            logger.Info("Thread finalizada [" + guid.ToString() + "]");
        }