Exemple #1
0
        public Lib.Mensagens.ExcluirAlertaResponse ExcluirAlerta(Lib.Mensagens.ExcluirAlertaRequest request)
        {
            logger.Debug("Excluir Alerta: IdCliente=[" + request.IdCliente + "] IdAlerta=[" + request.IdAlerta + "]");

            ExcluirAlertaResponse response = new ExcluirAlertaResponse();

            dbAlertas.ExcluirAlerta(request.IdAlerta);

            logger.Debug("IdAlerta=[" + request.IdAlerta + "] removido da base.");

            DadosAlerta alertaExcluido = gerenciadorAlertas.Excluir(request.IdAlerta);

            if (alertaExcluido != null)
            {
                // Serializa alerta exlcuido e envia para AlertasCliente
                string alertaExcluidoSerializado = JsonConvert.SerializeObject(alertaExcluido);

                StringBuilder retornoExcluido = new StringBuilder();
                retornoExcluido.Append("EX");
                retornoExcluido.Append(alertaExcluidoSerializado);

                logger.Debug("Server - Enviando alerta excluído: [" + retornoExcluido.ToString() + "]");
                serverAlertas.SendToAll(retornoExcluido.ToString());
            }

            logger.Debug("IdAlerta=[" + request.IdAlerta + "] removido da memória.");

            response.StatusResposta = Library.MensagemResponseStatusEnum.OK;

            return(response);
        }
Exemple #2
0
        public Lib.Mensagens.MarcarComoExibidoResponse MarcarComoExibido(
            Lib.Mensagens.MarcarComoExibidoRequest request)
        {
            logger.Debug("MarcarComoExibido: IdCliente = [" + request.IdCliente + "]");

            List <DadosAlerta> listaMarcados = new List <DadosAlerta>();

            foreach (String idAlertaParametro in request.listaIdAlerta)
            {
                DadosAlerta alertaMarcado = gerenciadorAlertas.MarcarComoExibido(idAlertaParametro);
                dbAlertas.AtualizarAlertaExibido(idAlertaParametro);

                if (alertaMarcado != null)
                {
                    listaMarcados.Add(alertaMarcado);
                }
            }

            // Serializa alerta exlcuido e envia para AlertasCliente
            string        listaMarcadosSerializado = JsonConvert.SerializeObject(listaMarcados);
            StringBuilder retornoMarcarExibido     = new StringBuilder();

            retornoMarcarExibido.Append("AT");
            retornoMarcarExibido.Append(listaMarcadosSerializado);
            logger.Debug("Server - Enviando alertas marcados como exibido: [" + retornoMarcarExibido.ToString() + "]");
            serverAlertas.SendToAll(retornoMarcarExibido.ToString());

            // Monta response
            MarcarComoExibidoResponse response = new MarcarComoExibidoResponse();

            response.StatusResposta = Library.MensagemResponseStatusEnum.OK;

            return(response);
        }
Exemple #3
0
        public void AtualizarAlerta(string idAlerta, DadosAlerta alerta)
        {
            lock (alertas)
            {
                if (alertas.ContainsKey(idAlerta))
                {
                    alertas[idAlerta] = alerta;
                }
                else
                {
                    alertas.Add(idAlerta, alerta);
                }

                // Adiciona em clienteVsAlertas
                HashSet <string> alertasCliente;
                if (clienteVsAlertas.ContainsKey(alerta.IdCliente))
                {
                    alertasCliente = clienteVsAlertas[alerta.IdCliente];
                }
                else
                {
                    alertasCliente = new HashSet <string>();
                    clienteVsAlertas.Add(alerta.IdCliente, alertasCliente);
                }

                alertasCliente.Add(idAlerta);
            }
        }
Exemple #4
0
        public DadosAlerta Cadastrar(
            string Chave,
            string IdCliente,
            string Instrumento,
            Operando TipoOperando,
            Operador TipoOperador,
            decimal Valor,
            DateTime dataHoraCadastro)
        {
            DadosAlerta Dados = new DadosAlerta();

            Dados.IdAlerta     = Chave;
            Dados.IdCliente    = IdCliente;
            Dados.Instrumento  = Instrumento;
            Dados.TipoOperando = TipoOperando;
            Dados.TipoOperador = TipoOperador;
            Dados.Valor        = Valor;
            Dados.DataCadastro = dataHoraCadastro;

            alertas.Add(Chave, Dados);

            // Adiciona em clienteVsAlertas
            HashSet <string> alertasCliente;

            if (clienteVsAlertas.ContainsKey(IdCliente))
            {
                alertasCliente = clienteVsAlertas[IdCliente];
                alertasCliente.Add(Chave);
            }
            else
            {
                alertasCliente = new HashSet <string>();
                alertasCliente.Add(Chave);
                clienteVsAlertas.Add(IdCliente, alertasCliente);
            }

            // Adiciona em instrumentosVsAlertas
            HashSet <string> alertasInstrumento;

            if (instrumentoVsAlertas.ContainsKey(Instrumento))
            {
                alertasInstrumento = instrumentoVsAlertas[Instrumento];
                alertasInstrumento.Add(Chave);
            }
            else
            {
                alertasInstrumento = new HashSet <string>();
                alertasInstrumento.Add(Chave);
                instrumentoVsAlertas.Add(Instrumento, alertasInstrumento);
            }

            return(Dados);
        }
Exemple #5
0
        public DadosAlerta MarcarComoExibido(String idAlerta)
        {
            DadosAlerta alertaMarcado = null;

            if (alertas.ContainsKey(idAlerta))
            {
                alertas[idAlerta].Exibido = true;
                alertaMarcado             = alertas[idAlerta];
            }
            else
            {
                logger.Error("Solicitado MarcarComoExibido de IdAlerta=[" + idAlerta + "] inexistente");
            }

            return(alertaMarcado);
        }
Exemple #6
0
        public DadosAlerta Excluir(string chave)
        {
            if (alertas.ContainsKey(chave))
            {
                string instrumento = alertas[chave].Instrumento;
                if (instrumentoVsAlertas.ContainsKey(instrumento))
                {
                    HashSet <string> alertasDoInstrumento = instrumentoVsAlertas[instrumento];
                    if (alertasDoInstrumento.Contains(chave))
                    {
                        alertasDoInstrumento.Remove(chave);
                    }
                }

                string cliente = alertas[chave].IdCliente;
                if (clienteVsAlertas.ContainsKey(cliente))
                {
                    HashSet <string> alertasDoCliente = clienteVsAlertas[cliente];
                    if (alertasDoCliente.Contains(chave))
                    {
                        alertasDoCliente.Remove(chave);
                    }
                }

                DadosAlerta alertaExcluido = alertas[chave];

                alertas.Remove(chave);

                return(alertaExcluido);
            }
            else
            {
                logger.Error("Solicitada exclusão de IdAlerta=[" + chave + "] inexistente");
                return(null);
            }
        }
Exemple #7
0
        public CadastrarAlertaResponse CadastrarAlerta(CadastrarAlertaRequest request)
        {
            CadastrarAlertaResponse responseAlerta = new CadastrarAlertaResponse();

            try
            {
                logger.Debug("Executando Cadastrar Alerta - IdCliente=[" + request.Alerta.IdCliente + "] " +
                             "Instrumento=[" + request.Alerta.Instrumento + "] " +
                             "TipoOperador=[" + (int)request.Alerta.TipoOperador + "] " +
                             "TipoOperando=[" + (int)request.Alerta.TipoOperando + "] " +
                             "Valor=[" + request.Alerta.Valor + "] "
                             );

                DateTime dataHoraCadastro = DateTime.Now;

                if (!instrumentosMonitorados.Keys.Contains(request.Alerta.Instrumento))
                {
                    DadosInstrumento dadosInstrumento = new DadosInstrumento();
                    dadosInstrumento.minimo = Decimal.MaxValue;
                    dadosInstrumento.maximo = Decimal.MinValue;
                    instrumentosMonitorados.Add(request.Alerta.Instrumento, dadosInstrumento);

                    StringBuilder requisicaoAlerta = new StringBuilder();

                    requisicaoAlerta.Append("AL");
                    requisicaoAlerta.Append("  ");
                    requisicaoAlerta.Append(dataHoraCadastro.ToString(string.Format("{0}{1}", "yyyyMMddHHmmssmmm", "0")));
                    string instrumento = String.Format("{0,-20}", request.Alerta.Instrumento);
                    requisicaoAlerta.Append(instrumento);
                    requisicaoAlerta.Append("1");

                    if (mdsSocket.IsConectado())
                    {
                        logger.Debug("Cadastrando alerta MDS [" + requisicaoAlerta.ToString() + "]");
                        mdsSocket.Send(requisicaoAlerta.ToString());
                    }
                }

                String idCadastrado = dbAlertas.CadastrarAlerta(
                    request.Alerta.IdCliente,
                    request.Alerta.Instrumento,
                    request.Alerta.TipoOperando,
                    request.Alerta.TipoOperador,
                    request.Alerta.Valor,
                    dataHoraCadastro
                    );

                if (idCadastrado == null)
                {
                    logger.Error("CadastrarAlerta: Erro na inserção na base.");
                    responseAlerta.StatusResposta = Library.MensagemResponseStatusEnum.ErroPrograma;
                    responseAlerta.DescricaoErro  = "Ocorreu erro na inserção das informações na base de dados. Alerta não foi cadastrado";
                }
                else
                {
                    logger.Debug("Cadastrar Alerta - Atribuído IdAlerta=[" + idCadastrado + "]");

                    responseAlerta.IdAlerta       = idCadastrado;
                    responseAlerta.StatusResposta = Library.MensagemResponseStatusEnum.OK;

                    DadosAlerta dados = gerenciadorAlertas.Cadastrar(
                        idCadastrado,
                        request.Alerta.IdCliente,
                        request.Alerta.Instrumento,
                        request.Alerta.TipoOperando,
                        request.Alerta.TipoOperador,
                        request.Alerta.Valor,
                        dataHoraCadastro);

                    // Serializa alerta cadastrado e envia para AlertasCliente
                    string alertaCadastradoSerializado = JsonConvert.SerializeObject(dados);

                    StringBuilder retornoCadastrado = new StringBuilder();
                    retornoCadastrado.Append("CA");
                    retornoCadastrado.Append(alertaCadastradoSerializado);

                    logger.Debug("Server - Enviando alertas cadastrado: [" + retornoCadastrado.ToString() + "]");
                    serverAlertas.SendToAll(retornoCadastrado.ToString());
                }
            }
            catch (Exception e)
            {
                logger.Debug("CadastrarAlerta: Exception [" + e.Message + "]");
                logger.Debug(e.StackTrace);
                responseAlerta.StatusResposta = Library.MensagemResponseStatusEnum.ErroPrograma;
                responseAlerta.IdAlerta       = null;
            }

            return(responseAlerta);
        }
Exemple #8
0
        public List <DadosAlerta> Checar(string mensagem, Dictionary <String, DadosInstrumento> instrumentosMonitorados)
        {
            List <DadosAlerta> idAlertasAtingidos = new List <DadosAlerta>();

            if (mensagem.Length != TamanhoMensagemAR)
            {
                logger.Error("Recebida mensagem AR com tamanho inválido: [" + mensagem + "]");
                return(idAlertasAtingidos);
            }

            String  instrumento = mensagem.Substring(InstrumentoPos, InstrumentoTam).Trim();
            Decimal preco       = Convert.ToDecimal(mensagem.Substring(PrecoPos, PrecoTam));
            Decimal maximo      = Convert.ToDecimal(mensagem.Substring(MaximaPos, MaximaTam));
            Decimal minimo      = Convert.ToDecimal(mensagem.Substring(MinimaPos, MinimaTam));
            Decimal oscilacao   = Math.Round(Convert.ToDecimal(mensagem.Substring(VariacaoPos, VariacaoTam)), 2);

            bool maximoAtingido = false;
            bool minimoAtingido = false;

            if (instrumentosMonitorados.ContainsKey(instrumento))
            {
                // Atualiza Valores de máximo e mínimo
                if (maximo > instrumentosMonitorados[instrumento].maximo)
                {
                    if (!instrumentosMonitorados[instrumento].maximo.Equals(Decimal.MinValue))
                    {
                        maximoAtingido = true;
                    }
                    else
                    {
                        if (preco.Equals(maximo))
                        {
                            maximoAtingido = true;
                        }
                    }

                    instrumentosMonitorados[instrumento].maximo = maximo;
                }
            }
            else
            {
                logger.Error("Dictionary de instrumentos monitorados não contém instrumento [" + instrumento + "]");
            }

            if (instrumentosMonitorados.ContainsKey(instrumento))
            {
                if (minimo < instrumentosMonitorados[instrumento].minimo)
                {
                    if (!instrumentosMonitorados[instrumento].minimo.Equals(Decimal.MaxValue))
                    {
                        minimoAtingido = true;
                    }
                    else
                    {
                        if (preco.Equals(minimo))
                        {
                            minimoAtingido = true;
                        }
                    }

                    instrumentosMonitorados[instrumento].minimo = minimo;
                }
            }
            else
            {
                logger.Error("Dictionary de instrumentos monitorados não contém instrumento [" + instrumento + "]");
            }

            if (instrumentoVsAlertas.ContainsKey(instrumento))
            {
                foreach (string idAlerta in instrumentoVsAlertas[instrumento])
                {
                    DadosAlerta dadosAlerta = alertas[idAlerta];

                    if (dadosAlerta.Atingido)
                    {
                        continue;
                    }

                    if (dadosAlerta.TipoOperando == Operando.Preco)
                    {
                        if (ExecutarOperacao(preco, dadosAlerta.Valor, dadosAlerta.TipoOperador))
                        {
                            dadosAlerta.Atingido        = true;
                            dadosAlerta.DataAtingimento = System.DateTime.Now;
                            dadosAlerta.Cotacao         = preco;

                            idAlertasAtingidos.Add(dadosAlerta);
                        }
                    }
                    else if (dadosAlerta.TipoOperando == Operando.Maximo)
                    {
                        if (maximoAtingido)
                        {
                            dadosAlerta.Atingido        = true;
                            dadosAlerta.DataAtingimento = System.DateTime.Now;
                            dadosAlerta.Cotacao         = preco;

                            idAlertasAtingidos.Add(dadosAlerta);
                        }
                    }
                    else if (dadosAlerta.TipoOperando == Operando.Minimo)
                    {
                        if (minimoAtingido)
                        {
                            dadosAlerta.Atingido        = true;
                            dadosAlerta.DataAtingimento = System.DateTime.Now;
                            dadosAlerta.Cotacao         = preco;

                            idAlertasAtingidos.Add(dadosAlerta);
                        }
                    }
                    else if (dadosAlerta.TipoOperando == Operando.Oscilacao)
                    {
                        if (ExecutarOperacao(oscilacao, dadosAlerta.Valor, dadosAlerta.TipoOperador))
                        {
                            dadosAlerta.Atingido        = true;
                            dadosAlerta.DataAtingimento = System.DateTime.Now;
                            dadosAlerta.Cotacao         = oscilacao;

                            idAlertasAtingidos.Add(dadosAlerta);
                        }
                    }
                }
            }

            return(idAlertasAtingidos);
        }
Exemple #9
0
        public Dictionary <String, DadosAlerta> ListarAlertas()
        {
            Dictionary <String, DadosAlerta> dadosRetorno = new Dictionary <String, DadosAlerta>();

            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Alertas"].ConnectionString);
            SqlDataReader rdr  = null;

            try
            {
                conn.Open();

                SqlCommand command = new SqlCommand();
                command.CommandType = CommandType.StoredProcedure;
                command.Connection  = conn;
                command.CommandText = "prc_TB_ALERTAS_lst";

                rdr = command.ExecuteReader();

                while (rdr.Read())
                {
                    String idAlertaDb = (String)rdr["IdAlerta"];

                    DadosAlerta registro = new DadosAlerta();
                    registro.IdAlerta     = idAlertaDb;
                    registro.IdCliente    = (String)rdr["IdCliente"];
                    registro.Instrumento  = (String)rdr["Instrumento"];
                    registro.TipoOperando = (Operando)rdr["TipoOperando"];
                    registro.TipoOperador = (Operador)rdr["TipoOPerador"];
                    registro.Valor        = (Decimal)rdr["Valor"];
                    if (!rdr.IsDBNull(rdr.GetOrdinal("Atingido")))
                    {
                        registro.Atingido = ((((String)rdr["Atingido"]).ElementAt(0) == '0') ? false : true);
                    }
                    else
                    {
                        registro.Atingido = false;
                    }
                    if (!rdr.IsDBNull(rdr.GetOrdinal("Exibido")))
                    {
                        registro.Exibido = ((((String)rdr["Exibido"]).ElementAt(0) == '0') ? false : true);
                    }
                    else
                    {
                        registro.Exibido = false;
                    }
                    if (!rdr.IsDBNull(rdr.GetOrdinal("DataCadastro")))
                    {
                        registro.DataCadastro = (DateTime)rdr["DataCadastro"];
                    }
                    if (!rdr.IsDBNull(rdr.GetOrdinal("DataAtingimento")))
                    {
                        registro.DataAtingimento = (DateTime)rdr["DataAtingimento"];
                    }
                    if (!rdr.IsDBNull(rdr.GetOrdinal("Cotacao")))
                    {
                        registro.Cotacao = (Decimal)rdr["Cotacao"];
                    }

                    dadosRetorno.Add(idAlertaDb, registro);
                }
            }
            catch (SqlException ex)
            {
                logger.Error("CadastrarAlertas(): " + ex.Message, ex);
            }
            finally
            {
                if (conn != null && conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }

            return(dadosRetorno);
        }