use tracing_subscriber::prelude::*;
#[cfg(all(feature = "tokio", not(feature = "sync")))]
#[tokio::main]
async fn main() {
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use yosemite::{style::Stream, Session};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut session = Session::<Stream>::new(Default::default()).await.unwrap();
let destination = session.destination().to_owned();
tokio::spawn(async move {
while let Ok(mut stream) = session.accept().await {
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).await.unwrap();
stream.write_all(&mut buffer).await.unwrap();
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}
});
for i in 0..3 {
let mut session = Session::new(Default::default()).await.unwrap();
let mut stream = session.connect(&destination).await.unwrap();
stream.write_all(format!("hello, world {i}").as_bytes()).await.unwrap();
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).await.unwrap();
tracing::info!("stream {i} read: {:?}", std::str::from_utf8(&buffer));
}
}
#[cfg(all(feature = "sync", not(feature = "tokio")))]
fn main() {
use std::io::{Read, Write};
use yosemite::{style::Stream, Session};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut session = Session::<Stream>::new(Default::default()).unwrap();
let destination = session.destination().to_owned();
std::thread::spawn(move || {
while let Ok(mut stream) = session.accept() {
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).unwrap();
stream.write_all(&mut buffer).unwrap();
std::thread::sleep(std::time::Duration::from_secs(1));
}
});
for i in 0..3 {
let mut session = Session::new(Default::default()).unwrap();
let mut stream = session.connect(&destination).unwrap();
stream.write_all(format!("hello, world {i}").as_bytes()).unwrap();
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).unwrap();
tracing::info!("stream {i} read: {:?}", std::str::from_utf8(&buffer));
}
}