public bool IsRegistered(ITrackerListener listener) { CheckDisposed(); if (listener == null) { throw new ArgumentNullException(nameof(listener)); } return(Listeners.Contains(listener)); }
public void UnregisterListener(ITrackerListener listener) { CheckDisposed(); if (listener == null) { throw new ArgumentNullException("listener"); } listener.AnnounceReceived -= ListenerReceivedAnnounce; listener.ScrapeReceived -= ListenerReceivedScrape; Listeners.Remove(listener); }
public void RegisterListener(ITrackerListener listener) { CheckDisposed(); if (listener == null) { throw new ArgumentNullException(nameof(listener)); } listener.AnnounceReceived += ListenerReceivedAnnounce; listener.ScrapeReceived += ListenerReceivedScrape; Listeners.Add(listener); }
//------------------------------------------------------------- public void StartTracker(byte[] torrentData) //------------------------------------------------------------- { Log.Get().Write("Starting torrent tracker server, http on port: " + TRACKERHTTP_PORT + " udp on port: " + TRACKERUDP_PORT); if (!Helper.IsPortAvailable(TRACKERHTTP_PORT)) { Log.Get().Write("Failed starting torrent tracker server on http port: " + TRACKERHTTP_PORT + " Port in use", Log.LogType.Error); } if (!Helper.IsPortAvailable(TRACKERUDP_PORT)) { Log.Get().Write("Failed starting torrent tracker server on UDP port: " + TRACKERUDP_PORT + " Port in use", Log.LogType.Error); } //------------------------------------------------------------- //Create tracker server //------------------------------------------------------------- if (trackerServer == null) { trackerServer = new TrackerServer(); listenerHttp = TrackerListenerFactory.CreateHttp(IPAddress.Any, TRACKERHTTP_PORT); // http://localhost:{TRACKER_PORT}/announce listenerUdp = TrackerListenerFactory.CreateUdp(IPAddress.Any, TRACKERUDP_PORT); // http://localhost:{TRACKER_PORT}/announce //Add logning trackerServer.PeerAnnounced += delegate(object o, AnnounceEventArgs e) { Log.Get().Write("TrackerServer PeerAnnounced"); }; trackerServer.PeerScraped += delegate(object o, ScrapeEventArgs e) { Log.Get().Write("TrackerServer PeerScrape"); }; trackerServer.PeerTimedOut += delegate(object o, TimedOutEventArgs e) { Log.Get().Write("TrackerServer Peer timeout"); }; listenerHttp.AnnounceReceived += delegate(object o, AnnounceRequest e) { Log.Get().Write("TrackerListenerHTTP Announce received"); }; listenerHttp.ScrapeReceived += delegate(object o, TrackerScrapeRequest e) { Log.Get().Write("TrackerListenerHTTP Scrape received"); }; listenerHttp.StatusChanged += delegate(object o, EventArgs e) { Log.Get().Write("TrackerListenerHttp Status changed: " + listenerHttp.Status); //Typecast not working here, protectionlevel error. :( /*((MonoTorrent.Tracker.Listeners.HttpTrackerListener)o)*/ }; listenerUdp.AnnounceReceived += delegate(object o, AnnounceRequest e) { Log.Get().Write("TrackerListenerUDP Announce received"); }; listenerUdp.ScrapeReceived += delegate(object o, TrackerScrapeRequest e) { Log.Get().Write("TrackerListenerUDP Scrape received"); }; listenerUdp.StatusChanged += delegate(object o, EventArgs e) { Log.Get().Write("TrackerListenerUdp Status changed: " + listenerUdp.Status); }; //Start tracking server trackerServer.RegisterListener(listenerHttp); trackerServer.RegisterListener(listenerUdp); listenerUdp.Start(); listenerHttp.Start(); trackerServer.AllowUnregisteredTorrents = false; // If an announce request is received for a torrent which is not registered with the tracker an error will be returned. Log.Get().Write("TrackerListener listener status http:" + listenerHttp.Status + " udp status: " + listenerUdp.Status); } //------------------------------------------------------------- //Add new torrent to tracker //------------------------------------------------------------- MonoTorrent.Torrent torrent = MonoTorrent.Torrent.Load(torrentData); InfoHashTrackable trackable = new InfoHashTrackable(torrent); trackerServer.Add(trackable); Log.Get().Write("Adding torrent to tracker server, torrent size: " + torrentData.Length); //------------------------------------------------------------- //Seed file //------------------------------------------------------------- Log.Get().Write("Prepare to seed file"); DownloadTorrent(torrent); }