From 4cbae531d9a73dc5c45232b96e94227355a3a8ee Mon Sep 17 00:00:00 2001 From: Charlie Root Date: Mon, 7 Apr 2025 10:02:51 +0200 Subject: [PATCH] Moar Changes --- src/main.rs | 58 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index babcd0f..bc7a015 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,11 @@ use clap::Parser; use std::{ + fmt::Error, + fs, io::{Read, Result, Write}, - net::{TcpListener, TcpStream}, - os::unix::net::SocketAddr, + os::unix::net::{SocketAddr, UnixListener, UnixStream}, + path::{self, PathBuf}, + process, thread, }; #[derive(Parser, Debug)] @@ -20,7 +23,7 @@ struct Args { // val: String, } -fn handle_client(mut stream: TcpStream) { +fn handle_client(mut stream: UnixStream) { let mut message: Vec = vec![0; 100]; if let Ok(m) = stream.read(&mut message[..]) { if let Ok(s) = String::from_utf8(message) { @@ -32,35 +35,60 @@ fn handle_client(mut stream: TcpStream) { fn main() -> std::io::Result<()> { let args = Args::parse(); - if args.daemon {} + let socket_path = PathBuf::from("/tmp/rund/socket"); let is_daemon = args.daemon; println!("Daemon enabled: {}", is_daemon); if is_daemon { - println!("Listening on port: {}", args.port); - run_daemon(args.port); + let _ = run_daemon(); } else { - lower_volume(args.port); + lower_volume(socket_path); } Ok(()) } -fn run_daemon(port: u32) -> Result<()> { - let address = format!("127.0.0.1:{}", port); - let listener = TcpListener::bind(address)?; +fn run_daemon() -> Result<()> { + let socket_path = PathBuf::from("/tmp/rund/socket"); + + if let Ok(true) = fs::exists(&socket_path) { + println!("Socket exists, deleting socket"); + fs::remove_file(&socket_path).expect("Couldn't remove socket file!") + } + + let listener = match UnixListener::bind("/tmp/rund/socket") { + Ok(sock) => { + println!( + "Created Socket at {}", + socket_path.into_os_string().into_string().unwrap() + ); + sock + } + Err(_) => { + println!("Couldn't create the socket!"); + return Ok(()); + } + }; for stream in listener.incoming() { - handle_client(stream?); + match stream { + Ok(stream) => { + // If it werks + thread::spawn(|| handle_client(stream)); + } + // Error + Err(_) => break, + } } + Ok(()) } -fn lower_volume(port: u32) { - let address = format!("127.0.0.1:{}", port); - if let Ok(mut stream) = TcpStream::connect(address) { +fn lower_volume(path: PathBuf) { + if let Ok(mut stream) = UnixStream::connect(path) { println!("Connected!"); - let _ = stream.write_all(b"Remote Message!"); + let mess = format!("Remote Message from process with PID {}", process::id()).into_bytes(); + let _ = stream.write_all(&mess); } else { println!("Could not connect!"); }