1use std::{
2 io::{self, Write},
3 net::{SocketAddr, TcpListener, TcpStream},
4};
5
6use microasync::sync;
7use microasync_util::{
8 get_current_runtime,
9 io::{read::tcpstream::accept, ReadAsync},
10 wait_ms, QueuedRuntime,
11};
12
13fn main() {
14 let mut runtime = QueuedRuntime::new();
15 runtime.push(go(("0.0.0.0", 5000)));
16 sync(runtime);
17}
18
19async fn go(addr: (&str, u16)) {
20 let mut listener = TcpListener::bind(addr).unwrap();
21 loop {
22 get_current_runtime()
23 .await
24 .push(handle(accept(&mut listener).await.unwrap()));
25 }
26}
27
28async fn handle((mut stream, _): (TcpStream, SocketAddr)) {
29 let mut buf = [0_u8; 10];
30 loop {
31 let n = stream.read(&mut buf).await.unwrap();
32 if n == 0 {
33 break;
34 }
35 print!(
36 "{}",
37 buf[0..n].iter().map(|x| *x as char).collect::<String>()
38 );
39 io::stdout().flush().unwrap();
40 wait_ms(100).await; }
43}