diff options
author | Matias Linares <matiaslina@openmailbox.org> | 2015-11-22 04:02:19 -0300 |
---|---|---|
committer | Matias Linares <matiaslina@openmailbox.org> | 2015-11-22 04:02:19 -0300 |
commit | 13310ee7dce177a24252970f607c08f3d658e676 (patch) | |
tree | 225d8c3fff3f033cdd2584e408b19aade31affba /src/socket/mod.rs | |
parent | 5da38341bc54f24c8cad41f1b63405d8cc955fe7 (diff) | |
download | dotwm-13310ee7dce177a24252970f607c08f3d658e676.tar.gz |
Add socket functionality.
Something simple, but it works pretty well. The mapping between the strings that
comes from the socket and functions, modifiers, keys, etc. needs some rewrite
because now there's a manual mapping.
The autostart file shows some functionality on how it will work. Since the
next_xevent is ticking on 1s, it's preferible to make the writes on the
socket all together, otherwise will pass 1 sec between two calls.
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"), + } + } +} |