fox/ws/wsMgr.go

68 lines
1.2 KiB
Go
Raw Normal View History

2025-05-25 20:02:15 +08:00
package ws
2025-05-28 19:43:56 +08:00
import (
"sync"
)
2025-05-25 20:02:15 +08:00
var wsMgr = newManager()
type wsManager struct {
2025-05-28 19:43:56 +08:00
wsConnAll sync.Map // cmap.ConcurrentMap[uint32, *wsConnect]
2025-05-25 20:02:15 +08:00
}
func newManager() *wsManager {
return &wsManager{
2025-05-28 19:43:56 +08:00
//wsConnAll: cmap.NewWithCustomShardingFunction[uint32, *wsConnect](func(key uint32) uint32 {
// return key
//}),
2025-05-25 20:02:15 +08:00
}
}
func (m *wsManager) Add(conn *wsConnect) {
2025-05-28 19:43:56 +08:00
m.wsConnAll.Store(conn.id, conn)
2025-05-25 20:02:15 +08:00
}
func (m *wsManager) SetUserId(connId uint32, userId int64) {
userMgr.Add(connId, userId)
}
func (m *wsManager) Remove(conn *wsConnect) {
if conn.UserId() > 0 {
userMgr.Remove(conn.UserId())
}
2025-05-28 19:43:56 +08:00
m.wsConnAll.Delete(conn.id)
2025-05-25 20:02:15 +08:00
}
func (m *wsManager) Get(connId uint32) (*wsConnect, bool) {
2025-05-28 19:43:56 +08:00
v, ok := m.wsConnAll.Load(connId)
if ok {
conn, ok := v.(*wsConnect)
return conn, ok
}
return nil, false
2025-05-25 20:02:15 +08:00
}
func (m *wsManager) FindByUserId(userId int64) (*wsConnect, bool) {
connId := userMgr.GetConnId(userId)
2025-05-28 19:43:56 +08:00
return m.Get(connId)
}
2025-05-28 19:53:40 +08:00
func (m *wsManager) Rang(cb func(conn IConn) bool) {
userMgr.Rang(func(_, v any) bool {
connId := v.(uint32)
if conn, ok := m.Get(connId); ok {
return cb(conn)
}
return true
})
2025-05-25 20:02:15 +08:00
}
func (m *wsManager) Count() int {
2025-05-28 19:43:56 +08:00
count := 0
m.wsConnAll.Range(func(k, v interface{}) bool {
count++
return true
})
return count
2025-05-25 20:02:15 +08:00
}