private void BitSwarm_MetadataReceived(object source, BitSwarm.MetadataReceivedArgs e) { if (InvokeRequired) { BeginInvoke(new Action(() => BitSwarm_MetadataReceived(source, e))); return; } else { torrent = e.Torrent; output.Text += bitSwarm.DumpTorrent().Replace("\n", "\r\n"); for (int i = 0; i < torrent.file.paths.Count; i++) { listBox1.Items.Add(torrent.file.paths[i]); } listBox1.BeginUpdate(); for (int i = 0; i < listBox1.Items.Count; i++) { listBox1.SetSelected(i, true); } listBox1.EndUpdate(); button2.Enabled = true; } }
private static void BitSwarm_StatusChanged(object source, BitSwarm.StatusChangedArgs e) { if (e.Status == 0 && torrent != null && torrent.file.name != null) { Console.WriteLine($"\r\nDownload of {torrent.file.name} success!\r\n\r\n"); Console.WriteLine(bitSwarm.DumpTorrent()); Console.WriteLine($"\r\nDownload of {torrent.file.name} success!\r\n\r\n"); } else if (e.Status == 2) { Console.WriteLine("An error has been occured :( \r\n" + e.ErrorMsg); } bitSwarm?.Dispose(); bitSwarm = null; sessionFinished = true; }
private static void Run(Options userOptions) { try { Console.WriteLine($"[BitSwarm v{BitSwarm.Version}] Initializing ..."); if (userOptions.Input == "config") { BitSwarmOptions.CreateConfig(new BitSwarmOptions()); Console.WriteLine($"[BitSwarm v{BitSwarm.Version}] Config {BitSwarmOptions.ConfigFile} created."); return; } else if ((bitSwarmOptions = BitSwarmOptions.LoadConfig()) != null) { Console.WriteLine($"[BitSwarm v{BitSwarm.Version}] Config {BitSwarmOptions.ConfigFile} loaded."); } if (bitSwarmOptions == null) { bitSwarmOptions = new BitSwarmOptions(); } if (!Options.ParseOptionsToBitSwarm(userOptions, ref bitSwarmOptions)) { return; } // BitSwarm [Create | Subscribe | Open | Start] bitSwarm = new BitSwarm(bitSwarmOptions); bitSwarm.MetadataReceived += BitSwarm_MetadataReceived; // Receives torrent data [on torrent file will fire directly, on magnetlink will fire on metadata received] bitSwarm.StatsUpdated += BitSwarm_StatsUpdated; // Stats refresh every 2 seconds bitSwarm.StatusChanged += BitSwarm_StatusChanged; // Paused/Stopped or Finished bitSwarm.Open(userOptions.Input); bitSwarm.Start(); // Stats | Torrent | Peers Views [Until Stop or Finish] ConsoleKeyInfo cki; Console.TreatControlCAsInput = true; prevHeight = Console.WindowHeight; while (!sessionFinished) { try { cki = Console.ReadKey(); if (sessionFinished) { break; } if ((cki.Modifiers & ConsoleModifiers.Control) != 0 && cki.Key == ConsoleKey.C) { break; } lock (lockRefresh) switch (cki.Key) { case ConsoleKey.D1: view = View.Stats; Console.Clear(); Console.WriteLine(bitSwarm.DumpStats()); PrintMenu(); break; case ConsoleKey.D2: view = View.Torrent; Console.Clear(); Console.WriteLine(bitSwarm.DumpTorrent()); PrintMenu(); break; case ConsoleKey.D3: view = View.Torrent; Console.Clear(); Console.WriteLine(bitSwarm.DumpPeers()); PrintMenu(); break; case ConsoleKey.D4: view = View.Peers; Console.Clear(); Console.WriteLine(bitSwarm.DumpPeers()); PrintMenu(); break; default: break; } } catch (Exception) { } } // Dispose (force) BitSwarm if (bitSwarm != null) { bitSwarm.Dispose(true); } } catch (Exception e) { Console.WriteLine($"[ERROR] {e.Message}"); } }