mirror of
https://github.com/szymon-jozef/checkers.git
synced 2026-10-27 19:20:44 +01:00
feat: add args parsing to cli client
This commit is contained in:
@@ -1,6 +1,42 @@
|
||||
use std::io;
|
||||
use std::{fmt::Display, io};
|
||||
|
||||
use checkers::network::client::Client;
|
||||
use log::{error, info};
|
||||
|
||||
const QUIT_COMMAND: &str = "/quit";
|
||||
const HELP_COMMAND: &str = "/help";
|
||||
const SEND_COMMAND: &str = "/send";
|
||||
const READY_COMMAND: &str = "/ready";
|
||||
|
||||
enum CliCommands {
|
||||
Quit,
|
||||
Help,
|
||||
Send,
|
||||
Ready,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
struct UnknownCommandError;
|
||||
|
||||
impl Display for UnknownCommandError {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "Unknown command!")
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&str> for CliCommands {
|
||||
type Error = UnknownCommandError;
|
||||
|
||||
fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
QUIT_COMMAND => Ok(CliCommands::Quit),
|
||||
HELP_COMMAND => Ok(CliCommands::Help),
|
||||
SEND_COMMAND => Ok(CliCommands::Send),
|
||||
READY_COMMAND => Ok(CliCommands::Ready),
|
||||
_ => Err(UnknownCommandError),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
@@ -11,28 +47,48 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
return Ok(());
|
||||
};
|
||||
|
||||
let help_msg: String = format!(
|
||||
"\n┌────Help────
|
||||
│\t {} - quit
|
||||
│\t {} - show this message
|
||||
│\t {} - message the server you're ready
|
||||
│\t {} - send text message to the server
|
||||
",
|
||||
QUIT_COMMAND, HELP_COMMAND, READY_COMMAND, SEND_COMMAND,
|
||||
);
|
||||
|
||||
client.update();
|
||||
|
||||
println!("=== Write to stding to send text messages ===");
|
||||
println!("Write /close to leave");
|
||||
info!("====== Type /help for help ========");
|
||||
let mut buffer = String::new();
|
||||
loop {
|
||||
io::stdin().read_line(&mut buffer)?;
|
||||
if buffer == "/close\n" {
|
||||
let words: Vec<&str> = buffer.split_whitespace().collect();
|
||||
let cmd = words[0];
|
||||
let mut args: String = words[1..].iter().map(|s| s.to_string() + " ").collect();
|
||||
args = args.trim().to_string();
|
||||
|
||||
match CliCommands::try_from(cmd) {
|
||||
Ok(cmd) => match cmd {
|
||||
CliCommands::Quit => {
|
||||
info!("Bye bye");
|
||||
break;
|
||||
}
|
||||
|
||||
if buffer == "/test\n" {
|
||||
buffer = String::from("A").repeat(1024 * 1024 * 2);
|
||||
}
|
||||
|
||||
if buffer == "/ready\n" {
|
||||
CliCommands::Help => {
|
||||
info!("{}", help_msg);
|
||||
buffer.clear();
|
||||
client.signal_readiness().await;
|
||||
continue;
|
||||
}
|
||||
|
||||
client.send_text_message(buffer.clone()).await;
|
||||
CliCommands::Ready => {
|
||||
client.signal_readiness().await;
|
||||
buffer.clear();
|
||||
}
|
||||
CliCommands::Send => {
|
||||
client.send_text_message(args).await;
|
||||
buffer.clear();
|
||||
}
|
||||
},
|
||||
Err(e) => error!("{}", e),
|
||||
}
|
||||
buffer.clear();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user