use tracing_subscriber::prelude::*;
use std::time::Duration;
#[cfg(all(feature = "tokio", not(feature = "sync")))]
#[tokio::main]
async fn main() {
use yosemite::{style::Repliable, Session};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut server = Session::<Repliable>::new(Default::default()).await.unwrap();
let destination = server.destination().to_owned();
tokio::spawn(async move {
let mut buffer = [0u8; 1024];
for _ in 0..3 {
let (nread, destination) = server.recv_from(&mut buffer).await.unwrap();
server.send_to(&buffer[..nread], &destination).await.unwrap();
}
tokio::time::sleep(Duration::from_secs(5)).await;
});
let mut client = Session::<Repliable>::new(Default::default()).await.unwrap();
let mut buffer = [0u8; 1024];
for message in vec!["hello, world", "testing 123", "goodbye, world"] {
client.send_to(message.as_bytes(), &destination).await.unwrap();
let (nread, _) = client.recv_from(&mut buffer).await.unwrap();
tracing::info!(
"received = {}",
std::str::from_utf8(&buffer[..nread]).unwrap()
);
assert_eq!(message.as_bytes(), &buffer[..nread]);
tokio::time::sleep(Duration::from_secs(1)).await;
}
}
#[cfg(all(feature = "sync", not(feature = "tokio")))]
fn main() {
use yosemite::{style::Repliable, Session};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut server = Session::<Repliable>::new(Default::default()).unwrap();
let destination = server.destination().to_owned();
std::thread::spawn(move || {
let mut buffer = [0u8; 1024];
for _ in 0..3 {
let (nread, destination) = server.recv_from(&mut buffer).unwrap();
server.send_to(&buffer[..nread], &destination).unwrap();
}
std::thread::sleep(Duration::from_secs(5));
});
let mut client = Session::<Repliable>::new(Default::default()).unwrap();
let mut buffer = [0u8; 1024];
for message in vec!["hello, world", "testing 123", "goodbye, world"] {
client.send_to(message.as_bytes(), &destination).unwrap();
let (nread, _) = client.recv_from(&mut buffer).unwrap();
tracing::info!(
"received = {}",
std::str::from_utf8(&buffer[..nread]).unwrap()
);
assert_eq!(message.as_bytes(), &buffer[..nread]);
std::thread::sleep(Duration::from_secs(1));
}
}