extern crate futures;
extern crate hyper;
extern crate ipfs_api;
extern crate tokio_timer;
use futures::{Future, Stream};
use ipfs_api::IpfsClient;
use std::{thread, time::{Duration, Instant}};
use tokio_timer::Interval;
static TOPIC: &'static str = "test";
fn get_client() -> IpfsClient {
println!("connecting to localhost:5001...");
IpfsClient::default()
}
fn main() {
thread::spawn(move || {
let client = get_client();
let publish = Interval::new(Instant::now(), Duration::from_secs(1))
.map_err(|e| eprintln!("{}", e))
.for_each(move |_| {
println!();
println!("publishing message...");
client
.pubsub_pub(TOPIC, "Hello World!")
.map_err(|e| eprintln!("{}", e))
});
println!();
println!("starting task to publish messages to ({})...", TOPIC);
hyper::rt::run(publish);
});
{
let client = get_client();
let req = client.pubsub_sub(TOPIC, false);
println!();
println!("waiting for messages on ({})...", TOPIC);
hyper::rt::run(
req.take(5)
.for_each(|msg| {
println!();
println!("received ({:?})", msg);
Ok(())
})
.map_err(|e| eprintln!("{}", e)),
)
}
}