game_sync/gamesrv/base/slotspoolmanager.go

94 lines
2.4 KiB
Go

package base
import (
"encoding/json"
"fmt"
"time"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"mongo.games.com/goserver/core/task"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
)
var SlotsPoolMgr = &SlotsPoolManager{
SlotsPoolData: make(map[string]interface{}),
SlotsPoolStr: make(map[string]string),
}
type SlotsPoolManager struct {
SlotsPoolData map[string]interface{}
SlotsPoolStr map[string]string
SlotsPoolDBKey string
}
func (this *SlotsPoolManager) GetPool(gamefreeId int32, platform string) string {
key := fmt.Sprintf("%v-%v", gamefreeId, platform)
if str, exist := this.SlotsPoolStr[key]; exist {
return str
}
return ""
}
func (this *SlotsPoolManager) SetPool(gamefreeId int32, platform string, pool interface{}) {
key := fmt.Sprintf("%v-%v", gamefreeId, platform)
this.SlotsPoolData[key] = pool
}
//func (this *SlotsPoolManager) GetSlotsPoolData(gamefreeId int32, platform string) interface{} {
// key := fmt.Sprintf("%v-%v", gamefreeId, platform)
// return this.SlotsPoolData[key]
//}
// //////////////////////////////////////////////////////////////////
// / Module Implement [beg]
// //////////////////////////////////////////////////////////////////
func (this *SlotsPoolManager) ModuleName() string {
return "SlotsPoolManager"
}
func (this *SlotsPoolManager) Init() {
this.SlotsPoolDBKey = fmt.Sprintf("SlotsPoolManager_Srv%v", common.GetSelfSrvId())
data := model.GetStrKVGameData(this.SlotsPoolDBKey)
err := json.Unmarshal([]byte(data), &this.SlotsPoolStr)
if err != nil {
logger.Logger.Error("Unmarshal slots pool error:", err)
}
}
func (this *SlotsPoolManager) Update() {
this.Save()
}
func (this *SlotsPoolManager) Shutdown() {
this.Save()
module.UnregisteModule(this)
}
func (this *SlotsPoolManager) Save() {
//数据先整合
for k, v := range this.SlotsPoolData {
data, err := json.Marshal(v)
if err == nil {
this.SlotsPoolStr[k] = string(data)
}
}
//再保存
buff, err := json.Marshal(this.SlotsPoolStr)
if err == nil {
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
return model.UptStrKVGameData(this.SlotsPoolDBKey, string(buff))
}), nil, "SaveActGoldCome").StartByFixExecutor("UptStrKVGameData")
} else {
logger.Logger.Error("Marshal coin pool error:", err)
}
}
func init() {
module.RegisteModule(SlotsPoolMgr, time.Minute, 0)
}