About

Bittorrent DHT by Dart.

codecov

Support:

Usage

A simple usage example:

import 'package:bittorrent_dht/bittorrent_dht.dart';

main() {
  var dht = DHT();
  dht.announce(infohashStr, port);
  await dht.bootstrap();
}

The method announce can invoke after DHT bootstrap. But I suggest that invoking it before DHT startted;

Onece DHT startted , it will check if there is ant announce , if it has , each new DHT node added , it will try to announce the local peer to the new node.

Before send announce_peer query , it should send get_peers query to get the token first , so when user invoke announce method , it will fire get_peers query automatically and return the result. In other word , if user isn't downloading any resource , he will not to announce local peer and he dont need any related peers also. However, user can invoke requestPeers method to request the peers:

  dht.requestPeers(infoHashStr);

When DHT found any new peer , it will notify the listener:

  dht.onNewPeer((address, port, infoHash) {
    // found new peer for InfoHash
  });

User can add a listener to get error from other nodes:

  dht.onError((code, msg) {
    log('An error occurred', error: '[$code]$msg');
  });

To stop DHT , invoke stop method:

  dht.stop();

Once DHT stopped , each hanlder will be removed and nothing will be save. If user start DHT after it stopped , everything will be fresh.

Testing

Run tests:

dart test

Run tests with coverage:

dart test --coverage=coverage
dart run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib

Or use the provided script:

dart tool/coverage.dart

The coverage report will be generated at coverage/lcov.info and can be viewed with tools like genhtml or uploaded to services like Codecov.

Coverage is automatically uploaded to Codecov on every push and pull request via GitHub Actions.

Libraries

bittorrent_dht