GameManager integrado como puente entre WebSocket y motor de juego. Redis para persistencia de partidas activas y gRPC handlers reales para consultas entre servicios.
9 packages build vet tests pasando
go build ./services/domino-service/... + go vet + go test — ALL CLEAN.
Nuevo en internal/ws/game_manager.go. Gestiona ciclo de vida completo:
CreateGame — crea ManagedGame con creator como NorthJoinGame — asigna posición libre (East/South/West)StartGame — llena slots vacíos con bots, inicia engine.RoundPlayTile / PassTurn / BuyTile — delega a engine, log Moves a DB, broadcast estadoMensajes WS enrutados a GameManager en internal/ws/messages.go:
play_tile → mg.PlayTile(userID, tile, boardEnd)pass_turn → mg.PassTurn(userID)buy_tile → mg.BuyTile(userID)start_game → mg.StartGame() via REST pathClient.UsernameNuevo internal/ws/redis_store.go:
ManagedGame (engine.Game + Round + player mapping)saveToRedisLocked() — tras cada broadcast de estadoLoadAllActive() — restaura partidas activas al arrancar serverdeleteFromRedisLocked() — al finalizar partidadomino:game:{gameID} con TTL 72hImplementados en internal/server/grpc.go mediante proto proto/domino/domino.proto:
GetGameState — devuelve estado de partida activa (score, ronda, variante)GetGameResult — devuelve resultado final si la partida terminóListActiveGames — lista resumen de partidas activasLogMove() — registra cada jugada en domino.game_movesFinishGame() — finaliza partida en domino.gamesTestBotVsBotCompleteGame — partida completa bot vs bot (~0.34s con 10ms delay)TestBotMovesProgressGame — validación de progresión de botsNUEVOS: internal/ws/game_manager.go — Bridge WS → Engine + bot orquestación internal/ws/game_manager_test.go — E2E bot vs bot tests internal/ws/redis_store.go — Redis save/load/delete proto/domino/domino.proto — Proto definición servicio gRPC proto/gen/domino/ — Go stubs generados MODIFICADOS: internal/ws/messages.go — play_tile, pass_turn, buy_tile handlers internal/ws/connect.go — HubHandler con GameManager internal/ws/hub.go — Client.Username internal/ws/hub_test.go — Constructor actualizado internal/ws/ws_test.go — Constructor actualizado internal/ws/ws_integration_test.go — Constructor actualizado internal/server/grpc.go — Implementación DominoServiceServer internal/api/router.go — gameManager injectado internal/api/handlers.go — handleCreateGame llama gm.CreateGame() cmd/server/main.go — Wire Redis, GameManager, gRPC state← Volver a d.bakuryu.com