34 lines
563 B
Go
34 lines
563 B
Go
package websocket
|
|
|
|
type Hub struct {
|
|
rooms map[string]*Room
|
|
}
|
|
|
|
func NewHub() *Hub {
|
|
return &Hub{
|
|
rooms: make(map[string]*Room),
|
|
}
|
|
}
|
|
|
|
func (h *Hub) GetOrCreateRoom(roomID string) *Room {
|
|
if _, ok := h.rooms[roomID]; !ok {
|
|
h.rooms[roomID] = NewRoom(roomID)
|
|
}
|
|
return h.rooms[roomID]
|
|
}
|
|
|
|
func (h *Hub) CleanupRoom(roomID string) {
|
|
room := h.rooms[roomID]
|
|
if len(room.clients) == 0 {
|
|
delete(h.rooms, roomID)
|
|
}
|
|
}
|
|
|
|
func (h *Hub) Rooms() []string {
|
|
ids := make([]string, 0, len(h.rooms))
|
|
for id := range h.rooms {
|
|
ids = append(ids, id)
|
|
}
|
|
return ids
|
|
}
|