use std::net::SocketAddr;
use anyhow::Error;
use pico_args::Arguments;
use private_poker::{Client, entities::Username};
mod app;
use app::App;
const HELP: &str = "\
Connect to a private poker server over TCP
USAGE:
pp_client [OPTIONS] USERNAME
OPTIONS:
--connect IP:PORT Server socket connection address [default: 127.0.0.1:6969]
FLAGS:
-h, --help Print help information
";
struct Args {
addr: SocketAddr,
username: Username,
}
fn main() -> Result<(), Error> {
let mut pargs = Arguments::from_env();
if pargs.contains(["-h", "--help"]) {
print!("{HELP}");
std::process::exit(0);
}
let args = Args {
addr: pargs
.value_from_str("--connect")
.unwrap_or("127.0.0.1:6969".parse()?),
username: pargs.free_from_str().unwrap_or(whoami::username()).into(),
};
let (client, view) = Client::connect(args.username, &args.addr)?;
let Client { username, stream } = client;
let terminal = ratatui::init();
let app_result = App::new(args.addr, username).run(stream, view, terminal);
ratatui::restore();
app_result
}