예제 #1
0
        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";
            }
        }
예제 #2
0
        public void Initialize()
        {
            Pause();

            fileIndex    = -1;
            fileDistance = -1;
            status       = Status.STOPPED;

            tsStream?.Dispose(); tsStream = null;
        }
예제 #3
0
        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.");
        }
예제 #4
0
        public void Initialize()
        {
            Pause();

            fileIndex     = -1;
            fileIndexNext = -1;
            fileDistance  = -1;
            status        = Status.STOPPED;

            bitSwarm?.Dispose();
            torrent?.Dispose();
            bitSwarm = null;
            torrent  = null;
        }
예제 #5
0
        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;
        }
예제 #6
0
        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;
        }
예제 #7
0
        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}"); }
        }