88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package global
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/idealeak/goserver/core/logger"
|
|
"github.com/tomas-qstarrs/redimo"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/ddb"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
var GlobalMgrSington = &GlobalMgr{
|
|
globalUUID: make(map[string]uint64),
|
|
}
|
|
var rwMu sync.RWMutex
|
|
|
|
const (
|
|
GLOBAL_PLAYERUUID = "GLOBAL:PLAYERUUID"
|
|
)
|
|
|
|
type GlobalMgr struct {
|
|
*redimo.Client
|
|
globalUUID map[string]uint64
|
|
dirty bool
|
|
}
|
|
|
|
func (r *GlobalMgr) ModuleName() string {
|
|
return "GlobalMgr"
|
|
}
|
|
func (r *GlobalMgr) getKey(key string) string {
|
|
return fmt.Sprintf("%s:%s:%s", Project, Game, key)
|
|
}
|
|
func (r *GlobalMgr) Init() {
|
|
r.Client = ddb.RedimoClient()
|
|
|
|
key := r.getKey(GLOBAL_PLAYERUUID)
|
|
val, err := r.GET(key)
|
|
if err != nil {
|
|
logger.Logger.Warnf("GlobalMgr Init err: %v", err)
|
|
//这里表示表不存在,不影响后续执行
|
|
//return
|
|
}
|
|
oldUid := val.Int()
|
|
if oldUid == 0 {
|
|
r.globalUUID[key] = 1000000000
|
|
r.dirty = true
|
|
} else {
|
|
r.globalUUID[key] = uint64(oldUid)
|
|
}
|
|
}
|
|
func (r *GlobalMgr) GetUUID() uint64 {
|
|
rwMu.Lock()
|
|
defer rwMu.Unlock()
|
|
key := r.getKey(GLOBAL_PLAYERUUID)
|
|
r.globalUUID[key]++
|
|
r.dirty = true
|
|
newUid := r.globalUUID[key]
|
|
_, err := r.SET(key, newUid)
|
|
if err != nil {
|
|
logger.Logger.Warnf("GlobalMgr GetUUID err: %v", err)
|
|
}
|
|
return newUid
|
|
}
|
|
func (r *GlobalMgr) saveUUID() {
|
|
if r.dirty {
|
|
r.dirty = false
|
|
key := r.getKey(GLOBAL_PLAYERUUID)
|
|
if oldUid, ok := r.globalUUID[key]; ok {
|
|
_, err := r.SET(key, oldUid)
|
|
if err != nil {
|
|
r.dirty = true
|
|
logger.Logger.Errorf("GlobalMgr SET redimoClient error: %v", err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
func (r *GlobalMgr) Update() {
|
|
//r.saveUUID()
|
|
}
|
|
func (r *GlobalMgr) Shutdown() {
|
|
//logger.Logger.Infof("===== saveData ======== [%v] Shutdown", r.ModuleName())
|
|
//r.saveUUID()
|
|
}
|
|
|
|
func init() {
|
|
module.RegisteModule(GlobalMgrSington, time.Hour, 0)
|
|
}
|