From ea35ce0e6848c1224fa4c1cff424480a2996b49a Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 16 Aug 2022 16:11:57 +0200 Subject: lets make a gui anyway --- karlgui/src/client.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 karlgui/src/client.rs (limited to 'karlgui/src/client.rs') diff --git a/karlgui/src/client.rs b/karlgui/src/client.rs new file mode 100644 index 0000000..9f2dfc7 --- /dev/null +++ b/karlgui/src/client.rs @@ -0,0 +1,43 @@ +use crossbeam_channel::Receiver; +use karlcommon::{version, ClientboundPacket, ServerboundPacket}; +use log::{debug, error}; +use std::{ + io::{BufRead, BufReader, Write}, + os::unix::net::UnixStream, + thread, +}; + +pub struct Client { + socket: UnixStream, + pub receiver: Receiver, +} + +impl Client { + pub fn new(socket: UnixStream) -> Self { + let (sender, receiver) = crossbeam_channel::unbounded(); + let mut reader = BufReader::new(socket.try_clone().unwrap()); + thread::spawn(move || loop { + let mut buf = String::new(); + reader.read_line(&mut buf).unwrap(); + let p: ClientboundPacket = serde_json::from_str(buf.as_str()).unwrap(); + debug!("<- {:?}", p); + if let ClientboundPacket::Error(e) = p { + error!("daemon reported error: {:?}", e); + } else { + sender.send(p).unwrap(); + } + }); + let mut c = Self { receiver, socket }; + c.send(ServerboundPacket::Handshake { + version: version!(), + }); + return c; + } + + pub fn send(&mut self, p: ServerboundPacket) { + debug!("-> {:?}", p); + self.socket + .write_fmt(format_args!("{}\n", serde_json::to_string(&p).unwrap())) + .unwrap() + } +} -- cgit v1.2.3-70-g09d2