46 lines
777 B
Go
46 lines
777 B
Go
|
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)
|
||
|
}
|
||
|
}
|