Skip to content

Commit d2ed4da

Browse files
committed
Limit name length to 32 characters
1 parent 85118e4 commit d2ed4da

3 files changed

Lines changed: 19 additions & 0 deletions

File tree

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ pub mod ports;
5050

5151
pub mod remote;
5252

53+
mod utils;
54+
5355
#[cfg(test)]
5456
mod tests {
5557
use env_logger::WriteStyle;

src/player.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use uactor::blocking::Addr;
99
use crate::game_server::{GameServerAddr, GameServerMessage};
1010
use crate::remote::{RemoteConnection, RemoteMessage};
1111
use crate::room::{GamePlayerMessage, RoomAddr, RoomMessage};
12+
use crate::utils::{char_len, char_trim};
1213

1314
const TO_BE_CREATED: &str = "<to be created>";
1415

@@ -135,6 +136,14 @@ impl Player {
135136
.await;
136137
}
137138
RemoteMessage::UpdatePlayer { voter, name } => {
139+
let name = name.map(|name| {
140+
if char_len(&name) >= 32 {
141+
char_trim(&name, 32)
142+
} else {
143+
name
144+
}
145+
});
146+
138147
debug!(
139148
"{}: Update player: voter={:?} name={:?}",
140149
self.id, &voter, &name

src/utils.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
pub fn char_len(name: &str) -> usize {
2+
name.encode_utf16().count()
3+
}
4+
5+
pub fn char_trim(name: &str, n: usize) -> String {
6+
let trimmed: Vec<u16> = name.encode_utf16().take(n).collect();
7+
String::from_utf16_lossy(trimmed.as_ref())
8+
}

0 commit comments

Comments
 (0)