コード例 #1
0
ファイル: MessageLoop.cs プロジェクト: tcz717/DhtWalker
        public MessageLoop(IDhtEngine engine, DhtListener listener)
        {
            this.engine               = engine;
            this.listener             = listener;
            listener.MessageReceived += new MessageReceived(OnMessageReceived);
            handleThread              = new Thread(new ThreadStart(delegate
            {
                while (true)
                {
                    if (engine.Disposed)
                    {
                        return;
                    }
                    try
                    {
                        SendMessage();
                        ReceiveMessage();
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("Error in DHT main loop:");
                        Debug.WriteLine(ex);
                    }

                    Thread.Sleep(3);
                }
            }));
        }
コード例 #2
0
        public override void Handle(IDhtEngine engine, Node node)
        {
            base.Handle(engine, node);

            BEncodedString   token    = engine.TokenManager.GenerateToken(node);
            GetPeersResponse response = new GetPeersResponse(engine.LocalId, TransactionId, token);

            var result = engine.QueryGetPeers(InfoHash);

            if (result.HasHash)
            {
                BEncodedList list = new BEncodedList();
                foreach (Node n in result.Values)
                {
                    list.Add(n.CompactPort());
                }
                response.Values = list;
            }
            else
            {
                // Is this right?
                response.Nodes = Node.CompactNode(result.Nodes);
            }

            if (Hook == null || Hook(response))
            {
                engine.Send(response, node.EndPoint);
            }
        }
コード例 #3
0
        public override void Handle(IDhtEngine engine, Node node)
        {
            base.Handle(engine, node);

            PingResponse m = new PingResponse(engine.GetNeighborId(Id), TransactionId);

            engine.Send(m, node.EndPoint);
        }
コード例 #4
0
 public override void Handle(IDhtEngine engine, Node node)
 {
     base.Handle(engine, node);
     node.Token = Token;
     if (Nodes != null)
     {
         engine.Add(Node.FromCompactNode(Nodes));
     }
 }
コード例 #5
0
ファイル: FindNode.cs プロジェクト: yuxi214/DHTSpider
        public override void Handle(IDhtEngine engine, Node node)
        {
            base.Handle(engine, node);
            FindNodeResponse response = new FindNodeResponse(engine.LocalId, TransactionId);
            var result = engine.QueryFindNode(Target);

            response.Nodes = Node.CompactNode(result.Nodes);

            engine.Send(response, node.EndPoint);
        }
コード例 #6
0
ファイル: FindNode.cs プロジェクト: csecong/DHTSpider
        public override void Handle(IDhtEngine engine, Node node)
        {
            base.Handle(engine, node);

            //FindNodeResponse response = new FindNodeResponse(engine.GetNeighborId(Id), TransactionId);

            //var result = engine.QueryFindNode(Target);
            //response.Nodes = Node.CompactNode(result.Nodes);

            //engine.Send(response, node.EndPoint);
        }
コード例 #7
0
        public void RegisterDht(IDhtEngine engine)
        {
            MainLoop.QueueWait(delegate
            {
                if (dhtEngine != null)
                {
                    dhtEngine.StateChanged -= DhtEngineStateChanged;
                    dhtEngine.Stop();
                    dhtEngine.Dispose();
                }
                dhtEngine = engine ?? new NullDhtEngine();
            });

            dhtEngine.StateChanged += DhtEngineStateChanged;
        }
コード例 #8
0
ファイル: ClientEngine.cs プロジェクト: ivaylo5ev/monotorrent
        public async Task RegisterDhtAsync(IDhtEngine engine)
        {
            await MainLoop;

            if (DhtEngine != null)
            {
                DhtEngine.StateChanged -= DhtEngineStateChanged;
                await DhtEngine.StopAsync();

                DhtEngine.Dispose();
            }
            DhtEngine = engine ?? new NullDhtEngine();

            DhtEngine.StateChanged += DhtEngineStateChanged;
        }
コード例 #9
0
        async Task RegisterDht(IDhtEngine engine)
        {
            if (DhtEngine != null)
            {
                DhtEngine.StateChanged -= DhtEngineStateChanged;
                DhtEngine.PeersFound   -= DhtEnginePeersFound;
                await DhtEngine.StopAsync();

                DhtEngine.Dispose();
            }
            DhtEngine = engine ?? new NullDhtEngine();

            DhtEngine.StateChanged += DhtEngineStateChanged;
            DhtEngine.PeersFound   += DhtEnginePeersFound;
            if (IsRunning)
            {
                await DhtEngine.StartAsync(await MaybeLoadDhtNodes());
            }
        }
コード例 #10
0
ファイル: AnnouncePeer.cs プロジェクト: yuxi214/DHTSpider
        public override void Handle(IDhtEngine engine, Node node)
        {
            base.Handle(engine, node);

            DhtMessage response;

            if (engine.TokenManager.VerifyToken(node, Token))
            {
                engine.GetAnnounced(new InfoHash(InfoHash.Bytes),
                                    new IPEndPoint(node.EndPoint.Address, (int)Port.Number));
                response = new AnnouncePeerResponse(engine.GetNeighborId(Id), TransactionId);
            }
            else
            {
                response = new ErrorMessage(ErrorCode.ProtocolError, "Invalid or expired token received");
            }

            engine.Send(response, node.EndPoint);
        }
コード例 #11
0
ファイル: ClientEngine.cs プロジェクト: mrscylla/octotorrent
        public void RegisterDht(IDhtEngine engine)
        {
            MainLoop.QueueWait(() =>
                                   {
                                       if (dhtEngine != null)
                                       {
                                           dhtEngine.StateChanged -= DhtEngineStateChanged;
                                           dhtEngine.Stop();
                                           dhtEngine.Dispose();
                                       }
                                       dhtEngine = engine ?? new NullDhtEngine();
                                   });

            dhtEngine.StateChanged += DhtEngineStateChanged;
        }
コード例 #12
0
 public override void Handle(IDhtEngine engine, Node node)
 {
     base.Handle(engine, node);
     engine.Add(Node.FromCompactNode(Nodes.TextBytes));
 }
コード例 #13
0
        public void RegisterDht(IDhtEngine engine)
        {
            MainLoop.QueueWait(delegate
            {
                if (DhtEngine != null)
                {
                    DhtEngine.StateChanged -= DhtEngineStateChanged;
                    DhtEngine.Stop();
                    DhtEngine.Dispose();
                }
                DhtEngine = engine ?? new NullDhtEngine();
            });

            DhtEngine.StateChanged += DhtEngineStateChanged;
        }
コード例 #14
0
 public DhtEngineWrapper(IDhtEngine engine)
 {
     Engine = engine;
     Engine.StateChanged += (o, e) => StateChanged?.Invoke(this, EventArgs.Empty);
 }
コード例 #15
0
 public virtual void Handle(IDhtEngine engine, Node node)
 {
     node.Seen();
 }
コード例 #16
0
ファイル: ErrorMessage.cs プロジェクト: yuxi214/DHTSpider
        public override void Handle(IDhtEngine engine, Node node)
        {
            base.Handle(engine, node);

            throw new MessageException(ErrorCode, Message);
        }