diff --git a/Cargo.toml b/Cargo.toml index 9297449..4871e8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] + +[dev-dependencies] +async-io = "1.6.0" +futures-lite = "1.12.0" diff --git a/examples/io.rs b/examples/io.rs new file mode 100644 index 0000000..b982e6f --- /dev/null +++ b/examples/io.rs @@ -0,0 +1,58 @@ +use async_io::{Async, Timer}; +use futures_lite::{AsyncReadExt, AsyncWriteExt}; +use safe_executor::Executor; +use std::net::TcpListener; +use std::time::Duration; + +fn main() -> Result<(), Box> { + let executor = Executor::new(); + + for _ in 0..4 { + let execu2r = executor.clone(); + std::thread::spawn(move || { + async_io::block_on(execu2r); + }); + } + + let execu2r = executor.clone(); + executor.spawn(async move { + let listener = match Async::::bind(([127, 0, 0, 1], 3456)) { + Ok(listener) => listener, + Err(_) => return, + }; + + println!("Listening on port 3456"); + + loop { + let (mut stream, _addr) = match listener.accept().await { + Ok(tup) => tup, + Err(_) => return, + }; + + execu2r.spawn(async move { + let mut buffer = [0; 1024]; + + while let Ok(n) = stream.read(&mut buffer).await { + if n == 0 { + break; + } + + println!("{:?}", &buffer[0..n]); + + if stream.write_all(&buffer[0..n]).await.is_err() { + break; + } + } + }); + } + }); + + let execu2r = executor.clone(); + executor.spawn(async move { + Timer::after(Duration::from_secs(60 * 2)).await; + execu2r.stop(); + }); + + async_io::block_on(executor); + Ok(()) +}