Enable DHT
Version 1 (Alan McGovern, 04/20/2009 10:57 PM)
1 | 1 | h1. Enable DHT |
|
---|---|---|---|
2 | 1 | ||
3 | 1 | ||
4 | 1 | ||
5 | 1 | <pre><code class="java"> |
|
6 | 1 | ||
7 | 1 | public void StartDht (ClientEngine engine, int port) |
|
8 | 1 | { |
|
9 | 1 | // Send/receive DHT messages on the specified port |
|
10 | 1 | IPEndPoint listenAddress = new IPEndPoint (IPAddress.Any, port); |
|
11 | 1 | ||
12 | 1 | // Create a listener which will process incoming/outgoing dht messages |
|
13 | 1 | DhtListener listener = new UdpListener (listenAddress); |
|
14 | 1 | ||
15 | 1 | // Create the dht engine |
|
16 | 1 | DhtEngine dht = new DhtEngine (listener); |
|
17 | 1 | ||
18 | 1 | // Connect the Dht engine to the MonoTorrent engine |
|
19 | 1 | engine.RegisterDht (dht); |
|
20 | 1 | ||
21 | 1 | // Start listening for dht messages and activate the DHT engine |
|
22 | 1 | listener.Start (); |
|
23 | 1 | ||
24 | 1 | // If there are existing DHT nodes stored on disk, load them |
|
25 | 1 | // into the DHT engine so we can try and avoid a (very slow) |
|
26 | 1 | // full bootstrap |
|
27 | 1 | byte[] nodes = null; |
|
28 | 1 | if (File.Exists (path)) |
|
29 | 1 | nodes = File.ReadAllBytes (nodes); |
|
30 | 1 | dht.Start (nodes); |
|
31 | 1 | } |
|
32 | 1 | ||
33 | 1 | public void StopDht (DhtEngine dht, DhtListener listener) |
|
34 | 1 | { |
|
35 | 1 | // Stop the listener and dht engine. This does not |
|
36 | 1 | // clear internal data so the DHT can be started again |
|
37 | 1 | // later without needing a full bootstrap. |
|
38 | 1 | listener.Stop (); |
|
39 | 1 | dht.Stop (); |
|
40 | 1 | ||
41 | 1 | // Save all known dht nodes to disk so they can be restored |
|
42 | 1 | // later. This is *highly* recommended as it makes startup |
|
43 | 1 | // much much faster. |
|
44 | 1 | File.WriteAllBytes (path, dht.SaveNodes ()); |
|
45 | 1 | } |
|
46 | 1 | </code> |
|
47 | 1 | </pre> |