Ejemplo n.º 1
0
        /// <summary>
        /// Abre o canal de callbacks com o Roteador e efetua a assinatura
        /// </summary>
        /// <param name="objectimpl"></param>
        private void _assinaCallbackRoteador(IRoteadorOrdensCallback objectimpl)
        {
            try
            {
                logger.Info("Chamando ativador para instanciar o cliente do roteador...");

                gClienteRoteadorOrdens = Ativador.Get <IAssinaturasRoteadorOrdensCallback>(objectimpl);

                if (gClienteRoteadorOrdens != null)
                {
                    logger.Info("Cliente do roteador instanciado, enviando request de assinatura...");

                    AssinarExecucaoOrdemResponse lResposta = gClienteRoteadorOrdens.AssinarExecucaoOrdens(new AssinarExecucaoOrdemRequest());                         // Faz a chamada pra abrir a conexão com o roteador; só serve pra enviar o contexto, e o roteador assinar a ponte duplex

                    if (lResposta.StatusResposta == Library.MensagemResponseStatusEnum.OK)
                    {
                        logger.Info("Conexão com o roteador aberta, resposta do servidor: [" + lResposta.StatusResposta + "] [" + lResposta.DescricaoResposta + "]");                    // Abriu ok, solta o evento de mensagem
                    }
                    else
                    {
                        logger.Info("Conexão com o roteador aberta, resposta do servidor: [" + lResposta.StatusResposta + "] [" + lResposta.DescricaoResposta + "]"); // Erro na abertura de conexão; TODO: verificar protocolo de erro nesse caso

                        gClienteRoteadorOrdens = null;                                                                                                                // Setando como null pra tentar novamente depois, ver conforme o protocolo o que fazer
                    }

                    // Assina os status de conexao a bolsa para manter o canal aberto.
                    AssinarStatusConexaoBolsaResponse resp = gClienteRoteadorOrdens.AssinarStatusConexaoBolsa(new AssinarStatusConexaoBolsaRequest());
                    _lastStatusBolsa = DateTime.Now.Ticks;
                }
            }
            catch (Exception ex)
            {
                logger.Error("Erro em _assinaCallbackRoteador():" + ex.Message, ex);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// AssinarStatusConexaoBolsa - trata os pedidos de assinatura dos eventos de conexao e desconexao a bolsa
        /// </summary>
        /// <param name="request">obejto do tipo AssinarStatusConexaoBolsaRequest</param>
        /// <returns>objeto do tipo AssinarStatusConexaoBolsaResponse</returns>
        public AssinarStatusConexaoBolsaResponse  AssinarStatusConexaoBolsa(AssinarStatusConexaoBolsaRequest request)
        {
            IRoteadorOrdensCallback subscriber = Ativador.GetCallback <IRoteadorOrdensCallback>();

            logger.Debug("Recebeu pedido de assinatura de status de conexao: " + ((IContextChannel)subscriber).RemoteAddress.ToString());

            lock (_exchangeStatusSubscribers)
            {
                _exchangeStatusSubscribers.Add(subscriber);
            }

            return(new AssinarStatusConexaoBolsaResponse());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// AssinarExecutacaoOrdens - trata os pedidos de assinatura de eventos de execucao de ordens
        /// </summary>
        /// <param name="request">objeto do tipo </param>
        /// <returns></returns>
        public AssinarExecucaoOrdemResponse  AssinarExecucaoOrdens(AssinarExecucaoOrdemRequest request)
        {
            IRoteadorOrdensCallback subscriber = Ativador.GetCallback <IRoteadorOrdensCallback>();

            logger.Debug("Recebeu pedido de assinatura de ordens: " + ((IContextChannel)subscriber).RemoteAddress.ToString());

            // Guarda a referencia do assinante na lista interna de
            // assinante
            lock ( _executionsReportsSubscribers )
            {
                if (subscriber != null)
                {
                    _executionsReportsSubscribers.Add(subscriber);
                }
            }

            // Envia as respostas de ordens ja recebidas para o assinante
            List <OrdemInfo> queuedInfos = null;

            lock (_orderReportInfo)
            {
                if (_orderReportInfo.Count > 0)
                {
                    queuedInfos = _orderReportInfo.ToList();
                }
            }

            //if ( queuedInfos != null && queuedInfos.Count > 0 )
            //{
            //    logger.Info("Existem " + queuedInfos.Count + " msgs enfileiradas, encaminhando para assinante");

            //    ThreadPool.QueueUserWorkItem(
            //        new WaitCallback(
            //            delegate(object required)
            //            {

            //                foreach (OrdemInfo info in queuedInfos)
            //                {
            //                    subscriber.OrdemAlterada(info);
            //                    _bOrdemInfoSent = true;
            //                }
            //            }
            //        )
            //    );
            //}


            return(new AssinarExecucaoOrdemResponse());
        }