Hosting a tracker
Version 6 (Alan McGovern, 07/30/2009 01:43 AM)
| 1 | 6 | Alan McGovern | h1. Hosting a tracker |
|---|---|---|---|
| 2 | 1 | ||
| 3 | 5 | Alan McGovern | [[Tracker Example#Example-1|Example 1]] Shows how to create a basic public tracker which tracks every torrent which it sees in an announce request |
| 4 | 5 | Alan McGovern | [[Tracker Example#Example-2|Example 2]] Shows how to create a private tracker which only tracks torrents explicitly registered with it |
| 5 | 1 | ||
| 6 | 3 | Alan McGovern | h2. Example 1 |
| 7 | 1 | ||
| 8 | 3 | Alan McGovern | <pre><code class="java"> |
| 9 | 3 | Alan McGovern | public void StartTracker () |
| 10 | 3 | Alan McGovern | { |
| 11 | 3 | Alan McGovern | Tracker tracker = new Tracker(); |
| 12 | 1 | ||
| 13 | 3 | Alan McGovern | // When unregistered torrents are allowed, if a client requests peers for |
| 14 | 3 | Alan McGovern | // a torrent which is not currently monitored by the tracker, that torrent |
| 15 | 3 | Alan McGovern | // will be added automatically. This is useful for creating a 'public' tracker. |
| 16 | 3 | Alan McGovern | // Normally, if this is false, announce requests for torrents not already |
| 17 | 3 | Alan McGovern | // registered with the engine are sent an error message. |
| 18 | 3 | Alan McGovern | tracker.AllowUnregisteredTorrents = true; |
| 19 | 1 | ||
| 20 | 3 | Alan McGovern | // Set the interval between announce requests to 1 hour and min interval to 10 mins |
| 21 | 3 | Alan McGovern | tracker.AnnounceInterval = TimeSpan.FromHours(1); |
| 22 | 3 | Alan McGovern | tracker.MinAnnounceInterval = TimeSpan.FromMinutes(10); |
| 23 | 3 | Alan McGovern | |
| 24 | 3 | Alan McGovern | // Create a listener which will respond to scrape/announce requests |
| 25 | 3 | Alan McGovern | // You can pass a prefix like: http://153.462.23.1/announce which will |
| 26 | 3 | Alan McGovern | // create a listener on port 80 (the default HTTP port) which will handle |
| 27 | 3 | Alan McGovern | // all announce requests. |
| 28 | 3 | Alan McGovern | HttpListener listener = new HttpListener("http://myserver.com/announce"); |
| 29 | 3 | Alan McGovern | tracker.RegisterListener(listener); |
| 30 | 3 | Alan McGovern | listener.Start(); |
| 31 | 3 | Alan McGovern | } |
| 32 | 3 | Alan McGovern | </code></pre> |
| 33 | 3 | Alan McGovern | |
| 34 | 3 | Alan McGovern | h2. Example 2 |
| 35 | 3 | Alan McGovern | |
| 36 | 3 | Alan McGovern | <pre><code class="java"> |
| 37 | 4 | Alan McGovern | // torrentDirectory is a folder containing .torrent files |
| 38 | 4 | Alan McGovern | // which should be loaded into the engine |
| 39 | 4 | Alan McGovern | public void StartTracker(string torrentDirectory) |
| 40 | 1 | { |
|
| 41 | 4 | Alan McGovern | // Create the tracker and register a listener as in Example 1 |
| 42 | 1 | Tracker tracker = new Tracker(); |
|
| 43 | 1 | HttpListener listener = new HttpListener("http://myserver.com/announce"); |
|
| 44 | 1 | tracker.RegisterListener(listener); |
|
| 45 | 1 | listener.Start(); |
|
| 46 | 4 | Alan McGovern | |
| 47 | 4 | Alan McGovern | // If an announce request is received for a torrent which is not registered with the |
| 48 | 4 | Alan McGovern | //the tracker an error will be returned. |
| 49 | 4 | Alan McGovern | tracker.AllowUnregisteredTorrents = false; |
| 50 | 4 | Alan McGovern | |
| 51 | 4 | Alan McGovern | // Load all torrents into the engine. Only announce requests for these torrents |
| 52 | 4 | Alan McGovern | // (or torrents added in the future) will be processed. |
| 53 | 4 | Alan McGovern | foreach (string file in Directory.GetFiles(torrentDirectory)) |
| 54 | 4 | Alan McGovern | { |
| 55 | 4 | Alan McGovern | Torrent torrent = Torrent.Load(file); |
| 56 | 4 | Alan McGovern | |
| 57 | 4 | Alan McGovern | // InfoHashTrackable is a basic subclass of ITrackable. It only stores |
| 58 | 4 | Alan McGovern | // the infohash and name of the torrent. If you need to store additional |
| 59 | 4 | Alan McGovern | // data for each torrent you're tracking, just subclass ITrackable or |
| 60 | 4 | Alan McGovern | // InfoHashTrackable and add the extra data there. |
| 61 | 4 | Alan McGovern | InfoHashTrackable trackable = new InfoHashTrackable(torrent); |
| 62 | 4 | Alan McGovern | tracker.Add(trackable); |
| 63 | 4 | Alan McGovern | } |
| 64 | 3 | Alan McGovern | } |
| 65 | 1 | </code></pre> |