6 releases (3 breaking)

0.4.1 Apr 25, 2020
0.4.0 Feb 10, 2020
0.3.1 May 7, 2019
0.2.0 May 5, 2019
0.1.0 Jan 3, 2019

#398 in Asynchronous

49 downloads per month
Used in wireguard-p2p

GPL-3.0 license

17KB
338 lines

A Rust API for OpenDHT.

#![feature(await_macro, async_await, futures_api)]

extern crate opendht;
extern crate futures;
#[macro_use] extern crate tokio;

use std::net::ToSocketAddrs;
use tokio::prelude::*;

use opendht::OpenDht;

async fn run(dht: OpenDht) {
    println!("Bootstrapping...");
    let addrs: Vec<_> = "bootstrap.ring.cx:4222".to_socket_addrs().unwrap().collect();
    let f = dht.bootstrap(&addrs);
    await!(f).unwrap();

    let key = &b"foo"[..];

    println!("Storing...");
    let f = dht.put(key, &[9,9,9]);
    await!(f).unwrap();

    let mut f = dht.get(key); // dht.listen(key) is also available

    while let Some(item) = await!(f.next()) {
        println!("Found {:?}", item);
    }

    dht.join();
    println!("Done: All threads joined.");
}

fn main() {
    tokio::run_async(async {
        let dht = OpenDht::new(4222).unwrap();

        let dht2 = dht.clone();
        tokio::spawn_async(async move {
            while let Some(next) = dht2.tick() {
                let f = tokio::timer::Delay::new(next);
                let _ = await!(f);
            }
        });

        await!(run(dht));
    });
}

Dependencies

~7MB
~192K SLoC