package ws import ( "sync" ) //var connMgr = newConnManager() type connManager struct { wsConnAll sync.Map // cmap.ConcurrentMap[uint32, *wsConnect] userMgr *userManager } // 连接管理器 func newConnManager(userMgr *userManager) *connManager { return &connManager{ //wsConnAll: cmap.NewWithCustomShardingFunction[uint32, *wsConnect](func(key uint32) uint32 { // return key //}), userMgr: userMgr, } } func (m *connManager) Add(conn *wsConnect) { //log.DebugF("添加连接:%v 玩家:%v", conn.Id(), conn.UserId()) m.wsConnAll.Store(conn.id, conn) } func (m *connManager) SetUserId(connId uint32, userId int64) { m.userMgr.Add(connId, userId) } func (m *connManager) Remove(conn *wsConnect) { if conn.UserId() > 0 { m.userMgr.Remove(conn.UserId()) } //log.DebugF("删除连接:%v 玩家:%v", conn.Id(), conn.UserId()) m.wsConnAll.Delete(conn.id) } func (m *connManager) Get(connId uint32) (*wsConnect, bool) { v, ok := m.wsConnAll.Load(connId) if ok { conn, ok := v.(*wsConnect) return conn, ok } return nil, false } func (m *connManager) FindByUserId(userId int64) (*wsConnect, bool) { connId := m.userMgr.GetConnId(userId) return m.Get(connId) } func (m *connManager) Rang(cb func(conn IConn) bool) { m.userMgr.Rang(func(_, v any) bool { connId := v.(uint32) if conn, ok := m.Get(connId); ok { return cb(conn) } return true }) } func (m *connManager) Count() int { count := 0 m.wsConnAll.Range(func(k, v interface{}) bool { count++ return true }) return count }