static void Main(string[] args) { UdpListener listener = new UdpListener(new IPEndPoint(IPAddress.Parse("192.168.0.6"), 15000)); DhtEngine engine = new DhtEngine(listener); byte[] nodes = null; if (File.Exists("mynodes")) nodes = File.ReadAllBytes("mynodes"); listener.Start(); engine.PeersFound += delegate(object o, PeersFoundEventArgs e) { Console.WriteLine("I FOUND PEERS: {0}", e.Peers.Count); engine.Start(nodes); Random random = new Random(5); byte[] b = new byte[20]; lock (random) random.NextBytes(b); while(Console.ReadLine() != "q") { for (int i = 0; i < 30; i++) { Console.WriteLine("Waiting: {0} seconds left", (30 - i)); System.Threading.Thread.Sleep(1000); } // Get some peers for the torrent engine.GetPeers(b); random.NextBytes(b); } File.WriteAllBytes("mynodes", engine.SaveNodes()); } }
public ClientEngine(EngineSettings settings, PeerListener listener, PieceWriter writer) { Check.Settings(settings); Check.Listener(listener); Check.Writer(writer); this.listener = listener; this.settings = settings; this.connectionManager = new ConnectionManager(this); this.dhtListener = new UdpListener(new IPEndPoint(IPAddress.Any, settings.ListenPort)); this.dhtEngine = new DhtEngine(dhtListener); this.diskManager = new DiskManager(this, writer); this.listenManager = new ListenManager(this); MainLoop.QueueTimeout(TimeSpan.FromMilliseconds(TickLength), delegate { if (IsRunning && !disposed) LogicTick(); return !disposed; }); this.torrents = new MonoTorrentCollection<TorrentManager>(); this.downloadLimiter = new RateLimiter(); this.uploadLimiter = new RateLimiter(); this.peerId = GeneratePeerId(); listenManager.Register(listener); dhtEngine.StateChanged += delegate { if (dhtEngine.State != State.Ready) return; MainLoop.Queue(delegate { foreach (TorrentManager manager in torrents) { if (!manager.CanUseDht) continue; dhtEngine.Announce(manager.Torrent.infoHash, Listener.Endpoint.Port); dhtEngine.GetPeers(manager.Torrent.infoHash); } }); }; // This means we created the listener in the constructor if (listener.Endpoint.Port == 0) listener.ChangeEndpoint(new IPEndPoint(IPAddress.Any, settings.ListenPort)); listener.Start(); }