Start local server on client run
This commit is contained in:
@ -11,4 +11,6 @@ clap = { version = "3.2.17", features = ["derive"] }
|
||||
log = "0.4.17"
|
||||
env_logger = "0.9.0"
|
||||
tui = "0.19.0"
|
||||
crossterm = "0.25.0"
|
||||
crossterm = "0.25.0"
|
||||
lazy_static = "1.4.0"
|
||||
tokio = "1.21.2"
|
@ -10,5 +10,32 @@ pub struct CliArgs {
|
||||
value_parser,
|
||||
default_value = "https://fixme.communiquons.org"
|
||||
)]
|
||||
server_uri: String,
|
||||
pub server_uri: String,
|
||||
|
||||
/// Local server listen address
|
||||
#[clap(short, long, default_value = "127.0.0.1:5679")]
|
||||
pub listen_address: String,
|
||||
}
|
||||
|
||||
impl CliArgs {
|
||||
/// Get local listen port
|
||||
pub fn listen_port(&self) -> u16 {
|
||||
self.listen_address
|
||||
.rsplit(':')
|
||||
.next()
|
||||
.expect("Failed to split listen address!")
|
||||
.parse::<u16>()
|
||||
.expect("Failed to parse listen port!")
|
||||
}
|
||||
}
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
static ref ARGS: CliArgs = {
|
||||
CliArgs::parse()
|
||||
};
|
||||
}
|
||||
|
||||
/// Get parsed command line arguments
|
||||
pub fn cli_args() -> &'static CliArgs {
|
||||
&ARGS
|
||||
}
|
||||
|
@ -1,2 +1,3 @@
|
||||
pub mod cli_args;
|
||||
pub mod server;
|
||||
pub mod ui_screens;
|
||||
|
@ -12,9 +12,13 @@ use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
|
||||
use env_logger::Env;
|
||||
use tui::backend::CrosstermBackend;
|
||||
use tui::Terminal;
|
||||
use cli_player::server::start_server_if_missing;
|
||||
|
||||
pub fn main() -> Result<(), Box<dyn Error>> {
|
||||
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
|
||||
#[tokio::main]
|
||||
pub async fn main() -> Result<(), Box<dyn Error>> {
|
||||
env_logger::Builder::from_env(Env::default()).init();
|
||||
|
||||
start_server_if_missing().await;
|
||||
|
||||
// setup terminal
|
||||
enable_raw_mode()?;
|
||||
|
30
rust/cli_player/src/server.rs
Normal file
30
rust/cli_player/src/server.rs
Normal file
@ -0,0 +1,30 @@
|
||||
use tokio::runtime::Builder;
|
||||
use tokio::task;
|
||||
|
||||
use sea_battle_backend::args::Args;
|
||||
use sea_battle_backend::utils::network_utils;
|
||||
|
||||
use crate::cli_args::cli_args;
|
||||
|
||||
pub async fn start_server_if_missing() {
|
||||
if !network_utils::is_port_open(cli_args().listen_port()).await {
|
||||
log::info!(
|
||||
"Local server will start on {}...",
|
||||
cli_args().listen_address
|
||||
);
|
||||
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!")
|
||||
}));
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user