Ejemplo n.º 1
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;
                }
Ejemplo n.º 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();
        }
Ejemplo n.º 3
0
        private void btnEscolher_Click(object sender, EventArgs e)
        {
            lsbSaida.DataSource  = new List <String>();
            lsbGcoder.DataSource = new List <String>();

            OpenFileDialog file = new OpenFileDialog();

            timer1.Stop();

            file.FileName         = "teste";
            file.Filter           = "Arquivos de texto | *.doc;*.docx;*.txt";
            file.Title            = "Arquivo de texto";
            file.InitialDirectory = "Desktop";
            file.RestoreDirectory = true;

            if (file.ShowDialog() == DialogResult.OK)
            {
                leitorDeArquivos = new LeitorDeArquivos();

                Gcoder gCoder = new Gcoder();

                Cursor.Current = Cursors.WaitCursor;

                lsbSaida.DataSource = leitorDeArquivos.lerArquivo(file.FileName.ToString());

                textoEmGcode.AddRange(gCoder.gerarGcode(leitorDeArquivos.lerArquivo(file.FileName.ToString())));

                List <GPoint> ordererList = new List <GPoint>();

                foreach (string s in textoEmGcode)
                {
                    GPoint g = new GPoint(s);
                    ordererList.Add(g);
                }

                textoEmGcode.Clear();
                List <GPoint> orderedList = ordererList.OrderBy(y => y.yPoint).ThenBy(x => x.xPoint).ToList();

                foreach (GPoint g in orderedList)
                {
                    textoEmGcode.Add(g.instruction);
                }

                textoEmGcode.Clear();

                int           repeatCounter = 0;
                List <String> auxList       = new List <string>();
                foreach (GPoint g in orderedList)
                {
                    bool shouldRepeat = false;

                    if (textoEmGcode.Count > 0 && !chkDoubleDots.Checked)
                    {
                        string lastInstruction  = textoEmGcode[textoEmGcode.Count - 1];
                        string commaInstruction = Regex.Replace(lastInstruction, @"[.,]", ".");
                        double lastYPont        = Convert.ToDouble(commaInstruction.Substring(commaInstruction.IndexOf("Y") + 1, (commaInstruction.IndexOf("M") - commaInstruction.IndexOf("Y") - 1)));
                        double actualYPoint     = (double)(decimal)(g.yPoint);

                        //lastPoint < gPoint
                        if (lastYPont < actualYPoint)
                        {
                            shouldRepeat  = true;
                            repeatCounter = 0;
                        }
                        if (shouldRepeat || (repeatCounter > 0 && repeatCounter < 3))
                        {
                            textoEmGcode.Add(g.instruction);
                            auxList.Add(g.instruction);
                            if (repeatCounter == 2)
                            {
                                textoEmGcode.AddRange(auxList);
                                textoEmGcode.AddRange(auxList);
                                auxList.Clear();
                            }
                            repeatCounter++;
                        }
                        else
                        {
                            textoEmGcode.Add(g.instruction);
                        }
                    }
                    else
                    {
                        textoEmGcode.Add(g.instruction);
                    }
                }

                if (chkDoubleDots.Checked)
                {
                    List <List <String> > testList  = new List <List <String> >();
                    List <List <String> > testList2 = new List <List <String> >();
                    testList = splitToSublists(textoEmGcode);
                    textoEmGcode.Clear();

                    foreach (List <String> ls in testList)
                    {
                        testList2.Add(ls);
                        testList2.Add(ls);
                    }
                    foreach (List <String> ls in testList2)
                    {
                        textoEmGcode.AddRange(ls);
                    }
                }

                lsbGcoder.DataSource = textoEmGcode;
            }
            timer1.Start();
            Cursor.Current = Cursors.Default;
        }