mod error;
mod request;
mod server;
mod user;
use request::Request;
use native_tls::TlsStream;
use std::{
io::{Read, Write},
net::TcpStream,
};
pub fn handle(mut stream: TlsStream<TcpStream>, log: crate::Log) {
let mut buffer = [0; 1024];
loop {
match stream.read(&mut buffer) {
Ok(0) => {
log.notice("Connection closed".to_string());
break;
}
Ok(_) => {
if let Err(e) = stream.write_all(
match Request::from_utf8(&buffer) {
Ok(Request::ServerAbout) => server::about(&log),
Ok(Request::ServerStatus) => server::status(&log),
Ok(Request::UserRegister(request)) => user::register(request, &log),
Err(e) => error::from_string(e.to_string(), &log),
}
.as_bytes(),
) {
log.error(format!("Failed to write to stream: `{e}`"));
break;
}
}
Err(e) => {
log.error(format!("Failed to read from stream: `{e}`"));
break;
}
}
}
}