rqbit/crates/dht/examples/dht.rs

57 lines
1.6 KiB
Rust
Raw Normal View History

2021-07-14 15:29:59 +01:00
use std::{str::FromStr, time::Duration};
2021-07-10 23:56:42 +01:00
2021-07-12 19:42:48 +01:00
use anyhow::Context;
2023-11-15 13:56:25 +00:00
use librqbit_dht::{Dht, Id20};
2021-07-12 19:42:48 +01:00
use tokio_stream::StreamExt;
2023-11-19 12:50:11 +00:00
use tracing::info;
2021-07-10 23:56:42 +01:00
2021-07-12 11:56:26 +01:00
#[tokio::main]
async fn main() -> anyhow::Result<()> {
2021-07-12 19:42:48 +01:00
let info_hash = Id20::from_str("64a980abe6e448226bb930ba061592e44c3781a1").unwrap();
2023-11-19 22:48:19 +00:00
tracing_subscriber::fmt::init();
2021-07-12 21:59:08 +01:00
let dht = Dht::new().await.context("error initializing DHT")?;
2021-07-13 16:10:36 +01:00
let mut stream = dht.get_peers(info_hash).await?;
2021-07-14 00:48:53 +01:00
2021-07-14 01:03:39 +01:00
let stats_printer = async {
2021-07-14 00:48:53 +01:00
loop {
tokio::time::sleep(Duration::from_secs(5)).await;
info!("DHT stats: {:?}", dht.stats());
}
2021-07-14 15:29:59 +01:00
#[allow(unreachable_code)]
2021-07-14 00:48:53 +01:00
Ok::<_, anyhow::Error>(())
};
2021-07-14 01:03:39 +01:00
let routing_table_dumper = async {
loop {
tokio::time::sleep(Duration::from_secs(15)).await;
dht.with_routing_table(|r| {
let filename = "/tmp/routing-table.json";
let mut f = std::fs::OpenOptions::new()
.create(true)
.write(true)
.open(filename)
.unwrap();
serde_json::to_writer_pretty(&mut f, r).unwrap();
info!("Dumped DHT routing table to {}", filename);
});
}
2021-07-14 15:29:59 +01:00
#[allow(unreachable_code)]
2021-07-14 01:03:39 +01:00
Ok::<_, anyhow::Error>(())
};
let peer_printer = async {
2021-07-14 00:48:53 +01:00
while let Some(peer) = stream.next().await {
2023-11-19 12:50:11 +00:00
info!("peer found: {}", peer)
2021-07-12 19:42:48 +01:00
}
2021-07-14 00:48:53 +01:00
Ok(())
};
let res = tokio::select! {
res = stats_printer => res,
res = peer_printer => res,
2021-07-14 01:03:39 +01:00
res = routing_table_dumper => res,
2021-07-14 00:48:53 +01:00
};
res
2021-07-10 23:56:42 +01:00
}