Draft: big refactor

This commit is contained in:
2025-09-16 16:03:27 +08:00
parent f527230f1e
commit 85fa3dfe73
47 changed files with 1166 additions and 351 deletions

93
server/rooms/manager.go Normal file
View File

@@ -0,0 +1,93 @@
package rooms
import (
"fmt"
"sync"
"gitea.konchin.com/ytshih/inp2025/game/server/wordle"
"gitea.konchin.com/ytshih/inp2025/game/types"
"github.com/google/uuid"
)
type RoomManager struct {
mu sync.RWMutex
rooms map[string]*types.Room
gameHandlers map[string]*wordle.Handlers
}
func NewRoomManager() *RoomManager {
return &RoomManager{
rooms: make(map[string]*types.Room),
gameHandlers: make(map[string]*wordle.Handlers),
}
}
func (rm *RoomManager) CreateRoom(creater string) (*types.Room, error) {
room := &types.Room{
ID: uuid.New().String(),
Creater: creater,
Status: types.RoomStatusWaiting,
Players: []string{creater},
}
gameHandler := wordle.NewHandlers()
rm.mu.Lock()
rm.rooms[room.ID] = room
rm.gameHandlers[room.ID] = gameHandler
rm.mu.Unlock()
return room, nil
}
func (rm *RoomManager) GetRooms() []*types.Room {
rm.mu.RLock()
defer rm.mu.RUnlock()
rooms := make([]*types.Room, 0, len(rm.rooms))
for _, room := range rm.rooms {
rooms = append(rooms, room)
}
return rooms
}
func (rm *RoomManager) GetRoom(id string) (*types.Room, bool) {
rm.mu.RLock()
defer rm.mu.RUnlock()
room, ok := rm.rooms[id]
return room, ok
}
func (rm *RoomManager) GetGameHandler(id string) (*wordle.Handlers, bool) {
rm.mu.RLock()
defer rm.mu.RUnlock()
handler, ok := rm.gameHandlers[id]
return handler, ok
}
func (rm *RoomManager) JoinRoom(id, username string) (*types.Room, error) {
rm.mu.Lock()
defer rm.mu.Unlock()
room, ok := rm.rooms[id]
if !ok {
return nil, fmt.Errorf("room not found")
}
if len(room.Players) >= 2 {
return nil, fmt.Errorf("room is full")
}
for _, player := range room.Players {
if player == username {
return room, nil // already in room
}
}
room.Players = append(room.Players, username)
if len(room.Players) == 2 {
room.Status = types.RoomStatusPlaying
}
return room, nil
}