From 3b40279b53cd000e13b3f6ba6af52e77ead9fef3 Mon Sep 17 00:00:00 2001 From: oriventi Date: Wed, 5 Jun 2024 15:16:40 +0200 Subject: [PATCH] chore: Update SetStackStream function in GameManager This commit modifies the `SetStackStream` function in the `GameManager` to include an additional parameter `initMsg *pb.StackRequest`. This parameter is used to send an initialization message to the stack stream when `initMsg.DrawingCard` is false. The commit also removes the commented out code for handling card draw messages, which is marked as a TODO. --- duo_backend/api/game_manager.go | 50 +++++++++++++++++---------------- duo_backend/api/game_routes.go | 2 +- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/duo_backend/api/game_manager.go b/duo_backend/api/game_manager.go index dd5020f..ee5e03d 100644 --- a/duo_backend/api/game_manager.go +++ b/duo_backend/api/game_manager.go @@ -361,7 +361,7 @@ func (gm *GameManager) onStackDisconnected(gameId int) error { return gm.DeleteGame(gameId, true, "stack stream disconnected") } -func (gm *GameManager) SetStackStream(gameId int, userId uuid.UUID, stream pb.DUOService_GetStackStreamServer) error { +func (gm *GameManager) SetStackStream(gameId int, userId uuid.UUID, initMsg *pb.StackRequest, stream pb.DUOService_GetStackStreamServer) error { game, exists := gm.GetGame(gameId) if !exists { log.Printf("[stack stream] game does not exist") @@ -399,6 +399,27 @@ func (gm *GameManager) SetStackStream(gameId int, userId uuid.UUID, stream pb.DU log.Printf(" [stack stream]stack stream of game: %d connected", gameId) + if !initMsg.DrawingCard { + //INIT MESSAGE + game.Mu.Lock() + sendErr := game.StackStream.Send(&pb.StackState{ + PlaceStack: &pb.PlaceStackState{ + AmountCards: int32(len(game.CardsOnPlaceStack)), + CardIdOnTop: game.CardsOnPlaceStack[len(game.CardsOnPlaceStack)-1], + }, + DrawStack: &pb.DrawStackState{ + StackId: int32(gameId), + CardIds: game.CardsOnDrawStack, + }, + }) + if sendErr != nil { + log.Printf("[stack stream] error sending init message to stack %v: %v", userId, sendErr) + game.Mu.Unlock() + return sendErr + } + game.Mu.Unlock() + } + for { select { case <-stream.Context().Done(): @@ -425,29 +446,10 @@ func (gm *GameManager) SetStackStream(gameId int, userId uuid.UUID, stream pb.DU } log.Printf("[stack stream] Received message from stack %v: %v", userId, msg) - if !msg.DrawingCard { - //INIT MESSAGE - game.Mu.Lock() - sendErr := game.StackStream.Send(&pb.StackState{ - PlaceStack: &pb.PlaceStackState{ - AmountCards: int32(len(game.CardsOnPlaceStack)), - CardIdOnTop: game.CardsOnPlaceStack[len(game.CardsOnPlaceStack)-1], - }, - DrawStack: &pb.DrawStackState{ - StackId: int32(gameId), - CardIds: game.CardsOnDrawStack, - }, - }) - if sendErr != nil { - log.Printf("[stack stream] error sending init message to stack %v: %v", userId, sendErr) - game.Mu.Unlock() - return sendErr - } - game.Mu.Unlock() - } else { - //CARD DRAW MESSAGE - //TODO - } + + //CARD DRAW MESSAGE + //TODO + } } } diff --git a/duo_backend/api/game_routes.go b/duo_backend/api/game_routes.go index cddbda4..a4885cd 100644 --- a/duo_backend/api/game_routes.go +++ b/duo_backend/api/game_routes.go @@ -73,7 +73,7 @@ func (server *Server) GetStackStream(stream pb.DUOService_GetStackStreamServer) } // Add user to game - addErr := server.GameHandler.SetStackStream(int(gameId.GameID), payload.UserID, stream) + addErr := server.GameHandler.SetStackStream(int(gameId.GameID), payload.UserID, msg, stream) if addErr != nil { log.Printf("error adding user to game: %v", addErr) return status.Errorf(codes.Internal, "error adding user to game")