Moar Changes

This commit is contained in:
Charlie Root 2025-04-07 10:02:51 +02:00
commit 4cbae531d9

View file

@ -1,8 +1,11 @@
use clap::Parser; use clap::Parser;
use std::{ use std::{
fmt::Error,
fs,
io::{Read, Result, Write}, io::{Read, Result, Write},
net::{TcpListener, TcpStream}, os::unix::net::{SocketAddr, UnixListener, UnixStream},
os::unix::net::SocketAddr, path::{self, PathBuf},
process, thread,
}; };
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
@ -20,7 +23,7 @@ struct Args {
// val: String, // val: String,
} }
fn handle_client(mut stream: TcpStream) { fn handle_client(mut stream: UnixStream) {
let mut message: Vec<u8> = vec![0; 100]; let mut message: Vec<u8> = vec![0; 100];
if let Ok(m) = stream.read(&mut message[..]) { if let Ok(m) = stream.read(&mut message[..]) {
if let Ok(s) = String::from_utf8(message) { if let Ok(s) = String::from_utf8(message) {
@ -32,35 +35,60 @@ fn handle_client(mut stream: TcpStream) {
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
let args = Args::parse(); let args = Args::parse();
if args.daemon {} let socket_path = PathBuf::from("/tmp/rund/socket");
let is_daemon = args.daemon; let is_daemon = args.daemon;
println!("Daemon enabled: {}", is_daemon); println!("Daemon enabled: {}", is_daemon);
if is_daemon { if is_daemon {
println!("Listening on port: {}", args.port); let _ = run_daemon();
run_daemon(args.port);
} else { } else {
lower_volume(args.port); lower_volume(socket_path);
} }
Ok(()) Ok(())
} }
fn run_daemon(port: u32) -> Result<()> { fn run_daemon() -> Result<()> {
let address = format!("127.0.0.1:{}", port); let socket_path = PathBuf::from("/tmp/rund/socket");
let listener = TcpListener::bind(address)?;
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() { for stream in listener.incoming() {
handle_client(stream?); match stream {
Ok(stream) => {
// If it werks
thread::spawn(|| handle_client(stream));
} }
// Error
Err(_) => break,
}
}
Ok(()) Ok(())
} }
fn lower_volume(port: u32) { fn lower_volume(path: PathBuf) {
let address = format!("127.0.0.1:{}", port); if let Ok(mut stream) = UnixStream::connect(path) {
if let Ok(mut stream) = TcpStream::connect(address) {
println!("Connected!"); 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 { } else {
println!("Could not connect!"); println!("Could not connect!");
} }