protected virtual void TrataNegociosDestaque() { bool bWait = false; logger.Info("Iniciando thread para tratar mensagens de Negocios em Destaque"); while (bKeepRunning) { try { List <NegocioInfo> filaTemp = new List <NegocioInfo>(); lock (filaNegociosDestaque) { filaTemp = filaNegociosDestaque.ToList(); filaNegociosDestaque.Clear(); } foreach (NegocioInfo negocio in filaTemp) { if (negocio.Status == 2) { MemoriaNegociosDestaque.ContabilizaNegocio(negocio); } } lock (filaNegociosDestaque) { if (filaNegociosDestaque.Count == 0) { bWait = true; } else { bWait = false; } } if (bWait) { Thread.Sleep(250); } Thread.Sleep(100); } catch (Exception ex) { logger.Fatal("TrataNegociosDestaque(): " + ex.Message, ex); Thread.Sleep(1000); } } logger.Info("Finalizando thread para tratar mensagens de Negocios em Destaque"); }
protected void MontagemListaDestaques(object state) { // Evita que mais que uma instância seja executada pelo timer if (montandoListaDestaques) { return; } montandoListaDestaques = true; MemoriaNegociosDestaque.ListaRanking(filaDestaquesParaStreamer, null); montandoListaDestaques = false; }
void socketStreamerServer_OnRequestReceived(object sender, MessageEventArgs args) { try { DadosRequisicaoInfo req = JsonConvert.DeserializeObject <DadosRequisicaoInfo>(args.Message); if (req.tipo.Equals(TIPO_REQUISICAO_NEGOCIOS_DESTAQUE)) { logger.Info("Enviando snapshot de Negocios em Destaque para cliente[" + args.ClientNumber.ToString() + "]"); MemoriaNegociosDestaque.ListaRanking(filaDestaquesParaStreamer, args.ClientSocket); } else if (req.tipo.Equals(TIPO_REQUISICAO_ACOMPANHAMENTO_LEILAO)) { logger.Info("Enviando snapshot de Acompanhamento de Leilao para cliente[" + args.ClientNumber.ToString() + "]"); MemoriaAcompanhamentoLeilao.MontagemAcompanhamentoLeilaoStreamer(args.ClientSocket); MemoriaAcompanhamentoLeilao.EnviaAcompanhamentoLeilaoStreamer(filaLeilaoParaStreamer, FrequenciaEnviaLeilao); } else if (req.tipo.Equals(TIPO_REQUISICAO_RESUMO_CORRETORAS)) { if (!((IList <string>)MemoriaResumoCorretoras.SEGMENTOS_MERCADO).Contains(req.instrumento)) { if (req.acao.Equals(MDS_ACAO_ASSINAR)) { MemoriaResumoCorretoras.AssinarRankingPorInstrumento(req.instrumento); MemoriaResumoCorretoras.ListaRankingPorInstrumentoOuCorretora(filaResumoParaStreamer, args.ClientSocket, req.instrumento); } else { MemoriaResumoCorretoras.DesassinarRankingPorInstrumento(req.instrumento); } } else { logger.Info("Enviando snapshot de Resumo de Corretoras para cliente[" + args.ClientNumber.ToString() + "]"); MemoriaResumoCorretoras.ListaRanking(filaResumoParaStreamer, args.ClientSocket); } } } catch (Exception ex) { logger.Error("socketStreamerServer_OnRequestReceived(): " + ex.Message, ex); } }
public virtual void IniciarServico() { logger.Info("*** Iniciando Cotacao MDS para Streamer ***"); MemoriaNegociosDestaque.InicializarDicionarios(); MemoriaResumoCorretoras.InicializarDicionarios(); QueueManager.Instance.Start(); QueueManager.Instance.OnFastQuoteReceived += new MDSMessageReceivedHandler(OnNegocio); lSocket = new MDSPackageSocket(); lSocket.IpAddr = ConfigurationManager.AppSettings["ASConnMDSIp"].ToString(); lSocket.Port = ConfigurationManager.AppSettings["ASConnMDSPort"].ToString(); lSocket.OnFastQuoteReceived += new MDSMessageReceivedHandler(OnNegocio); lSocket.OpenConnection(); _sendMDSLoginMSG(lSocket); socketStreamerServer = new SocketPackage(); socketStreamerServer.OnClientConnected += new ClientConnectedHandler(socketStreamerServer_OnClientConnected); socketStreamerServer.OnRequestReceived += new MessageReceivedHandler(socketStreamerServer_OnRequestReceived); // Ativa thread para retirar mensagens de destaques da fila e enviar para os StreamerServers conectados thDestaquesProcessor = new Thread(new ThreadStart(NegociosDestaqueProcessor)); thDestaquesProcessor.Start(); // Ativa thread para retirar mensagens de leilao da fila e enviar para os StreamerServers conectados thLeilaoProcessor = new Thread(new ThreadStart(AcompanhamentoLeilaoProcessor)); thLeilaoProcessor.Start(); // Ativa thread para retirar mensagens de resumo da fila e enviar para os StreamerServers conectados thResumoProcessor = new Thread(new ThreadStart(ResumoCorretorasProcessor)); thResumoProcessor.Start(); // Ativa thread que monitora conexao com sinal MDS thMonitorConexao = new Thread(new ThreadStart(MonitorConexaoMDS)); thMonitorConexao.Start(); // Ativa thread que trata as mensagens para os Negocios em Destaque thNegociosDestaque = new Thread(new ThreadStart(TrataNegociosDestaque)); thNegociosDestaque.Start(); // Ativa thread que trata as mensagens para o Acompanhamento de Leilao thAcompanhamentoLeilao = new Thread(new ThreadStart(TrataAcompanhamentoLeilao)); thAcompanhamentoLeilao.Start(); // Ativa thread que trata as mensagens para o Resumo de Corretoras thResumoCorretoras = new Thread(new ThreadStart(TrataResumoCorretoras)); thResumoCorretoras.Start(); // Obtem o parametro de maxima diferenca de horario da ultima mensagem com a bolsa // para envio de alertas MaxDifHorarioBolsa = 75; if (ConfigurationManager.AppSettings["MaxDifHorarioBolsa"] != null) { MaxDifHorarioBolsa = Convert.ToDouble(ConfigurationManager.AppSettings["MaxDifHorarioBolsa"].ToString()); } MaxDifHorarioBolsa *= 1000; // Obtem o timeout de mensagem com o MDS, em segundos TimeoutMDS = 300; if (ConfigurationManager.AppSettings["TimeoutMDS"] != null) { TimeoutMDS = Convert.ToDouble(ConfigurationManager.AppSettings["TimeoutMDS"].ToString()); } TimeoutMDS *= 1000; // Obtem a frequencia de geracao da lista de destaques, em segundos FrequenciaGeracaoDestaques = 20; if (ConfigurationManager.AppSettings["FrequenciaGeracaoDestaques"] != null) { FrequenciaGeracaoDestaques = Convert.ToInt32(ConfigurationManager.AppSettings["FrequenciaGeracaoDestaques"].ToString()); } FrequenciaGeracaoDestaques *= 1000; // Define no timer a chamada da montagem de destaques gTimerDestaques = new Timer(new TimerCallback(MontagemListaDestaques), null, 0, FrequenciaGeracaoDestaques); // Obtem a frequencia de geracao da lista de resumo de corretoras, em segundos FrequenciaGeracaoResumo = 25; if (ConfigurationManager.AppSettings["FrequenciaGeracaoResumo"] != null) { FrequenciaGeracaoResumo = Convert.ToInt32(ConfigurationManager.AppSettings["FrequenciaGeracaoResumo"].ToString()); } FrequenciaGeracaoResumo *= 1000; // Define no timer a chamada da montagem de resumo de corretoras gTimerResumo = new Timer(new TimerCallback(MontagemListaResumo), null, 0, FrequenciaGeracaoResumo); // Obtem a frequencia de envio do acompanhamento de leilao, em milisegundos FrequenciaEnviaLeilao = 250; if (ConfigurationManager.AppSettings["FrequenciaEnviaLeilao"] != null) { FrequenciaEnviaLeilao = Convert.ToInt32(ConfigurationManager.AppSettings["FrequenciaEnviaLeilao"].ToString()); } // Define no timer a chamada do envio do acompanhamento de leilao gTimerLeilao = new Timer(new TimerCallback(EnviaAcompanhamentoLeilao), null, 0, FrequenciaEnviaLeilao); if (ConfigurationManager.AppSettings["ListenPort"] != null) { ListenPortStreamer = Convert.ToInt32(ConfigurationManager.AppSettings["ListenPort"].ToString()); } socketStreamerServer.StartListen(ListenPortStreamer); this.Status = ServicoStatus.EmExecucao; }
public string ReceberNegociosDestaque(string segmentoMercado, TipoDestaqueEnum tipoDestaque) { return(MemoriaNegociosDestaque.ReceberNegociosDestaque(segmentoMercado, tipoDestaque)); }