use std::time::Duration;
use nt_client::{subscribe::SubscriptionOptions, path, subscribe::ReceivedMessage, topic::TopicPath, Client};
#[tokio::main]
async fn main() {
let client = Client::new(Default::default());
client.connect_setup(setup).await.unwrap()
}
fn setup(client: &Client) {
let mut path = path!["my", "long", "path"];
let sub_topic = client.topic(path.clone());
tokio::spawn(async move {
let options = SubscriptionOptions { topics_only: Some(true), prefix: Some(true), ..Default::default() };
let mut subscriber = sub_topic.subscribe(options).await.unwrap();
while let Ok(ReceivedMessage::Announced(topic)) = subscriber.recv().await {
let path: TopicPath = topic.name().into();
println!("topic announced, last segment is: {:?}", path.segments.back());
}
});
path.segments.push_back("extra".to_owned());
let pub_topic = client.topic(path);
tokio::spawn(async move {
let publisher = pub_topic.publish::<u64>(Default::default()).await.unwrap();
let mut interval = tokio::time::interval(Duration::from_secs(1));
let mut counter = 0;
loop {
interval.tick().await;
publisher.set(counter).await.unwrap();
counter += 1;
}
});
}