Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="report"></param>
        public void OrdemAlterada(OrdemInfo report)
        {
            // Envia o report para os assinantes
            logger.Debug("On OrdemAlterada(): recebeu report ");

            TradutorFix.DumpOrdemInfo(report);

            lock (_executionsReportsSubscribers)
            {
                if (_executionsReportsSubscribers.Count > 0)
                {
                    _sendExecutionReport(report);
                }
                else
                {
                    _enqueueExecutionReport(report);
                }
            }


            // Reseta o contador do heartbeat
            lock (_canais)
            {
                if (_canais.ContainsKey(report.Exchange + report.ChannelID))
                {
                    CanalInfo canal = (CanalInfo)_canais[report.Exchange + report.ChannelID];
                    canal.Conectado     = true;
                    canal.LastHeartbeat = _getSecsFromTicks(DateTime.Now.Ticks);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Envia um pedido de execucao de ordem para o canal correspondente
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public ExecutarOrdemResponse ExecutarOrdem(ExecutarOrdemRequest request)
        {
            ExecutarOrdemResponse response = new ExecutarOrdemResponse();
            CanalInfo             _canal   = null;
            StatusRoteamentoEnum  status   = StatusRoteamentoEnum.Sucesso;
            string msg = "Ordem Enviada";

            logger.Debug("*** ExecutarOrdem()");

            TradutorFix.DumpOrdemInfo(request.info);

            try
            {
                _canal = (CanalInfo)_canais[request.info.Exchange + request.info.ChannelID];

                if (_canal == null)
                {
                    msg    = "Nao ha canal configurado para " + request.info.Exchange + "-" + request.info.ChannelID;
                    status = StatusRoteamentoEnum.Erro;
                    logger.Info(msg);
                    response.DadosRetorno = RoteadorOrdensUtil.FormatarRespostaEO(msg, status);
                }
                else
                {
                    if (_canal.roteador == null || _canal.Conectado == false)
                    {
                        status = StatusRoteamentoEnum.Erro;
                        msg    = "Nao ha canal ativo e conectado para " + request.info.Exchange + "-" + request.info.ChannelID;
                        logger.Info(msg);
                        response.DadosRetorno = RoteadorOrdensUtil.FormatarRespostaEO(msg, status);
                    }
                    else
                    {
                        _criaReportStore(request.info.ClOrdID);

                        _notificaEnvioParaCanal(request.info);

                        response = _canal.roteador.ExecutarOrdem(request);
                    }
                }
            }
            catch (Exception ex)
            {
                msg    = "Error ExecutarOrdem(): " + ex.Message;
                status = StatusRoteamentoEnum.Erro;
                logger.Error(msg + "-" + ex.StackTrace);
                response.DadosRetorno = RoteadorOrdensUtil.FormatarRespostaEO(msg, status);

                if (_canal != null)
                {
                    _resetCanal(_canal);
                }
            }

            logger.Debug("*** End of ExecutarOrdem()");

            return(response);
        }