增加用户管理

This commit is contained in:
wtz
2026-02-20 23:39:49 +08:00
parent a272dad5f1
commit af3b805dbf
18 changed files with 1493 additions and 53 deletions

View File

@@ -263,6 +263,10 @@ func NewGameManager(rdb *redis.Client) *GameManager {
}
func (gm *GameManager) CreateRoom(playerName string, maxPlayers int) (*models.Room, *models.Player) {
return gm.CreateRoomWithUser("", playerName, maxPlayers)
}
func (gm *GameManager) CreateRoomWithUser(userID, playerName string, maxPlayers int) (*models.Room, *models.Player) {
gm.mu.Lock()
defer gm.mu.Unlock()
@@ -270,7 +274,7 @@ func (gm *GameManager) CreateRoom(playerName string, maxPlayers int) (*models.Ro
roomID := generateID()
playerID := generateID()
player := &models.Player{ID: playerID, Name: playerName, IsOnline: true}
player := &models.Player{ID: playerID, UserID: userID, Name: playerName, IsOnline: true}
room := &models.Room{
ID: roomID,
Players: []*models.Player{player},
@@ -289,6 +293,10 @@ func (gm *GameManager) CreateRoom(playerName string, maxPlayers int) (*models.Ro
}
func (gm *GameManager) JoinRoom(roomID, playerName string) (*models.Room, *models.Player, error) {
return gm.JoinRoomWithUser(roomID, "", playerName)
}
func (gm *GameManager) JoinRoomWithUser(roomID, userID, playerName string) (*models.Room, *models.Player, error) {
gm.mu.Lock()
defer gm.mu.Unlock()
@@ -305,7 +313,7 @@ func (gm *GameManager) JoinRoom(roomID, playerName string) (*models.Room, *model
}
playerID := generateID()
player := &models.Player{ID: playerID, Name: playerName, IsOnline: true}
player := &models.Player{ID: playerID, UserID: userID, Name: playerName, IsOnline: true}
room.Players = append(room.Players, player)
gm.saveRoom(ctx, room)
@@ -378,6 +386,25 @@ func (gm *GameManager) MarkPlayerOnline(roomID, playerID string) {
}
}
func (gm *GameManager) MarkPlayerOffline(roomID, playerID string) {
gm.mu.Lock()
defer gm.mu.Unlock()
ctx := context.Background()
room, err := gm.loadRoom(ctx, roomID)
if err != nil {
return
}
for _, p := range room.Players {
if p.ID == playerID {
p.IsOnline = false
gm.saveRoom(ctx, room)
return
}
}
}
func (gm *GameManager) SetReady(roomID, playerID string, ready bool) error {
gm.mu.Lock()
defer gm.mu.Unlock()
@@ -581,6 +608,40 @@ func (gm *GameManager) GetRoom(roomID string) (*models.Room, error) {
return gm.loadRoom(context.Background(), roomID)
}
func (gm *GameManager) GetPlayerName(roomID, playerID string) string {
gm.mu.RLock()
defer gm.mu.RUnlock()
room, err := gm.loadRoom(context.Background(), roomID)
if err != nil {
return ""
}
for _, p := range room.Players {
if p.ID == playerID {
return p.Name
}
}
return ""
}
func (gm *GameManager) GetPlayerIDByUserID(roomID, userID string) string {
gm.mu.RLock()
defer gm.mu.RUnlock()
room, err := gm.loadRoom(context.Background(), roomID)
if err != nil {
return ""
}
for _, p := range room.Players {
if p.UserID == userID {
return p.ID
}
}
return ""
}
func (gm *GameManager) GetRoomState(roomID, playerID string) *models.Room {
gm.mu.RLock()
defer gm.mu.RUnlock()