77 lines
1.8 KiB
Go
77 lines
1.8 KiB
Go
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())
|
|
}
|