Beispiel #1
0
        /// <summary>
        /// Envia o relatorio de execucao para os assinantes
        /// </summary>
        /// <param name="order">objeto OrdemInfo</param>
        protected virtual void _sendConnectionStatus()
        {
            List <IRoteadorOrdensCallback> toDelete = new List <IRoteadorOrdensCallback>();

            StatusConexaoBolsaInfo conexao = new StatusConexaoBolsaInfo();

            conexao.Bolsa     = _config.Bolsa;
            conexao.Operador  = _config.Operador;
            conexao.Conectado = _bConectadoBolsa;

            try
            {
                lock (_exchangeStatusSubscribers)
                {
                    foreach (IRoteadorOrdensCallback subscriber in _exchangeStatusSubscribers)
                    {
                        if (Ativador.IsValidChannel(subscriber))
                        {
                            try
                            {
                                subscriber.StatusConexaoAlterada(conexao);
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex);

                                logger.Info("Abortando channel para assinante: " + subscriber.ToString());
                                Ativador.AbortChannel(subscriber);

                                logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                                toDelete.Add(subscriber);
                            }
                        }
                        else
                        {
                            logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                            toDelete.Add(subscriber);
                        }
                    }

                    // Remove os assinantes abandonados/falhos da lista
                    foreach (IRoteadorOrdensCallback subscriber in toDelete)
                    {
                        _exchangeStatusSubscribers.Remove(subscriber);
                    }

                    toDelete.Clear();
                }
            }
            catch (Exception ex)
            {
                logger.Error("Erro em _sendExecutionReport(): " + ex.Message, ex);
            }
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        private void heartBeatProc()
        {
            long lastHeartBeat = DateTime.MinValue.Ticks;

            while (_bKeepRunning)
            {
                List <IDropCopyCallback> toDelete = new List <IDropCopyCallback>();
                TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - lastHeartBeat);
                if (ts.TotalMilliseconds >= 30000)
                {
                    lastHeartBeat = DateTime.Now.Ticks;
                    logger.Info("Enviando Heartbeat para " + _lstDropCopySubscribers.Count + " subscribers");

                    foreach (IDropCopyCallback subscriber in _lstDropCopySubscribers)
                    {
                        if (Ativador.IsValidChannel(subscriber))
                        {
                            try
                            {
                                subscriber.HeartBeat();
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex);

                                logger.Info("Abortando channel para assinante: " + subscriber.ToString());
                                Ativador.AbortChannel(subscriber);

                                logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                                toDelete.Add(subscriber);
                            }
                        }
                        else
                        {
                            logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                            toDelete.Add(subscriber);
                        }
                    }

                    // Remove os assinantes abandonados/falhos da lista
                    foreach (IDropCopyCallback subscriber in toDelete)
                    {
                        _lstDropCopySubscribers.Remove(subscriber);
                    }

                    toDelete.Clear();
                }
                Thread.Sleep(250);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Envia o relatorio de execucao para os assinantes
        /// </summary>
        /// <param name="order">objeto OrdemInfo</param>
        private void _dispatchExecutionReport(OrdemInfo order)
        {
            List <IRoteadorOrdensCallback> toDelete = new List <IRoteadorOrdensCallback>();

            try
            {
                lock (_executionsReportsSubscribers)
                {
                    foreach (IRoteadorOrdensCallback subscriber in _executionsReportsSubscribers)
                    {
                        if (Ativador.IsValidChannel(subscriber))
                        {
                            try
                            {
                                subscriber.OrdemAlterada(order);
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex);

                                logger.Info("Abortando channel para assinante: " + subscriber.ToString());
                                Ativador.AbortChannel(subscriber);

                                logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                                toDelete.Add(subscriber);
                            }
                        }
                        else
                        {
                            logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                            toDelete.Add(subscriber);
                        }
                    }

                    // Remove os assinantes abandonados/falhos da lista
                    foreach (IRoteadorOrdensCallback subscriber in toDelete)
                    {
                        _executionsReportsSubscribers.Remove(subscriber);
                    }

                    toDelete.Clear();
                }
            }
            catch (Exception ex)
            {
                logger.Error("Erro em _sendExecutionReport(): " + ex.Message, ex);
            }
        }
Beispiel #4
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() + "]");
        }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        private void envioCallbackReportsProc()
        {
            List <IDropCopyCallback> toDelete = new List <IDropCopyCallback>();

            while (_bKeepRunning)
            {
                List <OrdemInfo> lstOrdems = null;
                lock (qOrdemInfo)
                {
                    if (qOrdemInfo.Count > 0)
                    {
                        lstOrdems = qOrdemInfo.ToList();
                    }
                    qOrdemInfo.Clear();
                }

                if (lstOrdems != null)
                {
                    foreach (OrdemInfo info in lstOrdems)
                    {
                        foreach (IDropCopyCallback subscriber in _lstDropCopySubscribers)
                        {
                            if (Ativador.IsValidChannel(subscriber))
                            {
                                try
                                {
                                    subscriber.OrdemAlterada(info);
                                }
                                catch (Exception ex)
                                {
                                    logger.Error(ex);

                                    logger.Info("Abortando channel para assinante: " + subscriber.ToString());
                                    Ativador.AbortChannel(subscriber);

                                    logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                                    toDelete.Add(subscriber);
                                }
                            }
                            else
                            {
                                logger.Info("Removendo assinante da lista: " + subscriber.ToString());
                                toDelete.Add(subscriber);
                            }
                        }
                    }

                    // Remove os assinantes abandonados/falhos da lista
                    foreach (IDropCopyCallback subscriber in toDelete)
                    {
                        _lstDropCopySubscribers.Remove(subscriber);
                    }

                    toDelete.Clear();
                }
                else
                {
                    Thread.Sleep(100);
                }
            }
        }