45 lines
807 B
Go
45 lines
807 B
Go
package lobby_registry
|
|
|
|
import (
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type LobbyRegistry struct {
|
|
lobbies map[uuid.UUID]*Lobby
|
|
}
|
|
|
|
var instance *LobbyRegistry
|
|
|
|
func GetLobbyRegistry() *LobbyRegistry {
|
|
if instance == nil {
|
|
instance = newLobbyRegistry()
|
|
}
|
|
|
|
return instance
|
|
}
|
|
|
|
func newLobbyRegistry() *LobbyRegistry {
|
|
return &LobbyRegistry{lobbies: make(map[uuid.UUID]*Lobby)}
|
|
}
|
|
|
|
func (r *LobbyRegistry) GetLobbyForPlayer() *Lobby {
|
|
for _, lobby := range r.lobbies {
|
|
if !lobby.IsFull() {
|
|
return lobby
|
|
}
|
|
}
|
|
|
|
newLobby := NewEmptyLobbyWithUUID(uuid.New())
|
|
r.addNewLobby(newLobby)
|
|
return newLobby
|
|
}
|
|
|
|
func (r *LobbyRegistry) GetLobbyByUUID(uuid uuid.UUID) *Lobby {
|
|
return r.lobbies[uuid]
|
|
}
|
|
|
|
func (r *LobbyRegistry) addNewLobby(lobby *Lobby) uuid.UUID {
|
|
r.lobbies[lobby.Uuid] = lobby
|
|
return lobby.Uuid
|
|
}
|