game_sync/worldsrv/actmgr.go

147 lines
3.2 KiB
Go

package main
import (
"mongo.games.com/game/common"
"mongo.games.com/game/webapi"
"encoding/json"
"time"
"mongo.games.com/game/model"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
)
const ACT_LOGGER = "actmgr"
var ActMgrSington = &ActMgr{
ConfigByPlateform: make(map[string]*ActGivePlateformConfig),
}
// config --------------------------------------------------------
type ActGiveConfig struct {
Tag int32 //赠与类型
IsStop int32 //是否阻止 1阻止 0放开
NeedFlow int32 //需要流水的倍数 0 不计算 其他计算
}
type ActGivePlateformConfig struct {
ActInfo map[string]*ActGiveConfig //奖励信息
findInfo map[int32]*ActGiveConfig //奖励信息
Platform string //平台
}
type ActMgr struct {
ConfigByPlateform map[string]*ActGivePlateformConfig
LastTicket int64
}
func (this *ActMgr) AddGiveConfig(actComeConfig *ActGivePlateformConfig, plateFrom string) {
actComeConfig.findInfo = make(map[int32]*ActGiveConfig)
for _, v := range actComeConfig.ActInfo {
actComeConfig.findInfo[v.Tag] = v
}
this.ConfigByPlateform[plateFrom] = actComeConfig
this.OnConfigChanged(actComeConfig)
}
func (this *ActMgr) RemovePlateFormConfig(plateFrom string) {
_, ok := this.ConfigByPlateform[plateFrom]
if ok {
delete(this.ConfigByPlateform, plateFrom)
}
}
func (this *ActMgr) GetIsNeedGive(plateFrom string, tag int32) bool {
info := this.GetGiveConfig(plateFrom)
if info == nil {
return true
}
if v, ok := info.findInfo[tag]; ok {
if v.IsStop == 1 {
return false
}
}
return true
}
func (this *ActMgr) GetExchangeFlow(plateFrom string, tag int32) int32 {
info := this.GetGiveConfig(plateFrom)
if info == nil {
return 0
}
if v, ok := info.findInfo[tag]; ok {
return v.NeedFlow
}
return 0
}
func (this *ActMgr) GetGiveConfig(plateForm string) *ActGivePlateformConfig {
plateFormConfig, ok := this.ConfigByPlateform[plateForm]
if ok {
return plateFormConfig
}
return nil
}
func (this *ActMgr) OnConfigChanged(actComeConfig *ActGivePlateformConfig) {
}
// //////////////////////////////////////////////////////////////////
// / Module Implement [beg]
// //////////////////////////////////////////////////////////////////
func (this *ActMgr) ModuleName() string {
return "ActMgr"
}
func (this *ActMgr) Init() {
this.LastTicket = time.Now().Unix()
if this.ConfigByPlateform == nil {
this.ConfigByPlateform = make(map[string]*ActGivePlateformConfig)
}
type ApiResult struct {
Tag int
Msg []ActGivePlateformConfig
}
//不使用etcd的情况下走api获取
if !model.GameParamData.UseEtcd {
buff, err := webapi.API_GetActConfig(common.GetAppId())
if err == nil {
ar := ApiResult{}
err = json.Unmarshal(buff, &ar)
if err == nil {
for _, plateformConfig := range ar.Msg {
t := plateformConfig
this.AddGiveConfig(&t, plateformConfig.Platform)
}
} else {
logger.Logger.Error("Unmarshal ActMgr data error:", err, " buff:", string(buff))
}
} else {
logger.Logger.Error("Init ActMgr list failed.")
}
} else {
EtcdMgrSington.InitPlatformAct()
}
}
func (this *ActMgr) Update() {
}
func (this *ActMgr) Shutdown() {
module.UnregisteModule(this)
}
func init() {
module.RegisteModule(ActMgrSington, time.Minute, 0)
}