internal static IAsyncResult BeginAnnounce(this Tracker tracker, IAnnounceRequest request, AsyncCallback callback, object state) { AsyncAnnounceParameters parameters = new AsyncAnnounceParameters(request, callback, state); ThreadPool.QueueUserWorkItem(new WaitCallback(Announce), parameters); return parameters.Result; }
public IAnnounceTransport CreateTransport(IAnnounceRequest request) { UdpAnnounceRequestPacket requestPacket = new UdpAnnounceRequestPacket(); requestPacket.info_hash = request.InfoHash; requestPacket.peer_id = request.PeerId; requestPacket.downloaded = (long)request.Downloaded; requestPacket.left = (long)request.Left; requestPacket.uploaded = (long)request.Uploaded; requestPacket.clientEvent = (int)UdpTrackerEvent.None; requestPacket.ip = request.Ip; requestPacket.port = (ushort)request.Port; UdpAnnounceTransport transport = new UdpAnnounceTransport(Tracker.Ip, Tracker.AnnounceUrl.Port, 60, requestPacket); transport.Request = request; return transport; }
public AsyncAnnounceParameters(IAnnounceRequest request, AsyncCallback callback, object state) { Request = request; Result = new AsyncAnnounceResult(state); Callback = callback; }
public IAnnounceTransport CreateTransport(IAnnounceRequest request) { if (request.InfoHash == null) throw new NullReferenceException("InfoHash"); if (request.PeerId == null) throw new NullReferenceException("PeerId"); if (request.Port == null) throw new NullReferenceException("Port"); if (request.Uploaded == null) throw new NullReferenceException("Uploaded"); if (request.Downloaded == null) throw new NullReferenceException("Downloaded"); if (request.Left == null) throw new NullReferenceException("Left"); NameValueCollection query = new NameValueCollection(baseAnnounceQuery); query.Add("info_hash", HttpUtility.UrlEncode(request.InfoHash)); query.Add("peer_id", HttpUtility.UrlEncode(request.PeerId)); query.Add("port", request.Port.ToString()); query.Add("uploaded", request.Uploaded.ToString()); query.Add("downloaded", request.Downloaded.ToString()); query.Add("left", request.Left.ToString()); if (request.Event != null && request.Event != HttpTrackerEvent.None) query.Add("event", Enum.GetName(typeof(HttpTrackerEvent), request.Event).ToLower()); if (request.Ip != null) query.Add("ip", request.Ip.ToString()); if (request is IAnnounceRequest2) { IAnnounceRequest2 request2 = (IAnnounceRequest2)request; if(request2.Compact != null) if (request2.Compact == true) query.Add("compact", Convert.ToInt16(request2.Compact).ToString()); } if (request is IAnnounceRequest3) { IAnnounceRequest3 request3 = (IAnnounceRequest3)request; if(request3.NoPeerId != null) if (request3.NoPeerId == true) query.Add("no_peer_id", Convert.ToInt16(request3.NoPeerId).ToString()); if(request3.NumWant != null) if (request3.NumWant >= 0) query.Add("numwant", request3.NumWant.ToString()); if (!String.IsNullOrEmpty(request3.Key)) query.Add("key", request3.Key); if (!String.IsNullOrEmpty(request3.TrackerId)) query.Add("trackerid", request3.TrackerId); } UriBuilder requestUriBuilder = new UriBuilder(baseAnnounceUri); requestUriBuilder.Query = BuildQueryString(query); HttpAnnounceTransport transport = new HttpAnnounceTransport(requestUriBuilder.Uri); transport.Request = request; return transport; }