Add version check system
This commit is contained in:
@ -18,7 +18,7 @@ use sea_battle_backend::consts::{
|
||||
use sea_battle_backend::data::GameRules;
|
||||
use sea_battle_backend::utils::res_utils::Res;
|
||||
use sea_battle_cli_player::cli_args::{cli_args, TestDevScreen};
|
||||
use sea_battle_cli_player::client::Client;
|
||||
use sea_battle_cli_player::client::{Client, GetRemoteVersionError};
|
||||
use sea_battle_cli_player::server::run_server;
|
||||
use sea_battle_cli_player::ui_screens::configure_game_rules::GameRulesConfigurationScreen;
|
||||
use sea_battle_cli_player::ui_screens::game_screen::GameScreen;
|
||||
@ -35,10 +35,10 @@ async fn run_dev<B: Backend>(
|
||||
d: TestDevScreen,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
let res = match d {
|
||||
TestDevScreen::Popup => popup_screen::PopupScreen::new("Welcome there!!")
|
||||
TestDevScreen::Popup => PopupScreen::new("Welcome there!!")
|
||||
.show(terminal)?
|
||||
.as_string(),
|
||||
TestDevScreen::Input => input_screen::InputScreen::new("What it your name ?")
|
||||
TestDevScreen::Input => InputScreen::new("What it your name ?")
|
||||
.set_title("A custom title")
|
||||
.show(terminal)?
|
||||
.as_string(),
|
||||
@ -50,9 +50,9 @@ async fn run_dev<B: Backend>(
|
||||
TestDevScreen::SelectBotType => select_bot_type_screen::SelectBotTypeScreen::default()
|
||||
.show(terminal)?
|
||||
.as_string(),
|
||||
TestDevScreen::SelectPlayMode => select_play_mode_screen::SelectPlayModeScreen::default()
|
||||
.show(terminal)?
|
||||
.as_string(),
|
||||
TestDevScreen::SelectPlayMode => {
|
||||
SelectPlayModeScreen::default().show(terminal)?.as_string()
|
||||
}
|
||||
TestDevScreen::SetBoatsLayout => {
|
||||
let rules = GameRules {
|
||||
boats_can_touch: true,
|
||||
@ -64,7 +64,7 @@ async fn run_dev<B: Backend>(
|
||||
.as_string()
|
||||
}
|
||||
TestDevScreen::ConfigureGameRules => {
|
||||
configure_game_rules::GameRulesConfigurationScreen::new(GameRules::default())
|
||||
GameRulesConfigurationScreen::new(GameRules::default())
|
||||
.show(terminal)?
|
||||
.as_string()
|
||||
}
|
||||
@ -99,6 +99,8 @@ async fn run_app<B: Backend>(terminal: &mut Terminal<B>) -> Res {
|
||||
return run_dev(terminal, d).await;
|
||||
}
|
||||
|
||||
let mut checked_online_compatibility = false;
|
||||
|
||||
let mut rules = GameRules::default();
|
||||
|
||||
let mut username = "".to_string();
|
||||
@ -107,6 +109,30 @@ async fn run_app<B: Backend>(terminal: &mut Terminal<B>) -> Res {
|
||||
let choice = SelectPlayModeScreen::default().show(terminal)?;
|
||||
|
||||
if let ScreenResult::Ok(c) = choice {
|
||||
// Check compatibility
|
||||
if c.is_online_play_mode() && !checked_online_compatibility {
|
||||
PopupScreen::new("🖥 Checking remote server version...").show_once(terminal)?;
|
||||
let valid_version = match Client::get_server_version().await {
|
||||
Ok(v) => v.is_compatible_with_static_version().unwrap_or(false),
|
||||
Err(GetRemoteVersionError::ConnectionFailed) => {
|
||||
PopupScreen::new("❌ Could not connect to remote server!")
|
||||
.show(terminal)?;
|
||||
continue;
|
||||
}
|
||||
Err(GetRemoteVersionError::Other(e)) => {
|
||||
log::error!("Could not load remote server information! {:?}", e);
|
||||
false
|
||||
}
|
||||
};
|
||||
|
||||
if !valid_version {
|
||||
PopupScreen::new("❌ Unfortunately, it seems that your version of Sea Battle Cli player is too old to be used online...\n\nPlease update it before trying to play online...").show(terminal)?;
|
||||
continue;
|
||||
}
|
||||
|
||||
checked_online_compatibility = true;
|
||||
}
|
||||
|
||||
if c.need_player_name() && username.is_empty() {
|
||||
username = query_player_name(terminal)?;
|
||||
}
|
||||
|
Reference in New Issue
Block a user