use tracing_subscriber::prelude::*;
#[cfg(all(feature = "tokio", not(feature = "sync")))]
#[tokio::main]
async fn main() {
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use yosemite::{
style::{Primary, Repliable, Stream},
Session,
};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut session = Session::<Stream>::new(Default::default()).await.unwrap();
let stream_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();
}
});
let mut server = Session::<Repliable>::new(Default::default()).await.unwrap();
let datagram_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();
}
});
let mut session = Session::<Primary>::new(Default::default()).await.unwrap();
let mut stream_session = session.create_subsession::<Stream>(Default::default()).await.unwrap();
let mut datagram_session =
session.create_subsession::<Repliable>(Default::default()).await.unwrap();
{
let mut stream = stream_session.connect(&stream_destination).await.unwrap();
stream.write_all(format!("hello, world 0").as_bytes()).await.unwrap();
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).await.unwrap();
tracing::info!("stream read: {:?}", std::str::from_utf8(&buffer));
}
{
let mut buffer = [0u8; 1024];
datagram_session
.send_to("goodbye world".as_bytes(), &datagram_destination)
.await
.unwrap();
let (nread, _) = datagram_session.recv_from(&mut buffer).await.unwrap();
tracing::info!(
"received = {}",
std::str::from_utf8(&buffer[..nread]).unwrap()
);
}
}
#[cfg(all(feature = "sync", not(feature = "tokio")))]
fn main() {
use std::io::{Read, Write};
use yosemite::{
style::{Primary, Repliable, Stream},
Session,
};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut session = Session::<Stream>::new(Default::default()).unwrap();
let stream_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();
}
});
let mut server = Session::<Repliable>::new(Default::default()).unwrap();
let datagram_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();
}
});
let mut session = Session::<Primary>::new(Default::default()).unwrap();
let mut stream_session = session.create_subsession::<Stream>(Default::default()).unwrap();
let mut datagram_session = session.create_subsession::<Repliable>(Default::default()).unwrap();
{
let mut stream = stream_session.connect(&stream_destination).unwrap();
stream.write_all(format!("hello, world 0").as_bytes()).unwrap();
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).unwrap();
tracing::info!("stream read: {:?}", std::str::from_utf8(&buffer));
}
{
let mut buffer = [0u8; 1024];
datagram_session
.send_to("goodbye world".as_bytes(), &datagram_destination)
.unwrap();
let (nread, _) = datagram_session.recv_from(&mut buffer).unwrap();
tracing::info!(
"received = {}",
std::str::from_utf8(&buffer[..nread]).unwrap()
);
}
}