Limit player name length
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		@@ -20,6 +20,7 @@ use cli_player::ui_screens::input_screen::InputScreen;
 | 
				
			|||||||
use cli_player::ui_screens::popup_screen::PopupScreen;
 | 
					use cli_player::ui_screens::popup_screen::PopupScreen;
 | 
				
			||||||
use cli_player::ui_screens::select_play_mode_screen::{SelectPlayModeResult, SelectPlayModeScreen};
 | 
					use cli_player::ui_screens::select_play_mode_screen::{SelectPlayModeResult, SelectPlayModeScreen};
 | 
				
			||||||
use cli_player::ui_screens::*;
 | 
					use cli_player::ui_screens::*;
 | 
				
			||||||
 | 
					use sea_battle_backend::consts::{MAX_PLAYER_NAME_LENGTH, MIN_PLAYER_NAME_LENGTH};
 | 
				
			||||||
use sea_battle_backend::data::GameRules;
 | 
					use sea_battle_backend::data::GameRules;
 | 
				
			||||||
use sea_battle_backend::utils::Res;
 | 
					use sea_battle_backend::utils::Res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -72,12 +73,17 @@ async fn run_dev<B: Backend>(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Ask the user to specify its username
 | 
					/// Ask the user to specify its username
 | 
				
			||||||
fn query_username<B: Backend>(terminal: &mut Terminal<B>) -> Res<String> {
 | 
					fn query_username<B: Backend>(terminal: &mut Terminal<B>) -> Res<String> {
 | 
				
			||||||
    let hostname = hostname::get()?.to_string_lossy().to_string();
 | 
					    let mut hostname = hostname::get()?.to_string_lossy().to_string();
 | 
				
			||||||
 | 
					    if hostname.len() > MAX_PLAYER_NAME_LENGTH {
 | 
				
			||||||
 | 
					        hostname = hostname[0..MAX_PLAYER_NAME_LENGTH].to_string();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let res =
 | 
					    let res =
 | 
				
			||||||
        InputScreen::new("Please specify the name to which other players should identify you:")
 | 
					        InputScreen::new("Please specify the name to which other players should identify you:")
 | 
				
			||||||
            .set_title("Player name")
 | 
					            .set_title("Player name")
 | 
				
			||||||
            .set_value(&hostname)
 | 
					            .set_value(&hostname)
 | 
				
			||||||
 | 
					            .set_min_length(MIN_PLAYER_NAME_LENGTH)
 | 
				
			||||||
 | 
					            .set_max_length(MAX_PLAYER_NAME_LENGTH)
 | 
				
			||||||
            .show(terminal)?;
 | 
					            .show(terminal)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Ok(res.value().unwrap_or(hostname))
 | 
					    Ok(res.value().unwrap_or(hostname))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,6 +55,16 @@ impl<'a> InputScreen<'a> {
 | 
				
			|||||||
        self
 | 
					        self
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn set_min_length(mut self, v: usize) -> Self {
 | 
				
			||||||
 | 
					        self.min_len = v;
 | 
				
			||||||
 | 
					        self
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn set_max_length(mut self, v: usize) -> Self {
 | 
				
			||||||
 | 
					        self.max_len = v;
 | 
				
			||||||
 | 
					        self
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Get error contained in input
 | 
					    /// Get error contained in input
 | 
				
			||||||
    fn error(&self) -> Option<&'static str> {
 | 
					    fn error(&self) -> Option<&'static str> {
 | 
				
			||||||
        if self.value.len() > self.max_len {
 | 
					        if self.value.len() > self.max_len {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,3 +21,6 @@ pub const MULTI_PLAYER_PLAYER_BOATS: [usize; 5] = [2, 3, 3, 4, 5];
 | 
				
			|||||||
pub const ALPHABET: &str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 | 
					pub const ALPHABET: &str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const INVITE_CODE_LENGTH: usize = 5;
 | 
					pub const INVITE_CODE_LENGTH: usize = 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub const MIN_PLAYER_NAME_LENGTH: usize = 1;
 | 
				
			||||||
 | 
					pub const MAX_PLAYER_NAME_LENGTH: usize = 10;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,6 +57,8 @@ pub struct PlayConfiguration {
 | 
				
			|||||||
    pub max_boats_number: usize,
 | 
					    pub max_boats_number: usize,
 | 
				
			||||||
    pub bot_types: &'static [BotDescription],
 | 
					    pub bot_types: &'static [BotDescription],
 | 
				
			||||||
    pub ordinate_alphabet: &'static str,
 | 
					    pub ordinate_alphabet: &'static str,
 | 
				
			||||||
 | 
					    pub min_player_name_len: usize,
 | 
				
			||||||
 | 
					    pub max_player_name_len: usize,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Default for PlayConfiguration {
 | 
					impl Default for PlayConfiguration {
 | 
				
			||||||
@@ -72,6 +74,8 @@ impl Default for PlayConfiguration {
 | 
				
			|||||||
            max_boats_number: MAX_BOATS_NUMBER,
 | 
					            max_boats_number: MAX_BOATS_NUMBER,
 | 
				
			||||||
            bot_types: &BOTS_TYPES,
 | 
					            bot_types: &BOTS_TYPES,
 | 
				
			||||||
            ordinate_alphabet: ALPHABET,
 | 
					            ordinate_alphabet: ALPHABET,
 | 
				
			||||||
 | 
					            min_player_name_len: MIN_PLAYER_NAME_LENGTH,
 | 
				
			||||||
 | 
					            max_player_name_len: MAX_PLAYER_NAME_LENGTH,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ use actix_web_actors::ws::{CloseCode, CloseReason, Message, ProtocolError, Webso
 | 
				
			|||||||
use uuid::Uuid;
 | 
					use uuid::Uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::bot_player::BotPlayer;
 | 
					use crate::bot_player::BotPlayer;
 | 
				
			||||||
 | 
					use crate::consts::{MAX_PLAYER_NAME_LENGTH, MIN_PLAYER_NAME_LENGTH};
 | 
				
			||||||
use crate::data::{BoatsLayout, Coordinates, CurrentGameStatus, FireResult, GameRules};
 | 
					use crate::data::{BoatsLayout, Coordinates, CurrentGameStatus, FireResult, GameRules};
 | 
				
			||||||
use crate::dispatcher_actor::{AcceptInvite, CreateInvite, DispatcherActor, PlayRandom};
 | 
					use crate::dispatcher_actor::{AcceptInvite, CreateInvite, DispatcherActor, PlayRandom};
 | 
				
			||||||
use crate::game::{AddPlayer, Game};
 | 
					use crate::game::{AddPlayer, Game};
 | 
				
			||||||
@@ -149,6 +150,12 @@ impl Actor for HumanPlayerWS {
 | 
				
			|||||||
    type Context = WebsocketContext<Self>;
 | 
					    type Context = WebsocketContext<Self>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn started(&mut self, ctx: &mut Self::Context) {
 | 
					    fn started(&mut self, ctx: &mut Self::Context) {
 | 
				
			||||||
 | 
					        // Check player name length
 | 
				
			||||||
 | 
					        if self.name.len() < MIN_PLAYER_NAME_LENGTH || self.name.len() > MAX_PLAYER_NAME_LENGTH {
 | 
				
			||||||
 | 
					            ctx.stop();
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.hb(ctx);
 | 
					        self.hb(ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.send_message(ServerMessage::WaitingForAnotherPlayer, ctx);
 | 
					        self.send_message(ServerMessage::WaitingForAnotherPlayer, ctx);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user