aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-04 23:50:24 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-04 23:50:24 +0200
commit407a90d3b91afbc02fb7209c6928f4b29027a63f (patch)
tree78335b3ff3cb778565fbb68365c5944dc58192b0
parent1d6dcfc944e904b6f2b2fe389f27b8964e5b4c5c (diff)
downloadgpn-tron-rust-407a90d3b91afbc02fb7209c6928f4b29027a63f.tar
gpn-tron-rust-407a90d3b91afbc02fb7209c6928f4b29027a63f.tar.bz2
gpn-tron-rust-407a90d3b91afbc02fb7209c6928f4b29027a63f.tar.zst
use messsage packet for messages not chat
-rw-r--r--src/game/server.rs10
-rw-r--r--src/lib.rs2
-rw-r--r--src/spectate/main.ts6
-rw-r--r--src/spectate/server.rs5
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<State>) {
struct ClientState {
pid: Option<u32>,
alive: bool,
- username: String,
}
async fn handle_client(sock: TcpStream, state: Arc<State>) -> 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<Option<Option<u32>>>,
pub game: RwLock<Game>,
pub players: RwLock<HashMap<u32, String>>,
- 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<SpectateState>, state: Arc<State>) {
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);
}