Ejemplo n.º 1
0
        private async void buttonSave_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                var path       = @Path.Combine(folderBrowserDialog.SelectedPath, $"{compressedFile.Name}.dat");
                var fileStream = new FileStream(path, FileMode.Create);
                var d          = new WriteStatusDelegate(WriteStatus);

                await Task.Run(() =>
                {
                    for (int position = 0; position < compressedFile.Data.Length; position++)
                    {
                        fileStream.WriteByte(compressedFile.Data[position]);

                        if (position % 500 == 0)
                        {
                            labelStatus.Invoke(d, $"Salvando: {(position * 100M / compressedFile.Data.Length).ToString("0.00")} %");
                        }
                    }

                    labelStatus.Invoke(d, $"Salvando: 100 %");

                    return(Task.CompletedTask);
                });

                fileStream.Close();
            }
        }
Ejemplo n.º 2
0
        private void FileReceiver_Load(object sender, EventArgs e)
        {
            server = new Server();

            serverThread = new Thread(async() =>
            {
                server.Start();

                while (!server.IsStopped)
                {
                    var context = await server.Listening();
                    var request = context.Request;

                    var setEnabled = new SetButtonSalvarEnabledDelegate(SetButtonSalvarEnabled);
                    buttonSalvar.Invoke(setEnabled, false);

                    if (request.Url.AbsolutePath == "/" && request.HttpMethod == "POST")
                    {
                        var writeStatus = new WriteStatusDelegate(WriteStatus);

                        string body;

                        labelStatus.Invoke(writeStatus, "Status: Lendo corpo da requisição");

                        using (var reader = new StreamReader(request.InputStream,
                                                             request.ContentEncoding))
                        {
                            body = reader.ReadToEnd();
                        }

                        labelStatus.Invoke(writeStatus, "Status: Lido corpo da requisição");

                        file = JsonConvert.DeserializeObject <CompressedFile>(body);

                        if (imageExtensions.Contains(Path.GetExtension(file.Name.ToUpperInvariant())))
                        {
                            var d = new PaintImageDelegate(PaintImage);
                            pictureBoxImage.Invoke(d);
                        }

                        labelStatus.Invoke(writeStatus, "Status: Ações completadas com sucesso");
                        buttonSalvar.Invoke(setEnabled, true);
                    }

                    var response             = context.Response;
                    response.ContentLength64 = 0;
                    response.StatusCode      = 200;
                    response.Close();
                }

                server.Stop();
            });

            serverThread.Start();
        }
Ejemplo n.º 3
0
 public void WriteStatus(string text)
 {
     if (InvokeRequired)
     {
         WriteStatusDelegate writeStatus = new WriteStatusDelegate(WriteStatus);
         BeginInvoke(writeStatus, new object[] { text });
     }
     else
     {
         tsslStatus.Text = text;
     }
 }
Ejemplo n.º 4
0
        private void PaintImage()
        {
            var writeStatus = new WriteStatusDelegate(WriteStatus);

            labelStatus.Invoke(writeStatus, "Status: Descomprimindo imagens...");

            var fileData = DecompressFile(file);

            labelStatus.Invoke(writeStatus, "Status: Imagem descomprimida com sucesso");

            using (var ms = new MemoryStream(fileData))
            {
                pictureBoxImage.Image = Image.FromStream(ms);
            }
        }
Ejemplo n.º 5
0
        private async void buttonSalvar_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                var writeStatus = new WriteStatusDelegate(WriteStatus);

                labelStatus.Invoke(writeStatus, "Status: Descomprimindo arquivo...");

                var fileData = await Task.Run(() => DecompressFile(file));

                labelStatus.Invoke(writeStatus, "Status: Arquivo descomprimido com sucesso");

                var path = @folderBrowserDialog.SelectedPath;
                File.WriteAllBytes(@Path.Combine(path, file.Name), fileData);

                labelStatus.Invoke(writeStatus, "Status: Arquivo salvo com sucesso");
            }
        }
Ejemplo n.º 6
0
        private async void panelFile_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = e.Data.GetData(DataFormats.FileDrop, false) as string[];

            ICompressor compressor;

            if (comboBoxAlgorithm.Text.Equals("Huffman"))
            {
                compressor = new HuffmanCoding();
            }
            else
            {
                compressor = new RunLengthEncodingCompressor();
            }

            var file = File.ReadAllBytes(@files.First());

            try
            {
                pictureBox.Hide();
                panelFile.BackgroundImage = Image.FromFile(@files.First());
            }
            catch
            {
                pictureBox.Show();
                panelFile.BackgroundImage = null;
            }

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var task = Task.Run(() =>
            {
                return(compressor.Compress(file));
            });

            compressedFile = await Task.Run(() =>
            {
                var writeStatus = new WriteStatusDelegate(WriteStatus);

                int i = 0;

                while (!task.IsCompleted)
                {
                    if (i == 500)
                    {
                        labelStatus.Invoke(writeStatus, $"Status: {compressor.Percentage.ToString("0.00")} % processado");
                    }

                    i = (i + 1) % 501;
                }

                labelStatus.Invoke(writeStatus, $"Status: 100 % processado");

                var f  = task.Result;
                f.Name = Path.GetFileName(files.First());
                return(f);
            });

            stopWatch.Stop();

            var compressionPercentage = compressedFile.Data.Length * 100M / file.Length;

            labelTempo.Text              = stopWatch.Elapsed.ToString(@"hh\:mm\:ss\.ffff");
            labelTamanho.Text            = (compressedFile.Data.LongLength / 1024M).ToString("0.000") + " kb";
            labelCompressionPercent.Text = $"{compressionPercentage.ToString("0.00")} %";
        }