diff options
Diffstat (limited to 'ipfs-api/examples/ping_peer.rs')
-rw-r--r-- | ipfs-api/examples/ping_peer.rs | 75 |
1 files changed, 40 insertions, 35 deletions
diff --git a/ipfs-api/examples/ping_peer.rs b/ipfs-api/examples/ping_peer.rs index 3deb1e1..be55dd5 100644 --- a/ipfs-api/examples/ping_peer.rs +++ b/ipfs-api/examples/ping_peer.rs @@ -7,12 +7,11 @@ // extern crate futures; +extern crate hyper; extern crate ipfs_api; -extern crate tokio_core; -use futures::stream::Stream; -use ipfs_api::IpfsClient; -use tokio_core::reactor::Core; +use futures::{Future, Stream}; +use ipfs_api::{IpfsClient, response::PingResponse}; // Creates an Ipfs client, discovers a connected peer, and pings it using the // streaming Api, and by collecting it into a collection. @@ -20,39 +19,45 @@ use tokio_core::reactor::Core; fn main() { println!("connecting to localhost:5001..."); - let mut core = Core::new().expect("expected event loop"); - let client = IpfsClient::default(&core.handle()); + let client = IpfsClient::default(); println!(); println!("discovering connected peers..."); - let connected = client.swarm_peers(); - let connected = core.run(connected).expect("expected a valid response"); - - let peer = connected - .peers - .iter() - .next() - .expect("expected at least one peer"); - - println!(); - println!("discovered peer ({})", peer.peer); - println!(); - println!("streaming 10 pings..."); - let req = client.ping(&peer.peer[..], Some(10)); - - core.run(req.for_each(|ping| { - println!("{:?}", ping); - Ok(()) - })).expect("expected a valid response"); - - println!(); - println!("gathering 15 pings..."); - - let req = client.ping(&peer.peer[..], Some(15)); - let pings: Vec<_> = core.run(req.collect()).expect("expected a valid response"); - - for ping in pings.iter() { - println!("got response ({:?}) in ({})...", ping.text, ping.time); - } + let req = client + .swarm_peers() + .and_then(move |connected| { + let peer = connected + .peers + .iter() + .next() + .expect("expected at least one peer"); + + println!(); + println!("discovered peer ({})", peer.peer); + println!(); + println!("streaming 10 pings..."); + + let ping_stream = client.ping(&peer.peer[..], Some(10)).for_each(|ping| { + println!("{:?}", ping); + Ok(()) + }); + + let ping_gather = client.ping(&peer.peer[..], Some(15)).collect(); + + ping_stream.and_then(|_| { + println!(); + println!("gathering 15 pings..."); + + ping_gather + }) + }) + .map(|pings: Vec<PingResponse>| { + for ping in pings.iter() { + println!("got response ({:?}) at ({})...", ping.text, ping.time); + } + }) + .map_err(|e| eprintln!("{}", e)); + + hyper::rt::run(req); } |