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); } })); }
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); } }
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); }
public override void Handle(IDhtEngine engine, Node node) { base.Handle(engine, node); node.Token = Token; if (Nodes != null) { engine.Add(Node.FromCompactNode(Nodes)); } }
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); }
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); }
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; }
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; }
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()); } }
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); }
public void RegisterDht(IDhtEngine engine) { MainLoop.QueueWait(() => { if (dhtEngine != null) { dhtEngine.StateChanged -= DhtEngineStateChanged; dhtEngine.Stop(); dhtEngine.Dispose(); } dhtEngine = engine ?? new NullDhtEngine(); }); dhtEngine.StateChanged += DhtEngineStateChanged; }
public override void Handle(IDhtEngine engine, Node node) { base.Handle(engine, node); engine.Add(Node.FromCompactNode(Nodes.TextBytes)); }
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; }
public DhtEngineWrapper(IDhtEngine engine) { Engine = engine; Engine.StateChanged += (o, e) => StateChanged?.Invoke(this, EventArgs.Empty); }
public virtual void Handle(IDhtEngine engine, Node node) { node.Seen(); }
public override void Handle(IDhtEngine engine, Node node) { base.Handle(engine, node); throw new MessageException(ErrorCode, Message); }