sim-lib-server 0.2.0

Location-transparent server, transport, and eval-fabric runtime for SIM.
Documentation
fn run_accept_loop(runtime: Arc<ServerRuntime>, site: Arc<dyn EvalSite>) {
    while !runtime.is_stopping() {
        let accepted = match runtime.accept_timeout(Duration::from_millis(25)) {
            Ok(connection) => connection,
            Err(_) => break,
        };
        let Some(mut connection) = accepted else {
            thread::sleep(Duration::from_millis(25));
            continue;
        };
        match runtime.thread_mode() {
            ThreadMode::Main | ThreadMode::Coop => {
                let _ = connection.serve_connection(&runtime, &site);
            }
            ThreadMode::Spawn => {
                let runtime_for_worker = runtime.clone();
                let site_for_worker = site.clone();
                let handle = thread::spawn(move || {
                    let _ = connection.serve_connection(&runtime_for_worker, &site_for_worker);
                });
                if runtime.register_worker_thread(handle).is_err() {
                    runtime.begin_stop();
                    break;
                }
            }
            ThreadMode::Pool => {
                let runtime_for_worker = runtime.clone();
                let site_for_worker = site.clone();
                default_worker_pool().execute(move || {
                    let _ = connection.serve_connection(&runtime_for_worker, &site_for_worker);
                });
            }
            ThreadMode::Coroutine(_) => {}
        }
    }
}