protected void OnCotacao(object sender, MDSMessageEventArgs args) { lock (queueMensagemMds) { queueMensagemMds.Enqueue(args); } }
private void MessageBroker(string Instrumento, string Mensagem) { string tipoMensagem = Mensagem.ToString().Substring(0, 2); switch (tipoMensagem) { case TIPOMSG_NEGOCIO: case TIPOMSG_CADASTROBASICO: case TIPOMSG_ABERTURA: case TIPOMSG_FECHAMENTO: case TIPOMSG_AJUSTE: case TIPOMSG_UNITARIO: case TIPOMSG_COMPOSICAOINDICE: logger.DebugFormat("Tipo[{0}] Instrumento[{1}]: [{2}]", tipoMensagem, Instrumento, Mensagem); MDSMessageEventArgs args = new MDSMessageEventArgs(); args.Instrumento = Instrumento; args.TipoMsg = tipoMensagem; args.Message = Mensagem; if (OnMensagemMdsReceived != null) { OnMensagemMdsReceived(this, args); } break; default: break; } }
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); } }