public void SetUp() { assembler = new FileAssembler(); }
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); } }