watchtogether/backend/internal/ws/hub.go

60 lines
1.1 KiB
Go

package ws
type Hub struct {
// Registered clients
clients map[*Client]bool
// Inbound messages from the clients
broadcast chan RawMessage
// Register requests from the clients
register chan *Client
// Unregister requests from clients
unregister chan *Client
}
func NewHub() *Hub {
return &Hub{
broadcast: make(chan RawMessage),
register: make(chan *Client),
unregister: make(chan *Client),
clients: make(map[*Client]bool),
}
}
func (h *Hub) handleMessage(rm RawMessage) {
m := rm.UnSerializeData()
switch m.Type {
case Identify:
handleIdentifyEvent(&m)
case Ping:
handlePingEvent(&m)
}
return
}
func (h *Hub) Run() {
for {
select {
case client := <-h.register:
h.clients[client] = true
case client := <-h.unregister:
if _, ok := h.clients[client]; ok {
delete(h.clients, client)
close(client.send)
}
case message := <-h.broadcast:
go h.handleMessage(message)
//for client := range h.clients {
// select {
// case client.send <- message:
// default:
// close(client.send)
// delete(h.clients, client)
// }
//}
}
}
}