private static void BitSwarm_MetadataReceived(object source, BitSwarm.MetadataReceivedArgs e) { lock (lockRefresh) { torrent = e.Torrent; view = View.Torrent; Console.Clear(); Console.WriteLine(bitSwarm.DumpTorrent()); PrintMenu(); } System.Threading.Thread tmp = new System.Threading.Thread(() => { lock (lockRefresh) { System.Threading.Thread.Sleep(3000); Console.Clear(); Console.WriteLine(bitSwarm.DumpStats()); PrintMenu(); view = View.Stats; } }); tmp.IsBackground = true; tmp.Start(); }
private static void BitSwarm_StatsUpdated(object source, BitSwarm.StatsUpdatedArgs e) { WriteLine(bitSwarm.DumpStats()); }
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}"); } }