socket_server 0.12.0

socket write event polling registration avoiding syscall
Documentation
#![allow(incomplete_features)]
#![feature(generic_const_exprs)]

use std::time::Duration;

use qcell::{LCell, LCellOwner};
#[cfg(test)]
use socket_server::socket::{ServerSocketListener, Socket};

#[test]
fn test_mocking_system() {
    LCellOwner::scope(|mut owner| {
        #[cfg(test)]
        socket_server::mock::run_mock(
            &mut owner,
            ApplicationServer {},
            MockServer {},
            Duration::from_millis(50),
        )
    })
}

pub struct ApplicationServer {}
#[derive(Default)]
pub struct Player {}

impl<'id> ServerSocketListener<'id> for ApplicationServer {
    const MAX_CONNECTIONS: usize = 10;
    const READ_BUFFFER_LEN: usize = 100;
    const WRITE_BUFFER_LEN: usize = 100;
    type Connection = Player;

    fn tick(_server: &LCell<'id, Self>, _owner: &mut LCellOwner<'id>) {}

    fn accept(
        owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        connection: &mut Socket<'id, '_, Self>,
        _addr: std::net::SocketAddr,
    ) {
        connection.register_close_event(owner)
    }

    fn read(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
    ) {
    }

    fn flush(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
    ) {
    }

    fn close(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
    ) {
    }
}

pub struct MockServer {}
#[derive(Default)]
pub struct MockPlayer {}

impl<'id> ServerSocketListener<'id> for MockServer {
    const MAX_CONNECTIONS: usize = 10;
    const READ_BUFFFER_LEN: usize = 100;
    const WRITE_BUFFER_LEN: usize = 100;
    type Connection = MockPlayer;

    fn tick(_server: &LCell<'id, Self>, _owner: &mut LCellOwner<'id>) {}

    fn accept(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
        _addr: std::net::SocketAddr,
    ) {
    }

    fn read(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
    ) {
    }

    fn flush(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
    ) {
    }

    fn close(
        _owner: &mut LCellOwner<'id>,
        _server: &LCell<'id, Self>,
        _connection: &mut Socket<'id, '_, Self>,
    ) {
        todo!()
    }
}