diff --git a/src/bin/deerc.rs b/src/bin/deerc.rs index f328e4d..8aa43c2 100644 --- a/src/bin/deerc.rs +++ b/src/bin/deerc.rs @@ -1 +1,17 @@ -fn main() {} +use std::io::Write; + +use deerwm::commands; +use nanoserde::SerBin; + +fn main() { + let mut cmd_fifo = unix_named_pipe::open_write(commands::DEFAULT_PIPE) + .expect("failed to open fifo for writing"); + + let quit_cmd = commands::Command::Quit; + let mut cmd_buffer = Vec::new(); + quit_cmd.ser_bin(&mut cmd_buffer); + + cmd_fifo + .write_all(&cmd_buffer[..]) + .expect("failed to write to fifo"); +} diff --git a/src/bin/deerwm.rs b/src/bin/deerwm.rs index f328e4d..843d91d 100644 --- a/src/bin/deerwm.rs +++ b/src/bin/deerwm.rs @@ -1 +1,36 @@ -fn main() {} +use commands::Command; +use nanoserde::DeBin; +use std::io::Read; + +use deerwm::commands; + +fn main() { + if let Err(e) = unix_named_pipe::create(commands::DEFAULT_PIPE, None) { + match e.kind() { + std::io::ErrorKind::AlreadyExists => {} + _ => panic!("{}", e), + } + } + let mut cmd_fifo = + unix_named_pipe::open_read(commands::DEFAULT_PIPE).expect("failed to open fifo"); + let mut cmd_buffer = [0; 256]; + + 'run: loop { + if let Ok(n) = cmd_fifo.read(&mut cmd_buffer) { + if n > 0 { + println!("{:?}", &cmd_buffer[..n]); + + if let Ok(cmd) = Command::de_bin(&mut 0, &cmd_buffer[..n]) { + match cmd { + Command::Quit => { + println!("Recieved quit command!"); + break 'run; + }, + } + } + } + } + } + + std::fs::remove_file(commands::DEFAULT_PIPE).expect("failed to create fifo"); +} diff --git a/src/commands.rs b/src/commands.rs new file mode 100644 index 0000000..17a57a3 --- /dev/null +++ b/src/commands.rs @@ -0,0 +1,8 @@ +use nanoserde::{DeBin, SerBin}; + +pub const DEFAULT_PIPE: &str = "/tmp/deerwm"; + +#[derive(Clone, Debug, DeBin, SerBin)] +pub enum Command { + Quit +} diff --git a/src/lib.rs b/src/lib.rs index e69de29..82b6da3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod commands;