net-mux 0.2.4

A Net Stream Multiplexing Library
Documentation
use anyhow::{Ok, Result};
use net_mux::{Config, Session};
use tokio::io::{self, AsyncReadExt, AsyncWriteExt};
use tokio::net::{TcpListener, TcpStream};

#[tokio::main]
async fn main() -> Result<()> {
    let listener = TcpListener::bind("127.0.0.1:7777").await?;
    println!("Server listening on 127.0.0.1:7777");

    loop {
        let (conn, addr) = listener.accept().await?;
        conn.set_nodelay(true)?;
        println!("New client: {:?}", addr);
        tokio::spawn(handle_conn(conn));
    }
}

async fn handle_conn(conn: TcpStream) -> Result<()> {
    let session = Session::server(conn, Config::default());
    println!("session starting");

    loop {
        let stream = session.accept().await?;
        let (mut reader, mut writer) = io::split(stream);
        let mut buf = [0u8; 1024];

        let n = reader.read(&mut buf).await?;
        if n == 0 {
            println!("remote closed");
            break;
        }
        println!("Received: {:?}", String::from_utf8_lossy(&buf[..n]));
        writer.write_all(&buf[..n]).await?;
        writer.flush().await?;
    }
    Ok(())
}