133 lines
4.8 KiB
Go
133 lines
4.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"go.etcd.io/etcd/client/v3"
|
|
"mongo.games.com/goserver/core/logger"
|
|
|
|
"mongo.games.com/game/etcd"
|
|
hallproto "mongo.games.com/game/protocol/gamehall"
|
|
"mongo.games.com/game/protocol/webapi"
|
|
)
|
|
|
|
func init() {
|
|
// 平台配置
|
|
etcd.Register(etcd.ETCDKEY_PLATFORM_PREFIX, webapi.Platform{}, platformConfigEvent)
|
|
// 游戏场次配置
|
|
etcd.Register(etcd.ETCDKEY_GAMECONFIG_PREFIX, webapi.GameFree{}, platformConfigEvent)
|
|
// 超管平台游戏开关
|
|
etcd.Register(etcd.ETCDKEY_GAME_CONFIG_GLOBAL, webapi.GameConfigGlobal{}, platformConfigEvent)
|
|
// 平台包数据
|
|
etcd.Register(etcd.ETCDKEY_PACKAGE_PREFIX, webapi.AppInfo{}, platformConfigEvent)
|
|
// 客户端游戏入口开关
|
|
etcd.Register(etcd.ETCDKEY_PACKAGE_ENTRYSWITCH, webapi.EntrySwitch{}, platformConfigEvent)
|
|
// 公告
|
|
etcd.Register(etcd.ETCDKEY_GAME_NOTICE, webapi.CommonNoticeList{}, platformConfigEvent)
|
|
// 比赛配置
|
|
etcd.Register(etcd.ETCDKEY_GAME_MATCH, webapi.GameMatchDateList{}, platformConfigEvent)
|
|
// 个人水池配置
|
|
etcd.Register(etcd.ETCDKEY_PLAYERPOOL, webapi.PlayerPool{}, platformConfigEvent)
|
|
// 商品兑换
|
|
etcd.Register(etcd.ETCDKEY_SHOP_EXCHANGE, webapi.ExchangeShopList{}, platformConfigEvent)
|
|
// 商城商品
|
|
etcd.Register(etcd.ETCDKEY_SHOP_ITEM, webapi.ItemShopList{}, platformConfigEvent)
|
|
// 集卡活动
|
|
etcd.Register(etcd.ETCDKEY_ACT_Collect, webapi.WelfareCollectConfig{}, platformConfigEvent)
|
|
}
|
|
|
|
func platformConfigEvent(ctx context.Context, completeKey string, isInit bool, event *clientv3.Event, data interface{}) {
|
|
if event.Type == clientv3.EventTypeDelete {
|
|
return
|
|
}
|
|
|
|
if data == nil {
|
|
return
|
|
}
|
|
|
|
switch config := data.(type) {
|
|
case *webapi.WelfareCollectConfig:
|
|
WelfareMgrSington.UpdateCollectConfig(config)
|
|
case *webapi.ItemShopList:
|
|
ShopMgrSington.UpdateItemShop(config)
|
|
case *webapi.ExchangeShopList:
|
|
ShopMgrSington.UpExShop(config)
|
|
case *webapi.PlayerPool:
|
|
PlatformMgrSingleton.GetConfig(config.Platform).PlayerPool = config
|
|
case *webapi.EntrySwitch:
|
|
PlatformMgrSingleton.GetConfig(config.Platform).EntrySwitch = config
|
|
PlatformMgrSingleton.ChangeEntrySwitch(config.Platform, config)
|
|
case *webapi.CommonNoticeList:
|
|
PlatformMgrSingleton.GetConfig(config.Platform).CommonNotices = config
|
|
if !isInit {
|
|
// 通知公共变更
|
|
for _, v := range PlayerMgrSington.playerOfPlatform[config.Platform] {
|
|
if v != nil && v.IsOnLine() {
|
|
v.SendToClient(int(hallproto.GameHallPacketID_PACKET_SC_NoticeChange), &hallproto.SCNoticeChange{})
|
|
}
|
|
}
|
|
}
|
|
case *webapi.GameConfigGlobal:
|
|
if isInit {
|
|
for _, v := range config.GetGameStatus() {
|
|
gameId := v.GetGameId()
|
|
status := v.GetStatus()
|
|
PlatformMgrSingleton.GetGlobalConfig().GameStatus[gameId] = status
|
|
}
|
|
} else {
|
|
cfgs := make([]*hallproto.GameConfig1, 0)
|
|
for _, v := range config.GetGameStatus() {
|
|
gameId := v.GetGameId() // gamefreeid
|
|
status := v.GetStatus()
|
|
if PlatformMgrSingleton.GetGlobalConfig().GameStatus[gameId] != status {
|
|
cfgs = append(cfgs, &hallproto.GameConfig1{
|
|
LogicId: gameId,
|
|
Status: status,
|
|
})
|
|
}
|
|
PlatformMgrSingleton.GetGlobalConfig().GameStatus[gameId] = status
|
|
}
|
|
PlatformMgrSingleton.ChangeGameStatus(cfgs)
|
|
}
|
|
case *webapi.Platform:
|
|
if isInit {
|
|
PlatformMgrSingleton.CreateDefaultPlatform()
|
|
}
|
|
PlatformMgrSingleton.UpsertPlatform(config.PlatformName, config.Isolated, config.Disabled, config.Id,
|
|
config.CustomService, config.BindOption, config.ServiceFlag, config.UpgradeAccountGiveCoin,
|
|
config.NewAccountGiveCoin, config.PerBankNoLimitAccount, config.ExchangeMin, config.ExchangeLimit,
|
|
config.ExchangeTax, config.ExchangeFlow, config.ExchangeFlag, config.SpreadConfig, config.VipRange, "",
|
|
nil, config.VerifyCodeType, nil /*config.ThirdGameMerchant,*/, config.CustomType,
|
|
false, config.NeedSameName, config.ExchangeForceTax, config.ExchangeGiveFlow, config.ExchangeVer,
|
|
config.ExchangeBankMax, config.ExchangeAlipayMax, 0, config.PerBankNoLimitName, config.IsCanUserBindPromoter,
|
|
config.UserBindPromoterPrize, false, config.ExchangeMultiple, false, config.MerchantKey,
|
|
config.BindTelReward)
|
|
case *webapi.GameFree:
|
|
var err error
|
|
s := strings.TrimPrefix(completeKey, etcd.ETCDKEY_GAMECONFIG_PREFIX)
|
|
arr := strings.Split(s, "/")
|
|
if len(arr) > 1 {
|
|
pltId := arr[0]
|
|
if err == nil {
|
|
PlatformMgrSingleton.UpsertGameFree(pltId, config)
|
|
}
|
|
}
|
|
case *webapi.AppInfo:
|
|
if config.PlatformId == 0 {
|
|
config.PlatformId = int32(DefaultPlatformInt)
|
|
}
|
|
PlatformMgrSingleton.GetGlobalConfig().PackageList[config.PackageName] = config
|
|
PlatformMgrSingleton.GetGlobalConfig().PackageList[config.BundleId] = config
|
|
case *webapi.GameMatchDateList:
|
|
if isInit {
|
|
TournamentMgr.UpdateData(true, config)
|
|
} else {
|
|
TournamentMgr.UpdateData(false, config)
|
|
}
|
|
|
|
default:
|
|
logger.Logger.Errorf("etcd completeKey:%s, Not processed", completeKey)
|
|
}
|
|
}
|