From 14aeb217726f67b4ee374e0485ae9637c1887dd4 Mon Sep 17 00:00:00 2001 From: minie4 Date: Tue, 11 Mar 2025 12:39:22 +0100 Subject: [PATCH] feat(backend): send own cards and player states on room join --- backend/api/websocket.go | 2 ++ backend/game/game.go | 10 ++++++++++ backend/types/websocket_packets.go | 6 +++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/api/websocket.go b/backend/api/websocket.go index 34adef4..629c41f 100644 --- a/backend/api/websocket.go +++ b/backend/api/websocket.go @@ -286,4 +286,6 @@ func onPlayerJoin(client *socketio.Socket, room *types.Room, player *types.Playe } game.OnPlayedCardUpdate(room, player, card) }) + + game.SendInitialData(room, player) } diff --git a/backend/game/game.go b/backend/game/game.go index b17a4b2..9792ea0 100644 --- a/backend/game/game.go +++ b/backend/game/game.go @@ -132,6 +132,16 @@ func BroadcastInRoom(room *types.Room, topic string, data interface{}) { } } +func SendInitialData(room *types.Room, targetPlayer *types.Player) { + if targetPlayer.Connection.Socket == nil { + return + } + targetPlayer.Connection.Socket.Emit("OwnCards", types.BuildOwnCardsPacket(room, targetPlayer)) + for _, player := range room.Players { + targetPlayer.Connection.Socket.Emit("PlayerState", types.BuildPlayerStatePacket(room, player)) + } +} + func OnRoomUpdate(room *types.Room) { db.Conn.UpdateRoom(room) BroadcastInRoom(room, "RoomInfo", types.BuildRoomInfoPacket(room)) diff --git a/backend/types/websocket_packets.go b/backend/types/websocket_packets.go index f3e5ac5..77b649f 100644 --- a/backend/types/websocket_packets.go +++ b/backend/types/websocket_packets.go @@ -103,7 +103,11 @@ func BuildOwnCardsPacket(room *Room, player *Player) S2C_OwnCards { } func BuildPlayerStatePacket(room *Room, player *Player) S2C_PlayerState { - return S2C_PlayerState{PlayerId: player.PlayerId, NumCards: len(player.Cards), Active: room.CardDeck.IsPlayerActive(player)} + isActivePlayer := false + if room.CardDeck != nil && room.CardDeck.IsPlayerActive(player) { + isActivePlayer = true + } + return S2C_PlayerState{PlayerId: player.PlayerId, NumCards: len(player.Cards), Active: isActivePlayer} } func BuildCardPlayedPacket(player *Player, cardIndex int, card Card) S2C_CardPlayed { return S2C_CardPlayed{Card: card, CardIndex: cardIndex, PlayedBy: player.PlayerId}