private void button1_Click(object sender, EventArgs e) { if (button1.Text == "Start") { output.Text = ""; listBox1.Items.Clear(); button2.Enabled = false; try { opt = new Options(); opt.FolderComplete = downPath.Text; opt.MaxThreads = int.Parse(maxCon.Text); opt.MinThreads = int.Parse(maxThreads.Text); opt.SleepModeLimit = int.Parse(sleepLimit.Text); opt.PeersFromTracker = int.Parse(peersFromTrackers.Text); opt.ConnectionTimeout = int.Parse(conTimeout.Text); opt.HandshakeTimeout = int.Parse(handTimeout.Text); opt.PieceTimeout = int.Parse(pieceTimeout.Text); opt.MetadataTimeout = int.Parse(metaTimeout.Text); opt.Verbosity = 0; opt.LogDHT = false; opt.LogStats = false; opt.LogTracker = false; opt.LogPeer = false; output.Text = "Started at " + DateTime.Now.ToString("G", DateTimeFormatInfo.InvariantInfo) + "\r\n"; button1.Text = "Stop"; bitSwarm = new BitSwarm(opt); bitSwarm.StatsUpdated += BitSwarm_StatsUpdated; bitSwarm.MetadataReceived += BitSwarm_MetadataReceived; bitSwarm.StatusChanged += BitSwarm_StatusChanged; bitSwarm.Open(input.Text); bitSwarm.Start(); } catch (Exception e1) { output.Text += e1.Message + "\r\n" + e1.StackTrace; button1.Text = "Start"; button2.Enabled = false; } } else { bitSwarm.Dispose(); button1.Text = "Start"; } }
public void Initialize() { Pause(); fileIndex = -1; fileDistance = -1; status = Status.STOPPED; tsStream?.Dispose(); tsStream = null; }
private void OnStatusChanged(BitSwarm.StatusChangedArgs e, Action <string> writeLog, Action onDownloadFinished) { const string EventType = "StatusChanged"; writeLog($"[{EventType}] Status code: {e.Status}.{(e.ErrorMsg != string.Empty ? $" Error message: {e.ErrorMsg}." : string.Empty)}."); writeLog($"[{EventType}] Disposing BitSwarm..."); _bitSwarm.Dispose(); CleanUpFiles(); onDownloadFinished.Invoke(); writeLog($"[{EventType}] Done."); }
public void Initialize() { Pause(); fileIndex = -1; fileIndexNext = -1; fileDistance = -1; status = Status.STOPPED; bitSwarm?.Dispose(); torrent?.Dispose(); bitSwarm = null; torrent = null; }
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; }
public void Dispose() { if (Disposed) { return; } Log("Stopped"); player.decoder.Stop(); player.decoder.demuxer.ioStream = null; bitSwarm?.Dispose(); Torrent?.Dispose(); bitSwarm = null; Torrent = null; sortedPaths = null; downloadNextStarted = false; Disposed = 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}"); } }