aboutsummaryrefslogtreecommitdiff
path: root/src/socket/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/socket/mod.rs')
-rw-r--r--src/socket/mod.rs31
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"),
+ }
+ }
+}