package lobbies import ( "mchess_server/utils" "github.com/google/uuid" ) type LobbyRegistry struct { lobbies map[utils.Passphrase]*Lobby } var instance *LobbyRegistry func GetLobbyRegistry() *LobbyRegistry { if instance == nil { instance = newLobbyRegistry() } return instance } func newLobbyRegistry() *LobbyRegistry { return &LobbyRegistry{lobbies: make(map[utils.Passphrase]*Lobby)} } func (r *LobbyRegistry) CreateNewPrivateLobby() *Lobby { lobby := newEmptyLobbyWithPassphrase() r.addNewLobby(lobby) return lobby } func (r *LobbyRegistry) GetLobbyForPlayer() *Lobby { for _, lobby := range r.lobbies { if !lobby.ContainsTwoPlayers() { return lobby } } newLobby := NewEmptyLobbyWithUUID(uuid.New()) r.addNewLobby(newLobby) return newLobby } func (r *LobbyRegistry) GetLobbyByPassphrase(p utils.Passphrase) *Lobby { for _, lobby := range r.lobbies { if lobby.Passphrase == p { return lobby } } return nil } func (r *LobbyRegistry) addNewLobby(lobby *Lobby) uuid.UUID { r.lobbies[lobby.Passphrase] = lobby return lobby.Uuid }