aboutsummaryrefslogtreecommitdiff
path: root/karlc
diff options
context:
space:
mode:
authormetamuffin <yvchraiqi@protonmail.com>2022-06-10 15:34:47 +0200
committermetamuffin <yvchraiqi@protonmail.com>2022-06-10 15:34:47 +0200
commit4e964dbb135655794d570d61f8f2587474aaead4 (patch)
treebffad12fb53eff554f8ee2b49722b82eb82269f6 /karlc
parent76db19f14c616e879f613b533ee5072c661f8a10 (diff)
downloadkarlender-4e964dbb135655794d570d61f8f2587474aaead4.tar
karlender-4e964dbb135655794d570d61f8f2587474aaead4.tar.bz2
karlender-4e964dbb135655794d570d61f8f2587474aaead4.tar.zst
asdfs
Diffstat (limited to 'karlc')
-rw-r--r--karlc/Cargo.toml4
-rw-r--r--karlc/src/client.rs42
-rw-r--r--karlc/src/main.rs60
-rw-r--r--karlc/src/pretty.rs2
4 files changed, 100 insertions, 8 deletions
diff --git a/karlc/Cargo.toml b/karlc/Cargo.toml
index e37abfb..c49ecfe 100644
--- a/karlc/Cargo.toml
+++ b/karlc/Cargo.toml
@@ -6,7 +6,9 @@ edition = "2021"
[dependencies]
karlcommon = { path = "../karlcommon" }
-serde = { version = "1.0.137", features = ["derive"] }
clap = { version = "3.1.18", features = ["derive"] }
+serde = { version = "1.0.137", features = ["derive"] }
+serde_json = "1.0.81"
env_logger = "0.9.0"
log = "0.4.17"
+crossbeam-channel = "0.5.4"
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()
+ }
+}
diff --git a/karlc/src/main.rs b/karlc/src/main.rs
index 8db8d18..bfd433e 100644
--- a/karlc/src/main.rs
+++ b/karlc/src/main.rs
@@ -1,18 +1,64 @@
-use std::os::unix::net::UnixStream;
+pub mod client;
+pub mod pretty;
-use clap::Parser;
-use karlcommon::socket_path;
+use std::{os::unix::net::UnixStream, process::exit};
+
+use clap::{Parser, Subcommand};
+use client::Client;
+use karlcommon::{socket_path, version, ClientboundPacket, ServerboundPacket};
+use log::{error, info};
/// CLI interface for karld
#[derive(Parser)]
#[clap(about, author, version)]
-struct Args {}
+struct Args {
+ #[clap(subcommand)]
+ action: Action,
+}
+
+#[derive(Subcommand)]
+pub enum Action {
+ /// Show version of the client and daemon
+ Version,
+ /// List all taskss
+ ListTasks,
+}
fn main() {
- let _args = Args::parse();
+ env_logger::init();
+ let args = Args::parse();
- let socket = UnixStream::connect(socket_path()).unwrap();
+ let socket = match UnixStream::connect(socket_path()) {
+ Ok(s) => s,
+ Err(e) => {
+ error!("failed to connect to socket: {}", e);
+ exit(1);
+ }
+ };
-
+ let mut client = Client::new(socket);
+ info!("connected");
+ let handshake = client.receiver.recv().unwrap();
+ match args.action {
+ Action::Version => {
+ if let ClientboundPacket::Handshake {
+ version: daemon_version,
+ } = handshake
+ {
+ println!("{}", version!());
+ println!("{daemon_version}");
+ } else {
+ error!("handshake is not the first packet")
+ }
+ }
+ Action::ListTasks => {
+ client.send(ServerboundPacket::Download);
+ if let ClientboundPacket::DownloadResponse(tasks) = client.receiver.recv().unwrap() {
+ for t in tasks {
+ println!("{:?}", t)
+ }
+ }
+ }
+ }
}
diff --git a/karlc/src/pretty.rs b/karlc/src/pretty.rs
new file mode 100644
index 0000000..139597f
--- /dev/null
+++ b/karlc/src/pretty.rs
@@ -0,0 +1,2 @@
+
+