コード例 #1
0
ファイル: MDSPackageSocket.cs プロジェクト: radtek/Gradual
        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);
            }
        }
コード例 #2
0
        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 + "]");
                }
            }
        }
コード例 #3
0
        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);
            }
        }