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) // } //} } } }