From 8525f8d1f9f8ad3ea234ff485652f4f90acc3f56 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 25 Feb 2025 19:50:36 -0500 Subject: Update --- crates/renderer/src/fig.rs | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'crates/renderer/src/fig.rs') diff --git a/crates/renderer/src/fig.rs b/crates/renderer/src/fig.rs index b60f8e9..66dc229 100644 --- a/crates/renderer/src/fig.rs +++ b/crates/renderer/src/fig.rs @@ -8,6 +8,7 @@ pub struct Message { pub struct Client { reader: std::io::BufReader, + buf: String, } impl Client { pub fn new(addr: &str, subs: &[lexpr::Value]) -> Self { @@ -17,23 +18,32 @@ impl Client { write!(socket, "(sub {})\n", s).expect("failed to send subscribe message to bus"); } let reader = std::io::BufReader::new(socket); - Self { reader, } + Self { reader, buf: String::new(), } } pub fn pump(&mut self) -> Option { - let mut buf = String::new(); - match self.reader.read_line(&mut buf) { - Ok(l) => match lexpr::from_str(&buf) { - Ok(v) => { - match v.as_cons() { - Some(cs) => { - Some(Message { event: cs.car().clone(), data: cs.cdr().clone() }) - }, - _ => { log::error!("malformed message bus input s-expression: {}", v); None }, - } - }, - Err(e) => { log::error!("malformed message bus input line: {}", e); None }, + match self.reader.read_line(&mut self.buf) { + Ok(l) => { + // log::info!("read line: {}", self.buf); + let mv = lexpr::from_str(&self.buf); + self.buf.clear(); + match mv { + Ok(v) => { + match v.as_cons() { + Some(cs) => { + Some(Message { event: cs.car().clone(), data: cs.cdr().clone() }) + }, + _ => { log::error!("malformed message bus input s-expression: {}", v); None }, + } + }, + Err(e) => { log::error!("malformed message bus input line: {}", e); None }, + } + }, + Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => { + if self.buf.len() > 0 { + log::error!("error wouldblock: buf is {}", self.buf); + } + None }, - Err(e) if e.kind() == std::io::ErrorKind::WouldBlock => None, Err(e) => panic!("IO error on message bus: {}", e), } } -- cgit v1.2.3