Пример #1
0
        public void AnnouncePeerEncode()
        {
//            var n = new Node(NodeId.Create(), null) {Token = _token};
            var message = new AnnouncePeer(_id, _infohash, 6881, _token)
            {
                TransactionId = _transactionId
            };

            Compare(message, "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz1234564:porti6881e5:token8:aoeusnthe1:q13:announce_peer1:t2:aa1:y1:qe");
        }
Пример #2
0
        public void AnnouncePeerEncode()
        {
            Node n = new System.Net.BitTorrent.Dht.Node(NodeId.Create(), null);

            n.Token = token;
            AnnouncePeer m = new AnnouncePeer(id, infohash, 6881, token);

            m.TransactionId = transactionId;

            Compare(m, "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz1234564:porti6881e5:token8:aoeusnthe1:q13:announce_peer1:t2:aa1:y1:qe");
        }
Пример #3
0
        public void AnnouncePeerDecode()
        {
            string       text = "d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz1234564:porti6881e5:token8:aoeusnthe1:q13:announce_peer1:t2:aa1:y1:qe";
            AnnouncePeer m    = (AnnouncePeer)Decode("d1:ad2:id20:abcdefghij01234567899:info_hash20:mnopqrstuvwxyz1234564:porti6881e5:token8:aoeusnthe1:q13:announce_peer1:t2:aa1:y1:qe");

            Assert.AreEqual(m.TransactionId, transactionId, "#1");
            Assert.AreEqual(m.MessageType, QueryMessage.QueryType, "#2");
            Assert.AreEqual(id, m.Id, "#3");
            Assert.AreEqual(infohash, m.InfoHash, "#3");
            Assert.AreEqual((BEncodedNumber)6881, m.Port, "#4");
            Assert.AreEqual(token, m.Token, "#5");

            Compare(m, text);
            message = m;
        }
Пример #4
0
        public async Task Execute()
        {
            GetPeersTask getpeers = new GetPeersTask(engine, infoHash);
            var          nodes    = await getpeers.Execute();

            foreach (Node n in nodes)
            {
                if (n.Token == null)
                {
                    continue;
                }
                AnnouncePeer query = new AnnouncePeer(engine.LocalId, infoHash, port, n.Token);
                await engine.SendQueryAsync(query, n);
            }
        }
Пример #5
0
        public async Task ExecuteAsync()
        {
            var getpeers             = new GetPeersTask(engine, infoHash);
            IEnumerable <Node> nodes = await getpeers.ExecuteAsync();

            var announceTasks = new List <Task> ();

            foreach (Node n in nodes)
            {
                if (n.Token != null)
                {
                    var query = new AnnouncePeer(engine.LocalId, infoHash, port, n.Token);
                    announceTasks.Add(engine.SendQueryAsync(query, n));
                }
            }
            await Task.WhenAll(announceTasks);
        }
Пример #6
0
        private void GotPeers(object o, TaskCompleteEventArgs e)
        {
            e.Task.Completed -= GotPeers;
            GetPeersTask getpeers = (GetPeersTask)e.Task;

            foreach (Node n in getpeers.ClosestActiveNodes.Values)
            {
                if (n.Token == null)
                {
                    continue;
                }
                AnnouncePeer  query = new AnnouncePeer(_engine.LocalId, _infoHash, _port, n.Token);
                SendQueryTask task  = new SendQueryTask(_engine, query, n);
                task.Completed += SentAnnounce;
                task.Execute();
                _activeAnnounces++;
            }

            if (_activeAnnounces == 0)
            {
                RaiseComplete(new TaskCompleteEventArgs(this));
            }
        }