package components import "sync" type ConnManage struct { mu sync.RWMutex conns map[uint32]IConnection } func NewConnManage() *ConnManage { return &ConnManage{ mu: sync.RWMutex{}, conns: make(map[uint32]IConnection), } } func (c *ConnManage) AddConn(id uint32, connection IConnection) { c.mu.Lock() defer c.mu.Unlock() c.conns[id] = connection } func (c *ConnManage) GetConn(id uint32) IConnection { c.mu.RLock() defer c.mu.RUnlock() return c.conns[id] } func (c *ConnManage) DelConn(id uint32) IConnection { c.mu.Lock() defer c.mu.Unlock() conn := c.conns[id] delete(c.conns, id) return conn } func (c *ConnManage) Range(f func(key interface{}, value interface{}) bool) { c.mu.Lock() defer c.mu.Unlock() for k, v := range c.conns { if ok := f(k, v); !ok { return } } } func (c *ConnManage) StopAllConns() { c.Range(func(key interface{}, value interface{}) bool { conn := value.(IConnection) conn.Stop() return true }) }