private static void BitSwarm_StatsUpdated(object source, BitSwarm.StatsUpdatedArgs e) { try { if (view != View.Stats && view != View.Peers) { return; } if (Console.WindowHeight != prevHeight) { prevHeight = Console.WindowHeight; Console.Clear(); } lock (lockRefresh) if (view == View.Peers) { Console.Clear(); Console.SetCursorPosition(0, 0); Console.WriteLine(bitSwarm.DumpPeers()); } else if (view == View.Stats) { Console.SetCursorPosition(0, 0); Console.WriteLine(bitSwarm.DumpStats()); } PrintMenu(); } catch (Exception) { } }
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}"); } }