示例#1
0
        public override void IniciarServico()
        {
            logger.Info("*** Iniciando Processador de Cotacao ***");

            _bKeepRunning = true;

            _config = GerenciadorConfig.ReceberConfig <ProcessadorCotacaoConfig>();

            UMDFConfig _umdfconfig = GerenciadorConfig.ReceberConfig <UMDFConfig>();

            _umdfSockets = new MDSPackageSocket[_umdfconfig.Portas.Count];
            int i = 0;

            foreach (int porta in _umdfconfig.Portas)
            {
                _umdfSockets[i] = new MDSPackageSocket();

                _umdfSockets[i].IpAddr = _config.MDSAddress;
                _umdfSockets[i].Port   = porta;

                _umdfSockets[i].OnFastQuoteReceived      += new MDSMessageReceivedHandler(OnCotacao);
                _umdfSockets[i].OnSerieHistoricaReceived += new MDSMessageReceivedHandler(OnSerieHistorica);

                i++;
            }

            _db = new ANGPersistenciaDB();
            _db.ConnectionString    = _config.ConnectionString;
            _db.MDSConnectionString = _config.MDSConnectionString;

            _threadCotacao = new Thread(new ThreadStart(Run));
            _threadCotacao.Start();

            _threadSerieHistorica = new Thread(new ThreadStart(SerieHistoricaRun));
            _threadSerieHistorica.Start();

            _srvstatus = ServicoStatus.EmExecucao;
        }
示例#2
0
        public virtual void Run()
        {
            long lastlog = 0;

            while (_bKeepRunning)
            {
                if (_mds == null || _mds.IsConectado() == false)
                {
                    _mds = new MDSPackageSocket();

                    _mds.IpAddr = ConfigurationManager.AppSettings["MDSAddress"].ToString();
                    _mds.Port   = Convert.ToInt32(ConfigurationManager.AppSettings["MDSPort"].ToString());

                    _mds.OnMensagemMdsReceived += new MDSMessageReceivedHandler(OnCotacao);
                    _mds.OpenConnection();
                }

                List <MDSMessageEventArgs> tmpQueue = new List <MDSMessageEventArgs>();

                MDSMessageEventArgs mensagem = null;

                if (queueMensagemMds.TryDequeue(out mensagem))
                {
                    switch (mensagem.TipoMsg)
                    {
                    case MDSPackageSocket.TIPOMSG_NEGOCIO:
                        ProcessarMensagemCotacao(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_CADASTROBASICO:
                        ProcessarMensagemCadastroBasico(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_ABERTURA:
                        ProcessarMensagemAbertura(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_FECHAMENTO:
                        ProcessarMensagemFechamento(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_AJUSTE:
                        ProcessarMensagemAjuste(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_UNITARIO:
                        ProcessarMensagemUnitario(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_COMPOSICAOINDICE:
                        ProcessarMensagemComposicaoIndice(mensagem.Message);
                        break;
                    }

                    TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - lastlog);
                    if (ts.TotalMilliseconds > 2000)
                    {
                        logger.Info("Fila de mensagens a processar: " + queueMensagemMds.Count);
                        lastlog = DateTime.Now.Ticks;
                    }

                    continue;
                }

                Thread.Sleep(250);
            }
        }
示例#3
0
        public virtual void Run()
        {
            bool bWait = false;

            while (_bKeepRunning)
            {
                if (_mds == null || _mds.IsConectado() == false)
                {
                    _mds = new MDSPackageSocket();

                    _mds.IpAddr = _config.MDSAddress;
                    _mds.Port   = _config.MDSPort;

                    _mds.OnMensagemMdsReceived += new MDSMessageReceivedHandler(OnCotacao);
                    _mds.OpenConnection();
                }

                List <MDSMessageEventArgs> tmpQueue = new List <MDSMessageEventArgs>();

                lock (queueMensagemMds)
                {
                    tmpQueue = queueMensagemMds.ToList();
                    queueMensagemMds.Clear();
                }

                foreach (MDSMessageEventArgs mensagem in tmpQueue)
                {
                    switch (mensagem.TipoMsg)
                    {
                    case MDSPackageSocket.TIPOMSG_NEGOCIO:
                        ProcessarMensagemCotacao(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_CADASTROBASICO:
                        ProcessarMensagemCadastroBasico(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_ABERTURA:
                        ProcessarMensagemAbertura(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_FECHAMENTO:
                        ProcessarMensagemFechamento(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_AJUSTE:
                        ProcessarMensagemAjuste(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_UNITARIO:
                        ProcessarMensagemUnitario(mensagem.Message);
                        break;

                    case MDSPackageSocket.TIPOMSG_COMPOSICAOINDICE:
                        ProcessarMensagemComposicaoIndice(mensagem.Message);
                        break;
                    }
                }

                lock (queueMensagemMds)
                {
                    if (queueMensagemMds.Count == 0)
                    {
                        bWait = true;
                    }
                    else
                    {
                        bWait = false;
                    }
                }

                if (bWait)
                {
                    Thread.Sleep(250);
                }
            }
        }