130 lines
3.3 KiB
Go
130 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"mongo.games.com/game/common"
|
|
"mongo.games.com/game/model"
|
|
"mongo.games.com/game/proto"
|
|
webapi_proto "mongo.games.com/game/protocol/webapi"
|
|
"mongo.games.com/game/srvdata"
|
|
"mongo.games.com/game/webapi"
|
|
"mongo.games.com/goserver/core/logger"
|
|
)
|
|
|
|
type PlatformGameGroupObserver interface {
|
|
OnGameGroupUpdate(oldCfg, newCfg *webapi_proto.GameConfigGroup)
|
|
}
|
|
|
|
var PlatformGameGroupMgrSington = &PlatformGameGroupMgr{
|
|
groups: make(map[int32]*webapi_proto.GameConfigGroup),
|
|
}
|
|
|
|
type PlatformGameGroupMgr struct {
|
|
groups map[int32]*webapi_proto.GameConfigGroup
|
|
observers []PlatformGameGroupObserver
|
|
}
|
|
|
|
func (this *PlatformGameGroupMgr) RegisteObserver(observer PlatformGameGroupObserver) {
|
|
for _, ob := range this.observers {
|
|
if ob == observer {
|
|
return
|
|
}
|
|
}
|
|
this.observers = append(this.observers, observer)
|
|
}
|
|
|
|
func (this *PlatformGameGroupMgr) UnregisteObserver(observer PlatformGameGroupObserver) {
|
|
for i, ob := range this.observers {
|
|
if ob == observer {
|
|
count := len(this.observers)
|
|
if i == 0 {
|
|
this.observers = this.observers[1:]
|
|
} else if i == count-1 {
|
|
this.observers = this.observers[:count-1]
|
|
} else {
|
|
arr := this.observers[:i]
|
|
arr = append(arr, this.observers[i+1:]...)
|
|
this.observers = arr
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func (this *PlatformGameGroupMgr) GetGameGroup(groupId int32) *webapi_proto.GameConfigGroup {
|
|
if g, exist := this.groups[groupId]; exist {
|
|
return g
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (this *PlatformGameGroupMgr) LoadGameGroup() {
|
|
//不使用etcd的情况下走api获取
|
|
if model.GameParamData.UseEtcd {
|
|
EtcdMgrSington.InitGameGroup()
|
|
} else {
|
|
//获取平台游戏组信息
|
|
logger.Logger.Trace("API_GetGameGroupData")
|
|
buf, err := webapi.API_GetGameGroupData(common.GetAppId())
|
|
if err == nil {
|
|
pcdr := &webapi_proto.ASGameConfigGroup{}
|
|
err = proto.Unmarshal(buf, pcdr)
|
|
if err == nil && pcdr.Tag == webapi_proto.TagCode_SUCCESS {
|
|
gameCfgGroup := pcdr.GetGameConfigGroup()
|
|
for _, value := range gameCfgGroup {
|
|
groupId := value.GetId()
|
|
vDbGameFree := value.GetDbGameFree()
|
|
|
|
dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(value.LogicId)
|
|
if dbGameFree == nil {
|
|
continue
|
|
}
|
|
if vDbGameFree == nil {
|
|
vDbGameFree = dbGameFree
|
|
} else {
|
|
CopyDBGameFreeField(dbGameFree, vDbGameFree)
|
|
}
|
|
|
|
this.groups[groupId] = value
|
|
logger.Logger.Trace("PlatformGameGroup data:", value)
|
|
}
|
|
} else {
|
|
logger.Logger.Error("Unmarshal PlatformGameGroup data error:", err)
|
|
}
|
|
} else {
|
|
logger.Logger.Error("Get PlatformGameGroup data error:", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (this *PlatformGameGroupMgr) UpsertGameGroup(conf *webapi_proto.GameConfigGroup) {
|
|
if conf == nil {
|
|
return
|
|
}
|
|
dbGameFree := srvdata.PBDB_GameFreeMgr.GetData(conf.GetLogicId())
|
|
if dbGameFree == nil {
|
|
return
|
|
}
|
|
if conf.DbGameFree == nil {
|
|
conf.DbGameFree = dbGameFree
|
|
} else {
|
|
CopyDBGameFreeField(dbGameFree, conf.DbGameFree)
|
|
}
|
|
old, ok := this.groups[conf.GetId()]
|
|
|
|
//更新相关配置
|
|
this.groups[conf.GetId()] = conf
|
|
//发布更新事件
|
|
if ok && old != nil {
|
|
this.OnGameGroupUpdate(old, conf)
|
|
}
|
|
}
|
|
|
|
func (this *PlatformGameGroupMgr) OnGameGroupUpdate(oldCfg, newCfg *webapi_proto.GameConfigGroup) {
|
|
for _, observer := range this.observers {
|
|
observer.OnGameGroupUpdate(oldCfg, newCfg)
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
|
|
}
|