diff --git a/rust/cli_player/src/cli_args.rs b/rust/cli_player/src/cli_args.rs index 65268c8..7bed537 100644 --- a/rust/cli_player/src/cli_args.rs +++ b/rust/cli_player/src/cli_args.rs @@ -28,6 +28,10 @@ pub struct CliArgs { #[clap(long, value_enum)] pub dev_screen: Option, + + /// Run as server instead of as client + #[clap(long, short)] + pub serve: bool, } impl CliArgs { diff --git a/rust/cli_player/src/main.rs b/rust/cli_player/src/main.rs index aa4eceb..ea79e98 100644 --- a/rust/cli_player/src/main.rs +++ b/rust/cli_player/src/main.rs @@ -14,6 +14,7 @@ use tui::Terminal; use cli_player::cli_args::{cli_args, TestDevScreen}; use cli_player::client::Client; +use cli_player::server::run_server; use cli_player::ui_screens::configure_game_rules::GameRulesConfigurationScreen; use cli_player::ui_screens::game_screen::GameScreen; use cli_player::ui_screens::input_screen::InputScreen; @@ -138,7 +139,11 @@ async fn run_app(terminal: &mut Terminal) -> Res { #[tokio::main] pub async fn main() -> Result<(), Box> { env_logger::Builder::from_env(Env::default()).init(); - cli_args(); // Avoid a crash if help argument is triggered + + if cli_args().serve { + run_server().await; + return Ok(()); + } // setup terminal enable_raw_mode()?; diff --git a/rust/cli_player/src/server.rs b/rust/cli_player/src/server.rs index 6f0fbb3..29669fc 100644 --- a/rust/cli_player/src/server.rs +++ b/rust/cli_player/src/server.rs @@ -6,6 +6,21 @@ use sea_battle_backend::utils::network_utils; use crate::cli_args::cli_args; +pub async fn run_server() { + let local_set = task::LocalSet::new(); + + local_set + .run_until(async move { + sea_battle_backend::server::start_server(Args { + listen_address: cli_args().listen_address.clone(), + cors: None, + }) + .await + .expect("Failed to run local server!") + }) + .await; +} + pub async fn start_server_if_missing() { if !network_utils::is_port_open(cli_args().listen_port()).await { log::info!( @@ -15,16 +30,7 @@ pub async fn start_server_if_missing() { std::thread::spawn(move || { let rt = Builder::new_current_thread().enable_all().build().unwrap(); - let local_set = task::LocalSet::new(); - - rt.block_on(local_set.run_until(async move { - sea_battle_backend::server::start_server(Args { - listen_address: cli_args().listen_address.clone(), - cors: None, - }) - .await - .expect("Failed to run local server!") - })); + rt.block_on(run_server()); }); network_utils::wait_for_port(cli_args().listen_port()).await;