commit
This commit is contained in:
parent
8089750d41
commit
04e0294529
61
src/main.rs
61
src/main.rs
|
@ -9,44 +9,64 @@ use std::process;
|
|||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let mut port = "7890"; // default port
|
||||
let mut log_dir = "/var/log/RMS-server"; // default log directory
|
||||
|
||||
// Command line argument parsing for port
|
||||
// Command line argument parsing
|
||||
if args.len() > 1 {
|
||||
for i in 0..args.len() - 1 {
|
||||
if args[i] == "-p" || args[i] == "--port" {
|
||||
port = &args[i + 1];
|
||||
let mut i = 1;
|
||||
while i < args.len() {
|
||||
match args[i].as_str() {
|
||||
"-p" | "--port" => {
|
||||
if i + 1 < args.len() {
|
||||
port = &args[i + 1];
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
"-l" => {
|
||||
if i + 1 < args.len() {
|
||||
log_dir = &args[i + 1];
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
"-h" | "--help" => {
|
||||
print_usage();
|
||||
return;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
let listener = TcpListener::bind(format!("0.0.0.0:{}", port)).unwrap_or_else(|_| {
|
||||
log_verbose("Failed to bind on port ".to_owned() + port);
|
||||
log_verbose("Failed to bind on port ".to_owned() + port, log_dir);
|
||||
process::exit(1);
|
||||
});
|
||||
|
||||
// Ensure the log directory exists
|
||||
std::fs::create_dir_all("/var/log/RMS-server").expect("Failed to create log directory");
|
||||
std::fs::create_dir_all(log_dir).expect("Failed to create log directory");
|
||||
|
||||
log_verbose(format!("Server listening on port {}", port));
|
||||
log_verbose(format!("Server listening on port {}", port), log_dir);
|
||||
|
||||
for stream in listener.incoming() {
|
||||
match stream {
|
||||
Ok(stream) => {
|
||||
let peer_addr = stream.peer_addr().unwrap(); // It's safe to unwrap here as connection is already established
|
||||
log_verbose(format!("Client connected: {}", peer_addr));
|
||||
log_verbose(format!("Client connected: {}", peer_addr), log_dir);
|
||||
let log_dir = log_dir.to_string(); // Clone log_dir for the thread
|
||||
thread::spawn(move || {
|
||||
handle_client(stream);
|
||||
handle_client(stream, &log_dir);
|
||||
});
|
||||
}
|
||||
Err(e) => {
|
||||
log_verbose(format!("Connection failed: {}", e));
|
||||
log_verbose(format!("Connection failed: {}", e), log_dir);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Function to handle a single client
|
||||
fn handle_client(mut stream: std::net::TcpStream) {
|
||||
fn handle_client(mut stream: std::net::TcpStream, log_dir: &str) {
|
||||
let mut buffer = [0; 1024];
|
||||
|
||||
loop {
|
||||
|
@ -57,7 +77,7 @@ fn handle_client(mut stream: std::net::TcpStream) {
|
|||
Ok(size) => {
|
||||
let msg = String::from_utf8_lossy(&buffer[..size]);
|
||||
println!("{}", msg); // Print what client sends
|
||||
log_message(msg.into_owned()); // Log to messages file
|
||||
log_message(msg.into_owned(), log_dir); // Log to messages file
|
||||
},
|
||||
Err(_) => {
|
||||
break; // Connection error
|
||||
|
@ -67,25 +87,34 @@ fn handle_client(mut stream: std::net::TcpStream) {
|
|||
}
|
||||
|
||||
// Log verbose information to a file
|
||||
fn log_verbose(message: String) {
|
||||
fn log_verbose(message: String, log_dir: &str) {
|
||||
let mut file = OpenOptions::new()
|
||||
.create(true)
|
||||
.write(true)
|
||||
.append(true)
|
||||
.open(Path::new("/var/log/RMS-server/verbose.log"))
|
||||
.open(Path::new(log_dir).join("verbose.log"))
|
||||
.expect("Failed to open verbose log file");
|
||||
|
||||
writeln!(file, "{}", message).expect("Failed to write to verbose log file");
|
||||
}
|
||||
|
||||
// Log raw messages to a separate file
|
||||
fn log_message(message: String) {
|
||||
fn log_message(message: String, log_dir: &str) {
|
||||
let mut file = OpenOptions::new()
|
||||
.create(true)
|
||||
.write(true)
|
||||
.append(true)
|
||||
.open(Path::new("/var/log/RMS-server/rawmessages.log"))
|
||||
.open(Path::new(log_dir).join("rawmessages.log"))
|
||||
.expect("Failed to open message log file");
|
||||
|
||||
writeln!(file, "{}", message).expect("Failed to write to message log file");
|
||||
}
|
||||
|
||||
// Print usage information
|
||||
fn print_usage() {
|
||||
println!("Usage: ./program [-p/--port PORT] [-l LOG_DIR] [-h/--help]");
|
||||
println!("Options:");
|
||||
println!(" -p, --port PORT Set the port number (default: 7890)");
|
||||
println!(" -l LOG_DIR Set the log directory (default: /var/log/RMS-server)");
|
||||
println!(" -h, --help Print this help message");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue