openlegends-server 0.3.0

OpenLegends Game Server
Documentation
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;
            }
        }
    }
}