use log::*;
use std::io::{Read, Write};
use std::net::{SocketAddr, TcpListener, TcpStream};
use std::time::Instant;
fn main() {
log4rs::init_file("resources/log4rs.yml", Default::default()).expect("Can't init from file");
info!("Listening on port 1240");
let listener = TcpListener::bind("127.0.0.1:1240")
.expect("Failed binding TCP listener to the provided address/port.");
loop {
match listener.accept() {
Ok(mut stream) => handle_connection(&stream.1, &mut stream.0),
Err(e) => error!("Connection failed! {}", e),
}
}
}
fn handle_connection(addr: &SocketAddr, stream: &mut TcpStream) {
let i = Instant::now();
info!("Handling connection on {}", addr);
if let Err(err) = write!(stream, "Hello World!") {
error!("Can't write to stream! {}", err)
}
loop {
let mut buffer: Vec<u8> = Vec::new();
match stream.read(&mut buffer) {
Ok(size) => {
if size > 0 {
info!("{:?}", buffer);
debug!("DATA RX");
}
}
Err(err) => {
error!("Failed to read from stream! {}", err);
break;
}
}
}
debug!("Connection time: {:.2}", i.elapsed().as_secs_f32());
}