package websocket import "sync" type Manager struct { Group map[string]*Client Lock sync.Mutex Register, UnRegister chan *Client ClientCount uint } func (m *Manager) Start() { for { select { case client := <-m.Register: m.Lock.Lock() m.Group[client.ID] = client m.ClientCount++ m.Lock.Unlock() case client := <-m.UnRegister: m.Lock.Lock() if _, ok := m.Group[client.ID]; ok { close(client.Msg) delete(m.Group, client.ID) m.ClientCount-- } m.Lock.Unlock() } } } func (m *Manager) RegisterClient(client *Client) { m.Register <- client } func (m *Manager) UnRegisterClient(client *Client) { m.UnRegister <- client }