package znet import ( "fmt" "go-study/zinx/ziface" "sync" ) type ConnManager struct { // 管理的连接集合 connections map[uint32]ziface.IConnection // 保护连接集合的读写锁 connLock sync.RWMutex } // NewConnManager 创建一个连接管理器 func NewConnManager() *ConnManager { return &ConnManager{ connections: make(map[uint32]ziface.IConnection), } } // Add 添加连接 func (cm *ConnManager) Add(conn ziface.IConnection) { cm.connLock.Lock() defer cm.connLock.Unlock() // 将连接添加到连接集合中 cm.connections[conn.GetConnID()] = conn fmt.Println("connection add to ConnManager successfully: connID =", conn.GetConnID(), " now conn num =", cm.Len()) } // Remove 删除连接 func (cm *ConnManager) Remove(conn ziface.IConnection) { cm.connLock.Lock() defer cm.connLock.Unlock() // 删除连接 delete(cm.connections, conn.GetConnID()) fmt.Println("connection remove from ConnManager successfully: connID =", conn.GetConnID(), " now conn num =", cm.Len()) } // Get 根据连接ID获取连接 func (cm *ConnManager) Get(connID uint32) (ziface.IConnection, error) { cm.connLock.RLock() defer cm.connLock.RUnlock() if conn, ok := cm.connections[connID]; ok { return conn, nil } else { return nil, fmt.Errorf("connection not found: connID = %d", connID) } } // Len 获取当前连接总数 func (cm *ConnManager) Len() int { return len(cm.connections) } // ClearConn 清除并终止所有连接 func (cm *ConnManager) ClearConn() { cm.connLock.Lock() defer cm.connLock.Unlock() // 遍历并停止所有连接 for connID, conn := range cm.connections { // 停止连接 conn.Stop() // 删除连接 delete(cm.connections, connID) } fmt.Println("Clear all connections successfully: now conn num =", cm.Len()) }