Compare commits
2 Commits
b1145cc362
...
9a38a634eb
Author | SHA1 | Date | |
---|---|---|---|
9a38a634eb | |||
8990badaa4 |
@@ -28,6 +28,10 @@ pub struct CliArgs {
|
||||
|
||||
#[clap(long, value_enum)]
|
||||
pub dev_screen: Option<TestDevScreen>,
|
||||
|
||||
/// Run as server instead of as client
|
||||
#[clap(long, short)]
|
||||
pub serve: bool,
|
||||
}
|
||||
|
||||
impl CliArgs {
|
||||
|
@@ -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<B: Backend>(terminal: &mut Terminal<B>) -> Res {
|
||||
#[tokio::main]
|
||||
pub async fn main() -> Result<(), Box<dyn Error>> {
|
||||
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()?;
|
||||
|
@@ -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;
|
||||
|
@@ -14,6 +14,7 @@ use sea_battle_backend::data::*;
|
||||
|
||||
use crate::constants::*;
|
||||
use crate::ui_screens::confirm_dialog_screen::confirm;
|
||||
use crate::ui_screens::popup_screen::PopupScreen;
|
||||
use crate::ui_screens::utils::{centered_rect_size, centered_text};
|
||||
use crate::ui_screens::ScreenResult;
|
||||
use crate::ui_widgets::game_map_widget::{ColoredCells, GameMapWidget};
|
||||
@@ -227,6 +228,13 @@ impl<'a> SetBoatsLayoutScreen<'a> {
|
||||
}
|
||||
|
||||
let (w, h) = game_map_widget.estimated_size();
|
||||
|
||||
if f.size().width < w || f.size().height + 3 < h {
|
||||
PopupScreen::new("Screen too small!").show_in_frame(f);
|
||||
drop(game_map_widget);
|
||||
return coordinates_mapper;
|
||||
}
|
||||
|
||||
let area = centered_rect_size(w, h, &f.size());
|
||||
f.render_widget(game_map_widget, area);
|
||||
|
||||
|
Reference in New Issue
Block a user