use tracing_subscriber::prelude::*;
#[cfg(all(feature = "tokio", not(feature = "sync")))]
#[tokio::main]
async fn main() {
use tokio::{
io::{AsyncReadExt, AsyncWriteExt},
net::TcpListener,
};
use yosemite::{style::Stream, Session, SessionOptions};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut session = Session::<Stream>::new(SessionOptions {
silent_forward: true,
..Default::default()
})
.await
.unwrap();
let destination = session.destination().to_owned();
tokio::spawn(async move {
let listener = TcpListener::bind("127.0.0.1:20888").await.unwrap();
while let Ok((mut stream, _)) = listener.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;
}
});
session.forward(20888).await.unwrap();
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!("read = {:?}", std::str::from_utf8(&buffer));
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
}
}
#[cfg(all(feature = "sync", not(feature = "tokio")))]
fn main() {
use std::{
io::{Read, Write},
net::TcpListener,
};
use yosemite::{style::Stream, Session, SessionOptions};
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.try_init()
.unwrap();
let mut session = Session::<Stream>::new(SessionOptions {
silent_forward: true,
..Default::default()
})
.unwrap();
let destination = session.destination().to_owned();
std::thread::spawn(|| {
let listener = TcpListener::bind("127.0.0.1:20888").unwrap();
while let Ok((mut stream, _)) = listener.accept() {
let mut buffer = vec![0u8; 14];
stream.read_exact(&mut buffer).unwrap();
stream.write_all(&mut buffer).unwrap();
tracing::info!("read = {:?}", std::str::from_utf8(&buffer));
std::thread::sleep(std::time::Duration::from_secs(1));
}
});
session.forward(20888).unwrap();
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!("read = {:?}", std::str::from_utf8(&buffer));
std::thread::sleep(std::time::Duration::from_secs(1));
}
}