e2e-irc/src/listener_server.rs

44 lines
1.3 KiB
Rust
Raw Normal View History

use std::io::{self, Read, Write};
use std::net::TcpListener;
use std::sync::mpsc;
use std::time::Duration;
pub fn listen_to_client(tx: mpsc::Sender<String>, rx: mpsc::Receiver<String>) {
let listener = TcpListener::bind("127.0.0.1:6666").unwrap();
let mut stream = listener.accept().unwrap().0;
stream
.set_read_timeout(Some(Duration::from_millis(10)))
.expect("Couldn't set timeout!!");
loop {
let mut buffer: Vec<u8> = Vec::new();
let mut buf: [u8; 1] = [0];
let newline: u8 = b'\n';
while buf[0] != newline {
match stream.read(&mut buf) {
Ok(_length) => {
buffer.push(buf[0]);
}
Err(_error) => match _error.kind() {
io::ErrorKind::TimedOut => {}
_ => {}
},
}
match rx.try_recv() {
Ok(value) => {
match stream.write_all(value.as_bytes()) {
Ok(_) => {}
Err(_e) => println!("Couldn't send {value}"),
};
}
Err(_e) => {}
}
}
let _ = tx.send(String::from_utf8_lossy(&buffer).to_string());
}
}