aboutsummaryrefslogtreecommitdiff
path: root/karlgui/src/client.rs
diff options
context:
space:
mode:
authormetamuffin <yvchraiqi@protonmail.com>2022-08-16 16:11:57 +0200
committermetamuffin <yvchraiqi@protonmail.com>2022-08-16 16:11:57 +0200
commitea35ce0e6848c1224fa4c1cff424480a2996b49a (patch)
treee98781327e7f1dc0ae0eb6397b5aeb51e9bfa52e /karlgui/src/client.rs
parent0c12d22f53865fadf7f6eb17b44396663ddbf0e0 (diff)
downloadkarlender-ea35ce0e6848c1224fa4c1cff424480a2996b49a.tar
karlender-ea35ce0e6848c1224fa4c1cff424480a2996b49a.tar.bz2
karlender-ea35ce0e6848c1224fa4c1cff424480a2996b49a.tar.zst
lets make a gui anyway
Diffstat (limited to 'karlgui/src/client.rs')
-rw-r--r--karlgui/src/client.rs43
1 files changed, 43 insertions, 0 deletions
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<ClientboundPacket>,
+}
+
+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()
+ }
+}