Add version check system

This commit is contained in:
2022-10-18 08:58:36 +02:00
parent 915426849b
commit eea2ecbf63
23 changed files with 204 additions and 26 deletions

View File

@ -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)?;
}