From 407a90d3b91afbc02fb7209c6928f4b29027a63f Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 4 Jun 2024 23:50:24 +0200 Subject: use messsage packet for messages not chat --- src/game/server.rs | 10 +++++----- src/lib.rs | 2 +- src/spectate/main.ts | 6 +++--- src/spectate/server.rs | 5 ++++- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/game/server.rs b/src/game/server.rs index 1f5cc7b..1b4d373 100644 --- a/src/game/server.rs +++ b/src/game/server.rs @@ -56,14 +56,12 @@ async fn game_loop(config: Config, state: Arc) { struct ClientState { pid: Option, alive: bool, - username: String, } async fn handle_client(sock: TcpStream, state: Arc) -> Result<()> { let mut cstate = ClientState { pid: None, alive: false, - username: "guest".to_string(), }; let res = handle_client_inner(sock, &state, &mut cstate).await; if let Some(pid) = cstate.pid { @@ -87,8 +85,8 @@ async fn handle_client_inner( loop { tokio::select! { message = chat.recv() => { - let (player, message) = message?; - tx.send_packet(Packet::Chat(format!("{player}: {message}"))).await?; + let (id, message) = message?; + tx.send_packet(Packet::Message { id, message }).await?; }, new_game = ticks.recv() => { let new_game = new_game?; @@ -235,7 +233,9 @@ async fn handle_packet( .await?; return Ok(()); } - let _ = state.chat.send((cstate.username.clone(), message)); + if let Some(pid) = cstate.pid { + let _ = state.chat.send((pid, message)); + } } _ => { tx.send_packet(Packet::Error("clients dont send this packet".to_string())) diff --git a/src/lib.rs b/src/lib.rs index a4d422f..f07a24a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,6 +15,6 @@ pub struct State { pub tick: broadcast::Sender>>, pub game: RwLock, pub players: RwLock>, - pub chat: broadcast::Sender<(String, String)>, + pub chat: broadcast::Sender<(u32, String)>, pub db: Database, } diff --git a/src/spectate/main.ts b/src/spectate/main.ts index 2f6de83..b92e5be 100644 --- a/src/spectate/main.ts +++ b/src/spectate/main.ts @@ -8,7 +8,7 @@ type Packet = "tick" | { player: { id: number, name: string } } | { die: number[] } | { win: [number, number] } - | { chat: string } + | { message: { id: number, message: string } } class Snake { parts: { x: number, y: number, dx: number, dy: number }[] = [] @@ -149,8 +149,8 @@ ws.onmessage = message => { const s = snakes.get(d) if (s) s.dead = true } - } else if ("chat" in p) { - chat(p.chat) + } else if ("message" in p) { + chat(`${snakes.get(p.message.id)?.name}: ${p.message.message}`) } } diff --git a/src/spectate/server.rs b/src/spectate/server.rs index 0c2af1d..fdcc815 100644 --- a/src/spectate/server.rs +++ b/src/spectate/server.rs @@ -135,7 +135,10 @@ async fn stats( async fn chat_broadcaster(sstate: Arc, state: Arc) { let mut messages = state.chat.subscribe(); while let Ok((author, message)) = messages.recv().await { - let p = Packet::Chat(format!("{author}: {message}")); + let p = Packet::Message { + id: author, + message: format!("{author}: {message}"), + }; sstate.past_events.write().await.push(p.clone()); let _ = sstate.events.send(p); } -- cgit v1.2.3-70-g09d2