コード例 #1
0
 internal ClientAnnounceResponseMessage(AnnounceResponse response, TrustZoneSharedKey trustZoneSharedKey) : base()
 {
     Response           = response;
     TrustZoneSharedKey = trustZoneSharedKey;
 }
コード例 #2
0
ファイル: Tracker.cs プロジェクト: mdkozlowski/chestnut
        public void ReceivedData(UdpReceiveResult res, UdpClient client)
        {
            var receivedData    = res.Buffer;
            var endPointAddress = res.RemoteEndPoint.Address;
            var addressString   = endPointAddress.ToString();

            if (receivedData.Length > 12)
            {
                var action = Unpack.UInt32(receivedData, 8); //connect,announce,scrape
                switch (action)
                {
                case 0:
                    var connectRequest = new ConnectRequest(receivedData);
                    Console.WriteLine("[Connect] from " + addressString + ":" + res.RemoteEndPoint.Port);

                    var connectResponse = new ConnectResponse(0, connectRequest.TransactionID, (long)13376969);
                    SendDataAsync(client, connectResponse.Data, res.RemoteEndPoint);
                    break;


                case 1:
                    var announceRequest = new AnnounceRequest(receivedData);
                    Console.WriteLine("[Announce] from " + addressString + ":" + announceRequest.Port + ", " + (TorrentEvent)announceRequest.TorrentEvent);

                    var peer = new TorrentPeer(addressString, announceRequest.Port);

                    if ((TorrentEvent)announceRequest.TorrentEvent != TorrentEvent.Stopped)
                    {
                        RedisBacking.AddPeer(peer, announceRequest.InfoHash);
                    }
                    else
                    {
                        RedisBacking.RemovePeer(peer, announceRequest.InfoHash);
                    }

                    var peers       = RedisBacking.GetPeers(announceRequest.InfoHash);
                    var torrentInfo = RedisBacking.ScrapeHashes(new List <byte[]>()
                    {
                        announceRequest.InfoHash
                    });
                    var announceResponse = new AnnounceResponse(announceRequest.TransactionID, AnnounceInterval, torrentInfo.First().Leechers, torrentInfo.First().Seeders, peers);
                    SendDataAsync(client, announceResponse.Data, res.RemoteEndPoint);
                    break;


                case 2:
                    var scrapeRequest = new ScrapeRequest(receivedData);
                    Console.WriteLine(string.Format("[Scrape] from {0} for {1} torrents", addressString, scrapeRequest.InfoHashes.Count));

                    var scrapedTorrents = RedisBacking.ScrapeHashes(scrapeRequest.InfoHashes);
                    var scrapeResponse  = new ScrapeResponse(scrapeRequest.TransactionID, scrapedTorrents);

                    SendDataAsync(client, scrapeResponse.Data, res.RemoteEndPoint);

                    break;

                default:
                    Console.WriteLine(Encoding.UTF8.GetString(receivedData));
                    break;
                }
            }
            else
            {
                Console.WriteLine(Encoding.UTF8.GetString(receivedData));
            }
        }