// 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::*; pub fn next_socket_event(rx: &Receiver) -> Option { match rx.try_recv() { Ok(stream) => Some(stream), Err(TryRecvError::Empty) => None, Err(TryRecvError::Disconnected) => panic!("Socket disconnected"), } } /// Listen a socket parsing and executing all the commands. pub fn listen_socket(dotwm: &mut DotWM, bindings: &mut BindingHash, rx: &Receiver) { 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"), } } }