game_sync/gamesrv/slotspkg/internal/generic/global/globalmgr.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)
}