Пример #1
0
        private void metroTileIniciar_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.IsBusy)
            {
                return;
            }

            if (!validaEntradaDoUsuario("monitor"))
            {
                MessageBox.Show("Favor preencher todos os campos antes de iniciar");
                return;
            }


            entradaUsuario                  = new EntradaUsuario();
            usCulture                       = new CultureInfo(System.Configuration.ConfigurationManager.AppSettings["Culture"]);
            entradaUsuario.ativo            = metroTextBoxAtivo.Text;
            entradaUsuario.referenciaVenda  = Convert.ToDecimal(metroTextBoxRefVenda.Text, usCulture);
            entradaUsuario.referenciaCompra = Convert.ToDecimal(metroTextBoxRefCompra.Text, usCulture);
            if (entradaUsuario.referenciaVenda < entradaUsuario.referenciaCompra)
            {
                MessageBox.Show("Referência de venda não pode ser menor do que a referência de compra.");
                return;
            }
            ScraperAtivosDisponiveis.Atualizar();
            if (!Validacao.ValidaAtivoEstaDisponivelAPI(entradaUsuario.ativo))
            {
                DialogResult dialogResult = MessageBox.Show("Nós não fornecemos suporte para este ativo. Gostaria de saber para quais ativos temos suporte?"
                                                            , "alerta"
                                                            , MessageBoxButtons.YesNo
                                                            , MessageBoxIcon.Warning);
                if (dialogResult == DialogResult.Yes)
                {
                    string caminho = Path.Combine("Resources", "ativos_disponiveis.txt");
                    if (File.Exists(caminho))
                    {
                        string caminhoAreaDeTralho = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), $"ativos_disponiveis_{DateTime.Now.Ticks.ToString()}.txt");
                        File.Copy(caminho, caminhoAreaDeTralho, true);
                        Process.Start(Path.Combine("Resources", caminhoAreaDeTralho));
                    }

                    MessageBox.Show("Tente novamente com um dos ativos suportados.");
                }
                return;
            }

            DefineStatusCaixasDeTexto(false);
            metroLabel10.Text = $"Monitoramento iniciado";
            backgroundWorker1.ProgressChanged           += backgroundWorker1_ProgressChanged;
            backgroundWorker1.WorkerReportsProgress      = true;
            backgroundWorker1.WorkerSupportsCancellation = true;
            backgroundWorker1.RunWorkerAsync();
        }
Пример #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("*************************************************");
            Console.WriteLine("Aguarde um momento enquanto o sistema realiza as validações necessárias.");
            Console.WriteLine("*************************************************");
            checarArquivoDeConfiguracao();
            if (!Validacao.ValidaParametrosEntrada(args))
            {
                Console.WriteLine("Os parâmetros de entrada não estão no formato correto. Seguir o exemplo:");
                Console.WriteLine("'Ativo'  'Referência para venda' 'Referência para compra'");
                Console.WriteLine("PETR4 22.67 22.59");
                Console.WriteLine("Nota1: O preço de referência para venda deve ser maior do que o preço de referência para compra.");
                Console.WriteLine("Nota2: Altere as configurações padrões no arquivo \"stock - quote - alert.exe.config\" para colocar suas próprias informações.");

                Environment.Exit(0);
            }

            entradaUsuario                  = new EntradaUsuario();
            usCulture                       = new CultureInfo(System.Configuration.ConfigurationManager.AppSettings["Culture"]);
            entradaUsuario.ativo            = args[0];
            entradaUsuario.referenciaVenda  = Convert.ToDecimal(args[1], usCulture);
            entradaUsuario.referenciaCompra = Convert.ToDecimal(args[2], usCulture);
            if (!ScraperAtivosDisponiveis.Atualizar())
            {
                Console.WriteLine("Não foi possível consultar novos ativos, vamos utilizar os ativos disponíveis na ultima atualização.");
            }

            if (!Validacao.ValidaAtivoEstaDisponivelAPI(entradaUsuario.ativo))
            {
                Console.WriteLine("Nós não fornecemos suporte para este ativo. Gostaria de saber para quais ativos temos suporte?(S\\N)");
                string answer = Console.ReadLine().ToUpper();
                if (answer.Equals("S"))
                {
                    foreach (var ativo in LeitorDeArquivos.ativosDisponveis())
                    {
                        Console.WriteLine(ativo);
                    }
                    Console.WriteLine("Tente novamente com um dos ativos suportados.");
                    Console.WriteLine("Pressione qualquer tecla para tentar novamente...");
                    //Console.ReadKey();
                    Environment.Exit(0);
                }
                else if (answer.Equals("N"))
                {
                    Console.WriteLine("Tudo bem, a aplicação será encerrada.");
                    Environment.Exit(0);
                }
                else
                {
                    Console.WriteLine("Comando desconhecido a aplicação será encerrada.");
                    Environment.Exit(1);
                }
            }

            timer          = new System.Timers.Timer();
            timer.Interval = 100;
            timer.Elapsed += OnTimedEvent;
            timer.Enabled  = true;
            timer.Start();
            Console.WriteLine("************************************************* ");
            Console.WriteLine("Para sair do programa pressione qualquer tecla... ");
            Console.WriteLine("*************************************************");
            Console.ReadLine();
        }
Пример #3
0
        protected override void OnDoWork(DoWorkEventArgs e)
        {
            CultureInfo usCulture = new CultureInfo(System.Configuration.ConfigurationManager.AppSettings["Culture"]);

            workerThread = Thread.CurrentThread;
            try
            {
                bool bgWorkingRunning = false;
                while (!bgWorkingRunning)
                {
                    if (this.CancellationPending)
                    {
                        break;
                    }
                    bgWorkingRunning = true;
                    entradaUsuario   = FormMain.entradaUsuario;
                    JObject respostaAPI = APIAtivos.BuscarAtivo(entradaUsuario.ativo);
                    if (!(respostaAPI["results"]["error"] is null))
                    {
                        Console.WriteLine($"Falha ao conectar com a API às {DateTime.Now}. Detalhes: {respostaAPI["results"]["message"].ToString()}");
                    }
                    else
                    {
                        Decimal precoAtivoAtual = Convert.ToDecimal(respostaAPI["results"][entradaUsuario.ativo]["price"], usCulture);
                        entradaUsuario.precoAtual = precoAtivoAtual;
                        if (precoAtivoAtual > entradaUsuario.referenciaVenda)
                        {
                            string corpoDoEmail = LeitorDeArquivos.modeloEmailVenda()
                                                  .Replace("#Ativo", entradaUsuario.ativo)
                                                  .Replace("#precoAtivo", precoAtivoAtual.ToString())
                                                  .Replace("#referenciaDeVenda", entradaUsuario.referenciaVenda.ToString());


                            if (Email.Enviar("[stock-quote-alert] Alerta para venda", corpoDoEmail))
                            {
                                Console.WriteLine("E-mail enviado");
                            }
                            else
                            {
                                Console.WriteLine("Falha ao enviar o email");
                            }
                        }
                        else if (precoAtivoAtual < entradaUsuario.referenciaCompra)
                        {
                            string corpoDoEmail = LeitorDeArquivos.modeloEmailCompra()
                                                  .Replace("#Ativo", entradaUsuario.ativo)
                                                  .Replace("#precoAtivo", precoAtivoAtual.ToString())
                                                  .Replace("#referenciaDeCompra", entradaUsuario.referenciaCompra.ToString());
                            Email.Enviar("[stock-quote-alert] Alerta para compra", corpoDoEmail);
                        }
                    }


                    if (DateTime.Now.TimeOfDay < Convert.ToDateTime("10:00").TimeOfDay || DateTime.Now.TimeOfDay > Convert.ToDateTime("17:30").TimeOfDay)
                    {
                        //Os valores dos ativos não são atualizados antes das 10:00 e também não são atualizados depois das 17:30, então o app espera
                        DateTime startTime   = DateTime.Now;
                        DateTime endtime     = Convert.ToDateTime("10:00");
                        DateTime endOftheDay = Convert.ToDateTime("23:59");
                        TimeSpan duration    = Convert.ToDateTime("10:00").AddDays(1).Subtract(DateTime.Now);
                        if (((int)DateTime.Now.DayOfWeek) == 6)
                        {
                            duration = Convert.ToDateTime("10:00").AddDays(2).Subtract(DateTime.Now);
                        }
                        else if (((int)DateTime.Now.DayOfWeek) == 5)
                        {
                            duration = Convert.ToDateTime("10:00").AddDays(3).Subtract(DateTime.Now);
                        }
                        else
                        {
                            duration = TimeSpan.FromMilliseconds(1000 * 60 * 15); // A api é atualizada a cada 15 minutos, então a requisição será feita a cada 15 minutos
                        }
                        FormMain.entradaUsuario = entradaUsuario;
                        this.ReportProgress(1);
                        //Thread.Sleep(duration); //TODO: Remover esse comentário para o app funcionar durante o tempo que a API é atualizada
                        Thread.Sleep(1000 * 60 * 1);
                    }

                    bgWorkingRunning = false;
                }