internal WaitHandle CloseFileStreams(TorrentManager manager) { ManualResetEvent handle = new ManualResetEvent(false); IOLoop.Queue(delegate { // Process all pending reads/writes then close any open streams try { LoopTask(); writer.Close(manager.Torrent.Files); } catch (Exception ex) { SetError(manager, Reason.WriteFailure, ex); } finally { handle.Set(); } }); return(handle); }
void DhtEngineStateChanged(object o, EventArgs e) { if (dhtEngine.State != DhtState.Ready) { return; } MainLoop.Queue(delegate { foreach (TorrentManager manager in torrents) { if (!manager.CanUseDht) { continue; } dhtEngine.Announce(manager.InfoHash, Listener.Endpoint.Port); dhtEngine.GetPeers(manager.InfoHash); } }); }