Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "ECF BitTorrent Provider"
(→Plug-in Usage) |
(→Plug-in Usage) |
||
Line 53: | Line 53: | ||
'''Use Cases''' | '''Use Cases''' | ||
# - downloads a single file from a torrent until completion | # - downloads a single file from a torrent until completion | ||
− | # - begin downloading a single file from a torrent and | + | # - begin downloading a single file from a torrent and pause the download after a period of time |
## - resume the download | ## - resume the download | ||
## - cancel the download and delete the downloaded files | ## - cancel the download and delete the downloaded files | ||
# - start two downloads from two torrents until completion | # - start two downloads from two torrents until completion | ||
− | # - begin two downloads from two torrent and then | + | # - begin two downloads from two torrent and then pause the second one after a period of time |
## - resume the second download after the first has completed | ## - resume the second download after the first has completed | ||
## - cancel the first download and start the second download | ## - cancel the first download and start the second download | ||
Line 66: | Line 66: | ||
− | '''Use Case 1''' | + | '''Use Case 1''' - download a torrent's contents to completion |
− | Torrent torrent = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host = new Host(torrent); | Host host = new Host(torrent); | ||
host.connect(); | host.connect(); | ||
− | '''Use Case 2''' | + | '''Use Case 2''' - stop the download after a period of time |
− | Torrent torrent = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host = new Host(torrent); | Host host = new Host(torrent); | ||
− | host. | + | host.start(); |
// after some amount of time has passed | // after some amount of time has passed | ||
host.stop(); | host.stop(); | ||
− | '''Use Case 2.1''' | + | '''Use Case 2.1''' - resume downloading a torrent after pausing it for a period of time |
− | Torrent torrent = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host = new Host(torrent); | Host host = new Host(torrent); | ||
− | host. | + | host.start(); |
// after some amount of time has passed | // after some amount of time has passed | ||
− | host. | + | host.pause(); |
// more time passes | // more time passes | ||
host.resume(); | host.resume(); | ||
− | '''Use Case 2.2''' | + | '''Use Case 2.2''' - start a download and then stop it and remove all downloaded files |
− | Torrent torrent = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host = new Host(torrent); | Host host = new Host(torrent); | ||
− | host. | + | host.start(); |
// after some amount of time has passed | // after some amount of time has passed | ||
host.stop(); | host.stop(); | ||
− | |||
host.remove(); | host.remove(); | ||
− | '''Use Case 3''' | + | '''Use Case 3''' - begin downloading from two different torrents until completion |
− | Torrent torrent01 = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent"); |
Host host01 = new Host(torrent01); | Host host01 = new Host(torrent01); | ||
− | host. | + | host.start(); |
− | Torrent torrent02 = new Torrent("eclipse- | + | Torrent torrent02 = new Torrent(new FileInputStream("eclipse-ecf.torrent")); |
Host host02 = new Host(torrent02); | Host host02 = new Host(torrent02); | ||
− | host. | + | host.start(); |
− | '''Use Case 4''' | + | '''Use Case 4''' - start downloading two different torrents and pause one of them after a period of time |
− | Torrent torrent01 = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host01 = new Host(torrent01); | Host host01 = new Host(torrent01); | ||
− | + | host01.start(); | |
− | Torrent torrent02 = new Torrent("eclipse- | + | Torrent torrent02 = new Torrent(new FileInputStream("eclipse-ecf.torrent")); |
Host host02 = new Host(torrent02); | Host host02 = new Host(torrent02); | ||
− | + | host02.start(); | |
// some time passes | // some time passes | ||
− | host02. | + | host02.pause(); |
− | '''Use Case 4.1''' | + | '''Use Case 4.1''' - resume downloading the second torrent after the first has finished |
− | Torrent torrent01 = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host01 = new Host(torrent01); | Host host01 = new Host(torrent01); | ||
− | + | host01.start(); | |
− | Torrent torrent02 = new Torrent("eclipse- | + | Torrent torrent02 = new Torrent(new FileInputStream("eclipse-ecf.torrent")); |
Host host02 = new Host(torrent02); | Host host02 = new Host(torrent02); | ||
− | + | host02.start(); | |
// some time passes | // some time passes | ||
− | host02. | + | host02.pause(); |
− | while (! | + | while (!host01.isCompleted()); |
host02.resume(); | host02.resume(); | ||
− | '''Use Case 4.2''' | + | '''Use Case 4.2''' - cancel the first download and resume the second download |
− | Torrent torrent01 = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host01 = new Host(torrent01); | Host host01 = new Host(torrent01); | ||
− | + | host01.start(); | |
− | Torrent torrent02 = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent02 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host02 = new Host(torrent02); | Host host02 = new Host(torrent02); | ||
− | + | host02.start(); | |
// some time passes | // some time passes | ||
− | host02. | + | host02.pause(); |
// more time passes | // more time passes | ||
− | host01. | + | host01.stop(); |
host02.resume(); | host02.resume(); | ||
− | '''Use Case 5''' | + | '''Use Case 5''' - begin downloading from a torrent and monitor its progress with a listener |
− | Torrent torrent = new Torrent("eclipse-sdk.torrent"); | + | Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); |
Host host = new Host(torrent); | Host host = new Host(torrent); | ||
host.addProgressListener(new ProgressListener() { | host.addProgressListener(new ProgressListener() { |
Revision as of 20:30, 7 June 2006
Project Lead: Remy Chi Jian Suen
Mentor(s): Wayne Beaton, Scott Lewis, and Chris Aniszczyk
The goal if this project is to create an implementation of the file sharing API provided by the Eclipse Communication Framework using the BitTorrent protocol.
Contents
BitTorrent Plug-in Data Model
The package name org.eclipse.bittorrent may be altered when the plug-in is released.
Text in red denotes that the code has not been written yet.
org.eclipse.bittorrent
Host - reads in a Torrent connects to peers to begin seeding or downloading
- contains exactly one Torrent
- contains one or more DataFiles
- contains one or more Pieces
Torrent - a representation of the metainfo stored within a .torrent file
org.eclipse.bittorrent.internal.torrent
DataFile - a representation of a file on the user's system for read/write operations
- contains one or more Pieces
Piece - a piece of data that is needed to complete a download
- contains one or more DataFiles
org.eclipse.bittorrent.internal.net
ConnectionPool - a thread pool that manages ConnectionThreads
- contains exactly one Host
- contains one or more ConnectionThreads
ConnectionThread - creates a PeerConnection to talk to a peer
- contains exactly one PeerConnection
PeerConnection - connects to a peer and exchanges information
- exactly one Host
org.eclipse.bittorrent.internal.encode
BEncodedDictionary - holds the key-value pairs stored within a bencoded string.
Decode - decodes information such as the contents of a torrent file
Encode - converts or alters information for use
Plug-in Usage
This section will describe how a developer would create a client using the BitTorrent plug-in.
Use Cases
- - downloads a single file from a torrent until completion
- - begin downloading a single file from a torrent and pause the download after a period of time
- - resume the download
- - cancel the download and delete the downloaded files
- - start two downloads from two torrents until completion
- - begin two downloads from two torrent and then pause the second one after a period of time
- - resume the second download after the first has completed
- - cancel the first download and start the second download
- - begin downloading from a torrent and monitor its progress with a listener
- - LATER start downloading multiple files from a torrent and select which files should be downloaded
- - LATER begin downloading a file from a torrent and cap the download/upload speeds
- - LATER start a download from a torrent and alter the number of connections that can be made
Use Case 1 - download a torrent's contents to completion
Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host = new Host(torrent); host.connect();
Use Case 2 - stop the download after a period of time
Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host = new Host(torrent); host.start(); // after some amount of time has passed host.stop();
Use Case 2.1 - resume downloading a torrent after pausing it for a period of time
Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host = new Host(torrent); host.start(); // after some amount of time has passed host.pause(); // more time passes host.resume();
Use Case 2.2 - start a download and then stop it and remove all downloaded files
Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host = new Host(torrent); host.start(); // after some amount of time has passed host.stop(); host.remove();
Use Case 3 - begin downloading from two different torrents until completion
Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent"); Host host01 = new Host(torrent01); host.start(); Torrent torrent02 = new Torrent(new FileInputStream("eclipse-ecf.torrent")); Host host02 = new Host(torrent02); host.start();
Use Case 4 - start downloading two different torrents and pause one of them after a period of time
Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host01 = new Host(torrent01); host01.start(); Torrent torrent02 = new Torrent(new FileInputStream("eclipse-ecf.torrent")); Host host02 = new Host(torrent02); host02.start(); // some time passes host02.pause();
Use Case 4.1 - resume downloading the second torrent after the first has finished
Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host01 = new Host(torrent01); host01.start(); Torrent torrent02 = new Torrent(new FileInputStream("eclipse-ecf.torrent")); Host host02 = new Host(torrent02); host02.start(); // some time passes host02.pause(); while (!host01.isCompleted()); host02.resume();
Use Case 4.2 - cancel the first download and resume the second download
Torrent torrent01 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host01 = new Host(torrent01); host01.start(); Torrent torrent02 = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host02 = new Host(torrent02); host02.start(); // some time passes host02.pause(); // more time passes host01.stop(); host02.resume();
Use Case 5 - begin downloading from a torrent and monitor its progress with a listener
Torrent torrent = new Torrent(new FileInputStream("eclipse-sdk.torrent")); Host host = new Host(torrent); host.addProgressListener(new ProgressListener() { public void progressEvent(ProgressEvent event) { System.out.println(event.getRemaining()); } });