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.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/ipfs-api/examples/ping_peer.rs b/ipfs-api/examples/ping_peer.rs
new file mode 100644
index 0000000..8bd1346
--- /dev/null
+++ b/ipfs-api/examples/ping_peer.rs
@@ -0,0 +1,53 @@
+extern crate futures;
+extern crate ipfs_api;
+extern crate tokio_core;
+
+use futures::stream::Stream;
+use ipfs_api::IpfsClient;
+use tokio_core::reactor::Core;
+
+
+// Creates an Ipfs client, discovers a connected peer, and pings it using the
+// streaming Api, and by collecting it into a collection.
+//
+fn main() {
+ if let Ok(mut core) = Core::new() {
+ println!("connecting to localhost:5001...");
+
+ let client =
+ IpfsClient::new(&core.handle(), "localhost", 5001).expect("expected a valid url");
+
+ 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);
+ }
+ } else {
+ println!("failed to create event loop");
+ }
+}