photonio 0.0.5

A runtime for asynchronous applications.
Documentation
use log::trace;
use photonio::{
    io::{Read, Write},
    net::{SocketAddr, TcpListener, TcpStream},
    task,
};

#[photonio::test(env_logger = true)]
async fn echo() {
    let server = TcpListener::bind("127.0.0.1:1234").await.unwrap();
    let server_addr = server.local_addr().unwrap();
    trace!("server {:?}", server_addr);
    let mut tasks = Vec::new();
    let num_conns = 4;
    for i in 0..num_conns {
        let task = task::spawn(send(server_addr, i));
        tasks.push(task);
    }
    for _ in 0..num_conns {
        let (stream, stream_addr) = server.accept().await.unwrap();
        trace!("stream {:?}", stream_addr);
        let handle = task::spawn(recv(stream));
        tasks.push(handle);
    }
    for task in tasks {
        task.await.unwrap();
    }
}

async fn send(addr: SocketAddr, byte: u8) {
    let mut stream = TcpStream::connect(addr).await.unwrap();
    stream.write(&[byte]).await.unwrap();
}

async fn recv(mut stream: TcpStream) {
    let mut byte = [0; 1];
    stream.read(&mut byte).await.unwrap();
}