Code Monkey home page Code Monkey logo

leak's Introduction

leak

Leak is a torrent library for .NET 4.5 written only in C#. It implements its own IO layer to fully benefit from use of windows completion ports. It also delivers sample end user tools to demonstrate all its features.

downloads

The latest release of the leak library is available on NuGet or can be downloaded from GitHub.

documentation

Documentation is hosted on GitHub at https://github.com/amacal/leak/wiki.

license

Leak is Open Source software and is released under the MIT license. The license allows the use of Leak in free and commercial applications and libraries without restrictions.

sample

string tracker = "http://bttracker.debian.org:6969/announce";
FileHash hash = FileHash.Parse("883c6f02fc46188ac17ea49c13c3e9d97413a5a2");

using (SwarmClient client = new SwarmClient())
{
    SwarmNotification notification = null;
    SwarmSession session = await client.Connect(hash, tracker);

    session.Download("d:\\leak");

    do
    {
        notification = await session.Next();
    }
    while (notification.Type != SwarmNotificationType.DataCompleted)
}

leak's People

Contributors

amacal avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

leak's Issues

Dlls

Is it possible to instead of having a lot of smaller dlls to have one or two bigger ones, seems better to distribute that way.

write to other than console

can you include progress events, now the notification goes to the console and i'd rather have a progress event with info like peers, chokes etc. all in seperate event class

messages

can i use this lib to send messages to other clients of the swarm?

Sould i send trackers?

As we can see here; - params string[] trackers! it's cool

  public Task<SwarmSession> ConnectAsync(FileHash hash, params string[] trackers)
        {
            runtime.Start();

            SwarmConnect connect = new SwarmConnect
            {
                Hash = hash,
                Settings = settings,
                Localhost = PeerHash.Random(),
                Notifications = new NotificationCollection(),
                Completion = new TaskCompletionSource<SwarmSession>(),
                Peers = new HashSet<PeerHash>(),
                Remotes = new HashSet<NetworkAddress>(),
                Pipeline = runtime.Pipeline,
                Files = runtime.Files,
                Worker = runtime.Worker
            };

            connect.Start();
            connect.Announce(trackers);

            return connect.Completion.Task;
        }

there

But in user-tool and SwarmHelper
public static async Task DownloadAsync(string destination, FileHash hash, string tracker, NotificationCallback callback)
        {
            using (SwarmClient client = new SwarmClient())
            {
                Notification notification;
                SwarmSession session = await client.ConnectAsync(hash, tracker);

                session.Download(destination);

                while (true)
                {
                    notification = await session.NextAsync();
                    callback?.Invoke(notification);

                    if (notification.Type == NotificationType.DataCompleted)
                        break;
                }
            }
        }

there

string tracker (just one? too sad)
Great library, can u fix that or pull sombody (how can i pull, i am beginner)
I think it will be good update!

Downloaded files are locked

I'm trying to move finished torrents to another directory, but the folder/files are still locked after download has been completed.

I'm using this code:

public static async Task<String> DownloadTorrent(String torrentFile)
{
	try
	{
		var parser = new BencodeNET.Parsing.BencodeParser();
		BencodeNET.Torrents.Torrent torrent = parser.Parse<BencodeNET.Torrents.Torrent>(torrentFile);

		using (Leak.Client.Swarm.SwarmClient client = new Leak.Client.Swarm.SwarmClient())
		{
			Leak.Client.Notification notification = null;
			var hash = Leak.Common.FileHash.Parse(torrent.OriginalInfoHash);

			List<String> allTrackers = new List<string>();
			foreach (var tr in torrent.Trackers)
				allTrackers.AddRange(tr);

			var session = await client.ConnectAsync(hash, allTrackers.ToArray());

			session.Download(@"C:\Torrents\InProgress");

			do
			{
				notification = await session.NextAsync();
				if (notification is Leak.Client.Notifications.DataChangedNotification datNot)
				{
					Console.WriteLine($"Downloading ({Math.Round((((double)datNot.Completed / (double)torrent.NumberOfPieces) * 100), 2)}%)");
				}
			}
			while (notification.Type != Leak.Client.NotificationType.DataCompleted);
		}

		if (System.IO.Directory.Exists($"C:\\Torrents\\InProgress\\{torrent.OriginalInfoHash}"))
		{
			System.IO.Directory.Move($"C:\\Torrents\\InProgress\\{torrent.OriginalInfoHash}", $"C:\\Torrents\\Finished\\{torrent.OriginalInfoHash}");
		}

		return $"C:\\Torrents\\Finished\\{torrent.OriginalInfoHash}";
	}
	catch(Exception ex)
	{
		System.Diagnostics.Debug.WriteLine(ex);
	}

	return null;
}

I always get a System.IO.IOException when trying to move the directory from InProgress to Finished: Access to the path 'C:\\Torrents\\InProgress\\[[REDACTED HASH]]' is denied.

If I restart the application and add code to move it before it tries to download them it moves the directory successfully.

I'm guessing either the SwarmClient or SwarmSession isn't releasing their resources properly.

SwarmClient Seeding Breaks After Peer Disconnect

Upon using both a SwarmClient session & SwarmHelper.Seed I've found they both refuse to accept new Peers after the first disconnects.

Here's a log:

Meta: pieces=53; piece-size=1MB
Meta: ....zip [54646208 bytes]
Data: allocated; directory=C:\...\16b2fe076dfa26dc6e6e6fb22007582c1aa488fa
Data: verified; bitfield=53/53
Data: completed
Memory: allocation=256kB
Memory: allocation=512kB
Peer: connected; id=2d7142343131302d6e4a2a29395264774e732834
Peer: id=2d7142343131302d6e4a2a29395264774e732834; bitfield=53/53
Peer: id=2d7142343131302d6e4a2a29395264774e732834; status=local-choking
Peer: disconnected; id=2d7142343131302d6e4a2a29395264774e732834

After that SwarmHelper.Seed refuses to accept new Peers. Is there an option or something I missed?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.