summaryrefslogtreecommitdiff
path: root/crates/renderer/src/fig.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/renderer/src/fig.rs')
-rw-r--r--crates/renderer/src/fig.rs38
1 files changed, 24 insertions, 14 deletions
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<std::net::TcpStream>,
+ 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<Message> {
- 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),
}
}