private void MessageBroker(string Instrumento, string Mensagem) { try { if (Mensagem.Length > 2) { string tpmsg = Mensagem.ToString().Substring(0, 2); switch (tpmsg) { case Negocio: LastNegocioPacket = DateTime.Now; LastNegocioMsg = Mensagem; //logger.Debug("Negocio [" + Instrumento + "] [" + Mensagem + "]"); MDSMessageEventArgs args = new MDSMessageEventArgs(); args.Instrumento = Instrumento; args.TipoMsg = tpmsg; args.Mensagem = Mensagem; if (OnFastQuoteReceived != null) { OnFastQuoteReceived(this, args); } break; case Sonda: logger.Info("Sonda [" + Mensagem + "]"); LastSondaMsg = Mensagem; break; } } } catch (Exception ex) { logger.Error("MessageBroker(): " + ex.Message, ex); } }
private void MessageBroker(string Instrumento, string Mensagem) { try { logger.Debug("[" + Instrumento + "] [" + Mensagem + "]"); if (_filtraIndiceCheio) { if (Mensagem.Substring(2, 2).Equals("BF") && !Instrumento.Substring(0, 1).Equals("W")) { return; } } string tpmsg = Mensagem.ToString().Substring(0, 2); switch (tpmsg) { case ConstantesMDS.Negocio: LastNegocioPacket = DateTime.Now; LastNegocioMsg = Mensagem; //logger.Debug("Negocio [" + Instrumento + "] [" + Mensagem + "]"); MDSMessageEventArgs args = new MDSMessageEventArgs(); args.Instrumento = Instrumento; args.TipoMsg = tpmsg; args.Mensagem = Mensagem; if (OnFastQuoteReceived != null) { OnFastQuoteReceived(this, args); } break; case ConstantesMDS.Sonda: logger.Info("Sonda [" + Mensagem + "]"); LastSondaMsg = Mensagem; break; } } catch (Exception ex) { logger.Error("MessageBroker(): " + ex.Message, ex); if (!String.IsNullOrEmpty(Instrumento)) { logger.Error("Instrumento [" + Instrumento + "]"); } if (!String.IsNullOrEmpty(Mensagem)) { logger.Error("Mensagem [" + Mensagem + "]"); } } }
protected void OnNegocio(object sender, MDSMessageEventArgs args) { try { NegocioInfo negocio = new NegocioInfo(); // Layout da mensagem de negocio // Header // Nome Tipo Tamanho Observação // Tipo de Mensagem X(2) // Tipo de Bolsa X(2) Espaços, ou: // Bovespa = BV // BM&F = BF // Data N(8) - Formato AAAAMMDD // Hora N(9) - Formato HHMMSSmmm (mmm = milisegundos) // Código do Instrumento X(20) // Tipo de Mensagem = NE // Nome Tipo Tamanho Observação // Data N(8) - Formato AAAAMMDD // Hora N(9) - Formato HHMMSSmmm (mmm = milisegundos) // Corretora Compradora N(8) // Corretora Vendedora N(8) // Preço N(13) // Quantidade N(12) // Máxima do dia N(13) // Mínima do dia N(13) // Volume Acumulado N(13) // Número de Negócios N(8) // Indicador de Variação em Relação ao Fechamento do Dia Anterior X(1) // Variação positiva: “ “ (espaço em branco) // Variação negativa: “-“ // Percentual de var. em relação ao Fechamento do Dia Anterior N(8) // Estado do Papel N(1) // 0 – Papel não negociado // 1 – Papel em leilão // 2 – Papel em negociação // 3 – Papel suspenso // 4 – Papel congelado // 5 – Papel inibido // Exemplos de mensagens: //<--- header --->data hora comprad vend preco quantidade max dia min dia vol nneg VvFech E //0 2 4 12 21 41 49 58 66 74 87 99 112 125 138 147 155 169 191 204 217 225 238 //NEBV20100702162034355PETR4 201007021618470000000013100000027000000026,800000000000200000000026,860000000026,5200209283409,0000010513 00001,3220000000029.900000000026.45C000000950000000026,79000000002800V000000270000000026,80000000000200 //NEBV20100702162238788PETR4 201007021620510000000002700000131000000026,850000000000200000000026,870000000026,5200211588300,0000010621 00001,5120000000029.900000000026.45C000000270000000026,85000000000200V000000080000000026,86000000000200 string dataNegocio = args.Mensagem.Substring(41, 8); if (dataNegocio.StartsWith("0000") == false) { negocio.Instrumento = args.Mensagem.Substring(21, 20).Trim(); negocio.TipoBolsa = args.Mensagem.Substring(2, 2); negocio.DataHora = DateTime.ParseExact(args.Mensagem.Substring(41, 14), "yyyyMMddHHmmss", ciBR); negocio.Compradora = Convert.ToInt32(args.Mensagem.Substring(58, 8), ciBR); negocio.Vendedora = Convert.ToInt32(args.Mensagem.Substring(66, 8), ciBR); negocio.Preco = Convert.ToDouble(args.Mensagem.Substring(74, 13), ciBR); negocio.Quantidade = Convert.ToDouble(args.Mensagem.Substring(87, 12), ciBR); negocio.Maxima = Convert.ToDouble(args.Mensagem.Substring(99, 13), ciBR); negocio.Minima = Convert.ToDouble(args.Mensagem.Substring(112, 13), ciBR); negocio.Volume = Convert.ToDouble(args.Mensagem.Substring(125, 13), ciBR); negocio.NumeroNegocio = Convert.ToInt32(args.Mensagem.Substring(138, 8), ciBR); negocio.Variacao = Convert.ToDouble(args.Mensagem.Substring(146, 9).Trim(), ciBR); negocio.Status = Convert.ToInt32(args.Mensagem.Substring(155, 1), ciBR); negocio.PrecoTeoricoAbertura = Convert.ToDouble(args.Mensagem.Substring(157, 13), ciBR); negocio.VariacaoTeorica = Convert.ToDouble(args.Mensagem.Substring(170, 9).Trim(), ciBR); negocio.HorarioTeorico = DateTime.ParseExact(args.Mensagem.Substring(179, 14), "yyyyMMddHHmmss", ciBR); lock (filaNegociosDestaque) { filaNegociosDestaque.Enqueue(negocio); } lock (filaAcompanhamentoLeilao) { filaAcompanhamentoLeilao.Enqueue(negocio); } lock (filaResumoCorretoras) { filaResumoCorretoras.Enqueue(negocio); } } } catch (Exception ex) { logger.Error("OnNegocio: Erro na mensagem[" + args.Mensagem + "]: " + ex.Message, ex); } }