summaryrefslogtreecommitdiffstats
path: root/ipfs-api/examples/ping_peer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ipfs-api/examples/ping_peer.rs')
-rw-r--r--ipfs-api/examples/ping_peer.rs75
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);
}