tcpserver

rust tcp server frame

38 releases (17 stable)

1.6.1 Apr 20, 2023
1.6.0 Mar 20, 2022
1.5.5 Feb 12, 2022
1.5.3 Dec 11, 2021
0.1.5 Oct 30, 2020
Download history 46/week @ 2023-08-06 80/week @ 2023-08-13 478/week @ 2023-08-20 332/week @ 2023-08-27 44/week @ 2023-09-03 73/week @ 2023-09-10 83/week @ 2023-09-17 27/week @ 2023-09-24 20/week @ 2023-10-01 14/week @ 2023-10-08 18/week @ 2023-10-15 23/week @ 2023-10-22 102/week @ 2023-10-29 27/week @ 2023-11-05 37/week @ 2023-11-12 78/week @ 2023-11-19

252 downloads per month
Used in 3 crates (via netxserver)

MIT/Apache

16KB
325 lines

#rust tcp server frame.

client crate url

Examples Echo

#![feature(async_closure)]
use anyhow::Result;
use std::sync::Arc;
use tcpserver::{Builder, IPeer, ITCPServer};
use tokio::io::AsyncReadExt;

#[tokio::main]
async fn main() -> Result<()> {
    let tcpserver: Arc<dyn ITCPServer<()>> = Builder::new("0.0.0.0:5555")
        .set_connect_event(|addr| {
            println!("{:?} connect", addr);
            true
        })
        .set_stream_init(async move |tcp_stream| Ok(tcp_stream))
        .set_input_event(async move |mut reader, peer, _token| {
            let mut buff = [0; 4096];
            while let Ok(len) = reader.read(&mut buff).await {
                if len == 0 {
                    break;
                }
                peer.send_ref(buff[..len].to_vec()).await?;
            }
            println!("{:?} disconnect", peer.addr());
            Ok(())
        })
        .build()
        .await;
    tcpserver.start_block(()).await?;
    Ok(())
}

Dependencies

~3–13MB
~138K SLoC