aboutsummaryrefslogtreecommitdiff
path: root/karld/src/interface/tcp.rs
blob: 296701b5616cdfda4d2c8e4fdeb0cfdadd4ecaa1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::interface::generic::generic_handle_connection;
use crate::CLIENT_ID_COUNTER;
use karlcommon::interfaces::tcp_addr;
use log::{info, warn};
use std::net::TcpListener;
use std::thread;

pub fn run() {
    info!("binding to socket");
    let listener = TcpListener::bind(tcp_addr()).unwrap();
    info!("listening.");

    loop {
        let (stream, addr) = listener.accept().unwrap();
        let id = CLIENT_ID_COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
        thread::spawn(move || {
            info!("client connected: {:?}", addr);
            if let Err(err) = generic_handle_connection(id, stream.try_clone().unwrap(), stream) {
                warn!("client dropped: {:?} ({})", addr, err);
            } else {
                info!("client dropped: {:?}", addr);
            }
        });
    }
}