-2
예 : 자석 링크로 웹 사이트를 클릭 한 다음 자동으로이 토렌트로 내 앱을 열려고합니다. 내가 어떻게 할 수 있니? UWP C#UWP 앱에서 자석 (토런트) 링크를 처리하는 방법
예 : 자석 링크로 웹 사이트를 클릭 한 다음 자동으로이 토렌트로 내 앱을 열려고합니다. 내가 어떻게 할 수 있니? UWP C#UWP 앱에서 자석 (토런트) 링크를 처리하는 방법
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} %";
});
};
}
처럼 사용할 수 있습니다.