73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
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
|
|
}
|