aboutsummaryrefslogtreecommitdiffstats
path: root/mumctl
diff options
context:
space:
mode:
Diffstat (limited to 'mumctl')
-rw-r--r--mumctl/Cargo.toml2
-rw-r--r--mumctl/src/main.rs69
2 files changed, 58 insertions, 13 deletions
diff --git a/mumctl/Cargo.toml b/mumctl/Cargo.toml
index 3a432d9..1f2f727 100644
--- a/mumctl/Cargo.toml
+++ b/mumctl/Cargo.toml
@@ -11,8 +11,8 @@ edition = "2018"
[dependencies]
mumlib = { path = "../mumlib" }
+clap = { version = "2.33", features = ["yaml"] }
log = "0.4"
ipc-channel = "0.14"
-#clap = "2.33"
#cursive = "0.15"
diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs
index 39986f0..e4746d3 100644
--- a/mumctl/src/main.rs
+++ b/mumctl/src/main.rs
@@ -1,3 +1,4 @@
+use clap::{App, Arg, SubCommand};
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use log::*;
use mumlib::command::{Command, CommandResponse};
@@ -7,25 +8,69 @@ use std::fs;
fn main() {
setup_logger();
+ let matches = App::new("mumctl")
+ .subcommand(SubCommand::with_name("server")
+ .subcommand(SubCommand::with_name("connect")
+ .arg(Arg::with_name("host")
+ .required(true)
+ .index(1))
+ .arg(Arg::with_name("username")
+ .required(true)
+ .index(2)))
+ .subcommand(SubCommand::with_name("disconnect")))
+ .subcommand(SubCommand::with_name("channel")
+ .subcommand(SubCommand::with_name("list")
+ .arg(Arg::with_name("short")
+ .short("s")
+ .long("short")))
+ .subcommand(SubCommand::with_name("connect")
+ .arg(Arg::with_name("channel")
+ .required(true))))
+ .subcommand(SubCommand::with_name("status"))
+ .get_matches();
+
+ let command =
+ if let Some(matches) = matches.subcommand_matches("server") {
+ if let Some(matches) = matches.subcommand_matches("connect") {
+ let host = matches.value_of("host").unwrap();
+ let username = matches.value_of("username").unwrap();
+ Some(Command::ServerConnect {
+ host: host.to_string(),
+ port: 64738u16, //TODO
+ username: username.to_string(),
+ accept_invalid_cert: true, //TODO
+ })
+ } else {
+ None
+ }
+ } else if let Some(matches) = matches.subcommand_matches("channel") {
+ if let Some(matches) = matches.subcommand_matches("list") {
+ if matches.is_present("short") {
+ None //TODO
+ } else {
+ None //TODO
+ }
+ } else if let Some(_matches) = matches.subcommand_matches("connect") {
+ None //TODO
+ } else {
+ None
+ }
+ } else if let Some(_matches) = matches.subcommand_matches("status") {
+ None //TODO
+ } else {
+ None
+ };
+
debug!("Creating channel");
let (tx_client, rx_client): (IpcSender<Result<Option<CommandResponse>, ()>>,
IpcReceiver<Result<Option<CommandResponse>, ()>>) = ipc::channel().unwrap();
let server_name = fs::read_to_string("/var/tmp/mumd-oneshot").unwrap(); //TODO don't panic
- debug!("Connecting to mumd at {}", server_name);
+ info!("Sending {:#?}", command);
let tx0 = IpcSender::connect(server_name).unwrap();
- let connect_command = Command::ServerConnect {
- host: "10.0.0.10".to_string(),
- port: 64738u16,
- username: "gustav-mumd".to_string(),
- accept_invalid_cert: true,
- };
- debug!("Sending {:?} to mumd", connect_command);
- tx0.send((
- connect_command,
- tx_client)) .unwrap();
+ tx0.send((command.unwrap(), tx_client)).unwrap();
debug!("Reading response");
let response = rx_client.recv().unwrap();
- debug!("{:?}", response);
+ debug!("\n{:#?}", response);
}