public void SetUp()
 {
     assembler = new FileAssembler();
 }
示例#2
0
        private void downloadButton_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(saveTextBox.Text))
            {
                if (Directory.Exists(saveTextBox.Text))
                {
                    if (searchDataGridView.SelectedRows.Count > 0)
                    {
                        List <Content> selectedContent = new List <Content>();
                        foreach (DataGridViewRow row in searchDataGridView.SelectedRows)
                        {
                            selectedContent.Add(row.DataBoundItem as Content);
                        }
                        foreach (Content file in selectedContent)
                        {
                            // Set save path
                            file.LocalPath = saveTextBox.Text;

                            // Read local content and search for the selected hash
                            var contentList = persistenceManager.ReadContent();

                            var listToSeed = contentList.RemoteContent.Where(content => content.ContentHash.SequenceEqual(file.ContentHash)).Take(5);

                            int numTotalChunks = (int)Math.Ceiling(file.ByteSize / 256.0);
                            int numPerSeeder   = numTotalChunks / listToSeed.Count();
                            int leftover       = numTotalChunks % listToSeed.Count();

                            var dict = new ConcurrentDictionary <int, byte[]>();

                            var assembler = new FileAssembler(file, dict);
                            Assemblers.Add(assembler);
                            assembler.Start();

                            Log.Info(string.Format("Looking for {0} chunks from {1} seeders", numTotalChunks, listToSeed.Count()));
                            for (var i = 0; i < listToSeed.Count(); i++)
                            {
                                var c = listToSeed.ElementAt(i);

                                var set      = new HashSet <int>();
                                var endIndex = (i + 1) * numPerSeeder;
                                if (i == listToSeed.Count())
                                {
                                    endIndex += leftover;
                                }
                                for (var j = i * numPerSeeder; j < endIndex; j++)
                                {
                                    set.Add(j);
                                }

                                var seederConvo = new ChunkReceiver(c, set, dict, Guid.NewGuid());
                                router.AddConversation(seederConvo, new IPEndPoint(IPAddress.Parse(c.Host), c.Port));
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Failed");
                    }
                }
                else
                {
                    MessageBox.Show("The save location provided does not exist", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("You must specify a save location", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }