diff options
Diffstat (limited to 'src/socket/mod.rs')
-rw-r--r-- | src/socket/mod.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/socket/mod.rs b/src/socket/mod.rs new file mode 100644 index 0000000..804f7ac --- /dev/null +++ b/src/socket/mod.rs @@ -0,0 +1,31 @@ +// See LICENSE file for copyright and license details. + +pub mod parser; + +use std::io::{Read,Write}; +use std::sync::mpsc::{Receiver, TryRecvError}; + +use unix_socket::UnixStream; + +use dotwm::DotWM; +use command::*; + +/// Listen a socket parsing and executing all the commands. +pub fn listen_socket(dotwm: &mut DotWM, bindings: &mut BindingHash, rx: &Receiver<UnixStream>) { + loop { + match rx.try_recv() { + Ok(stream) => { + let mut s = stream.try_clone().unwrap(); + let mut buf = String::new(); + s.read_to_string(&mut buf).unwrap(); + + for line in buf.lines() { + let result = parser::parse(dotwm, bindings, &line); + let _ = write!(s, "{}", result); + } + }, + Err(TryRecvError::Empty) => break, + Err(TryRecvError::Disconnected) => panic!("Socket disconnected"), + } + } +} |