package socketio import "sync" type namespaces struct { namespaces map[string]*namespaceConn mu sync.RWMutex } func newNamespaces() *namespaces { return &namespaces{ namespaces: make(map[string]*namespaceConn), } } func (n *namespaces) Get(ns string) (*namespaceConn, bool) { n.mu.RLock() defer n.mu.RUnlock() namespace, ok := n.namespaces[ns] return namespace, ok } func (n *namespaces) Set(ns string, conn *namespaceConn) { n.mu.Lock() defer n.mu.Unlock() n.namespaces[ns] = conn } func (n *namespaces) Delete(ns string) { n.mu.Lock() defer n.mu.Unlock() delete(n.namespaces, ns) } func (n *namespaces) Range(fn func(ns string, nc *namespaceConn)) { n.mu.RLock() defer n.mu.RUnlock() for ns, nc := range n.namespaces { fn(ns, nc) } }