diff options
author | metamuffin <yvchraiqi@protonmail.com> | 2022-06-10 15:34:47 +0200 |
---|---|---|
committer | metamuffin <yvchraiqi@protonmail.com> | 2022-06-10 15:34:47 +0200 |
commit | 4e964dbb135655794d570d61f8f2587474aaead4 (patch) | |
tree | bffad12fb53eff554f8ee2b49722b82eb82269f6 /karlc/src/client.rs | |
parent | 76db19f14c616e879f613b533ee5072c661f8a10 (diff) | |
download | karlender-4e964dbb135655794d570d61f8f2587474aaead4.tar karlender-4e964dbb135655794d570d61f8f2587474aaead4.tar.bz2 karlender-4e964dbb135655794d570d61f8f2587474aaead4.tar.zst |
asdfs
Diffstat (limited to 'karlc/src/client.rs')
-rw-r--r-- | karlc/src/client.rs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/karlc/src/client.rs b/karlc/src/client.rs new file mode 100644 index 0000000..6420da0 --- /dev/null +++ b/karlc/src/client.rs @@ -0,0 +1,42 @@ +use std::{ + io::{BufRead, BufReader, Write}, + os::unix::net::UnixStream, + thread, +}; + +use crossbeam_channel::Receiver; +use karlcommon::{ClientboundPacket, ServerboundPacket}; +use log::debug; + +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); + sender.send(p).unwrap(); + } + }); + let mut c = Self { receiver, socket }; + c.send(ServerboundPacket::Handshake { + version: env!("CARGO_PKG_VERSION").to_owned(), + }); + 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() + } +} |