2017-09-28 11 views

답변

0

UWP의 경우 haroldma의 Universal.Torrent 라이브러리를 사용할 수 있습니다. UWP (Windows 10) 용 MonoTorrent의 범용 .NET 래퍼입니다.

는 그것은 또한 MonoTorrent - Magnet link to Torrent file에서 살펴 봐야 할 수도 있습니다

var port = 6881; 
var dhtPort = 15000; 

// Use Universal.Nat to enable upnp port mapping 
/* var natManager = new NatManager(port); 
natManager.Start();*/ 

var picker = new FileOpenPicker(); 
picker.FileTypeFilter.Add(".torrent"); 
var file = await picker.PickSingleFileAsync(); 
var stream = await file.OpenStreamForReadAsync(); 

var torrent = Common.Torrent.Load(stream); 
if (torrent != null) 
{ 
    var engineSettings = new EngineSettings(ApplicationData.Current.LocalFolder.Path, port) 
    { 
    PreferEncryption = true, AllowedEncryption = EncryptionTypes.All 
    }; 

    // Create the default settings which a torrent will have. 
    // 4 Upload slots - a good ratio is one slot per 5kB of upload speed 
    // 50 open connections - should never really need to be changed 
    // Unlimited download speed - valid range from 0 -> int.Max 
    // Unlimited upload speed - valid range from 0 -> int.Max 

    var torrentDefaults = new TorrentSettings(4, 150, 0, 0) 
    { 
    UseDht = true, EnablePeerExchange = true 
    }; 

    // Create an instance of the engine. 
    var engine = new ClientEngine(engineSettings); 
    //engine.ChangeListenEndpoint(new IPEndPoint(IPAddress.Any, port)); 

    var dhtListner = new DhtListener(new IPEndPoint(IPAddress.Any, dhtPort)); 
    var dht = new DhtEngine(dhtListner); 
    engine.RegisterDht(dht); 
    dhtListner.Start(); 
    engine.DhtEngine.Start(); 

    // When any preprocessing has been completed, you create a TorrentManager 
    // which you then register with the engine. 

    var manager = new TorrentManager(torrent, ApplicationData.Current.LocalFolder, torrentDefaults); 
    engine.Register(manager); 

    // Every time a piece is hashed, this is fired. 
    manager.PieceHashed += delegate(object o, PieceHashedEventArgs e) 
    { 
    Debug.WriteLine("Piece Hashed: {0} - {1}", e.PieceIndex, e.HashPassed ? "Pass" : "Fail"); 
    }; 

    // Every time the state changes (Stopped -> Seeding -> Downloading -> Hashing) this is fired 
    manager.TorrentStateChanged += delegate(object o, TorrentStateChangedEventArgs e) 
    { 
    Debug.WriteLine("OldState: " + e.OldState + " NewState: " + e.NewState); 
    }; 

    // Every time the tracker's state changes, this is fired 
    foreach(var t in manager.TrackerManager.SelectMany(tier => tier.Trackers)) 
    { 
    t.AnnounceComplete += delegate(object sender, AnnounceResponseEventArgs e) 
    { 
    Debug.WriteLine("{0}: {1}", e.Successful, e.Tracker); 
    }; 
    } 

    // Start the torrentmanager. The file will then hash (if required) and begin downloading/seeding 
    manager.Start(); 
    var dispatcher = Window.Current.Dispatcher; 
    engine.StatsUpdate += async(sender, args) => { 
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
    { 
     TextBlock.Text = $ "{manager.Peers.Seeds} seeds/{manager.Peers.Leechs} leechs/{manager.Progress} %"; 
    }); 
    }; 
} 

처럼 사용할 수 있습니다.