#[cfg(feature = "actix")]
extern crate actix_web;
extern crate futures;
#[cfg(feature = "hyper")]
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);
#[cfg(feature = "hyper")]
hyper::rt::run(publish);
#[cfg(feature = "actix")]
actix_web::actix::spawn(publish);
});
{
let client = get_client();
let req = client.pubsub_sub(TOPIC, false);
println!();
println!("waiting for messages on ({})...", TOPIC);
let fut = req
.take(5)
.for_each(|msg| {
println!();
println!("received ({:?})", msg);
Ok(())
})
.map_err(|e| eprintln!("{}", e));
#[cfg(feature = "hyper")]
hyper::rt::run(fut);
#[cfg(feature = "actix")]
actix_web::actix::run(|| {
fut.then(|_| {
actix_web::actix::System::current().stop();
Ok(())
})
});
}
}