68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package client
|
|
|
|
import (
|
|
"git.hlsq.asia/mmorpg/service-gateway/internal/global"
|
|
"sync"
|
|
)
|
|
|
|
var UserMgr *userManager
|
|
|
|
type userManager struct {
|
|
userMap map[string]*Client
|
|
sync.RWMutex
|
|
}
|
|
|
|
func init() {
|
|
UserMgr = &userManager{
|
|
userMap: make(map[string]*Client),
|
|
}
|
|
}
|
|
|
|
func (m *userManager) Add(usn string, client *Client) {
|
|
m.Lock()
|
|
defer m.Unlock()
|
|
m.userMap[usn] = client
|
|
global.OnlineUsersGauge.Inc()
|
|
}
|
|
|
|
func (m *userManager) Delete(usn string) {
|
|
m.Lock()
|
|
defer m.Unlock()
|
|
delete(m.userMap, usn)
|
|
global.OnlineUsersGauge.Dec()
|
|
}
|
|
|
|
func (m *userManager) GetAll() map[string]*Client {
|
|
m.RLock()
|
|
defer m.RUnlock()
|
|
|
|
copyMap := make(map[string]*Client, len(m.userMap))
|
|
for k, v := range m.userMap {
|
|
copyMap[k] = v
|
|
}
|
|
return copyMap
|
|
}
|
|
|
|
func (m *userManager) GetAllInterface() []interface{} {
|
|
m.RLock()
|
|
defer m.RUnlock()
|
|
|
|
r := make([]interface{}, 0)
|
|
for _, v := range m.userMap {
|
|
r = append(r, v)
|
|
}
|
|
return r
|
|
}
|
|
|
|
func (m *userManager) GetByUSN(usn string) *Client {
|
|
m.RLock()
|
|
defer m.RUnlock()
|
|
return m.userMap[usn]
|
|
}
|
|
|
|
func (m *userManager) GetSize() int32 {
|
|
m.RLock()
|
|
defer m.RUnlock()
|
|
return int32(len(m.userMap))
|
|
}
|