game_sync/worldsrv/etcdmgr.go

769 lines
24 KiB
Go

package main
import (
"context"
"encoding/json"
"strconv"
"strings"
"time"
"go.etcd.io/etcd/client/v3"
"mongo.games.com/game/common"
"mongo.games.com/game/etcd"
"mongo.games.com/game/model"
"mongo.games.com/game/proto"
loginproto "mongo.games.com/game/protocol/login"
webapiproto "mongo.games.com/game/protocol/webapi"
"mongo.games.com/goserver/core/logger"
)
// EtcdMgrSington etcd数据读取
// Deprecated: use [etcd] instead
// 使用 etcd.Register 代替
// todo EtcdMgrSington 用新方法替换
var EtcdMgrSington = &EtcdMgr{
Client: &etcd.Client{},
}
type EtcdMgr struct {
*etcd.Client
}
// 加载组配置
func (this *EtcdMgr) InitGameGroup() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_GROUPCONFIG_PREFIX)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_GROUPCONFIG_PREFIX)
if err == nil {
for i := int64(0); i < res.Count; i++ {
var value webapiproto.GameConfigGroup
err = proto.Unmarshal(res.Kvs[i].Value, &value)
if err == nil {
PlatformGameGroupMgrSington.UpsertGameGroup(&value)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_GROUPCONFIG_PREFIX, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_GROUPCONFIG_PREFIX, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_GROUPCONFIG_PREFIX, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
var value webapiproto.GameConfigGroup
err := proto.Unmarshal(ev.Kv.Value, &value)
if err == nil {
PlatformGameGroupMgrSington.UpsertGameGroup(&value)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_GROUPCONFIG_PREFIX, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载黑名单配置
func (this *EtcdMgr) InitBlackList() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_BLACKLIST_PREFIX)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_BLACKLIST_PREFIX)
if err == nil {
for i := int64(0); i < res.Count; i++ {
var value BlackInfoApi
err = json.Unmarshal(res.Kvs[i].Value, &value)
if err == nil {
BlackListMgrSington.InitBlackInfo(&value)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_BLACKLIST_PREFIX, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_BLACKLIST_PREFIX, err)
}
}
return -1
}
//@test code
//go func() {
// for {
// i := int32(1)
// data := BlackInfoApi{
// Id: i,
// Snid: i,
// Creator: rand.Int31(),
// }
// buf, err := json.Marshal(data)
// if err == nil {
// key := fmt.Sprintf("%s%d", etcd.ETCDKEY_BLACKLIST_PREFIX, i)
// putResp, err := this.PutValue(key, string(buf))
// if err == nil {
// if putResp.PrevKv != nil {
// logger.Logger.Trace("@etcdtest put", string(putResp.PrevKv.Key), string(putResp.PrevKv.Value))
// }
// //delResp, err := this.DelValue(key)
// //if err == nil {
// // logger.Logger.Trace("@etcdtest del", delResp.Deleted)
// //}
// }
// }
// }
//}()
//@test code
//ETCD中现在只有公共黑名单信息
//如果删除公共黑名单信息使用ETCD删除
//如果删除个人玩家身上的黑名单信息使用API删除
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_BLACKLIST_PREFIX, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
dirs := strings.Split(string(ev.Kv.Key), "/")
n := len(dirs)
if n > 0 {
last := dirs[n-1]
id, err := strconv.Atoi(last)
if err == nil {
if value, exist := BlackListMgrSington.BlackList[int32(id)]; exist {
BlackListMgrSington.RemoveBlackInfo(value.Id, value.Platform)
}
}
}
case clientv3.EventTypePut:
var value BlackInfoApi
err := json.Unmarshal(ev.Kv.Value, &value)
if err == nil {
BlackListMgrSington.UpsertBlackInfo(&value)
if (value.Space & int32(BlackState_Login)) != 0 {
var targetPlayer []*Player //确定用户是否在线
for _, value := range PlayerMgrSington.players {
_, ok := BlackListMgrSington.CheckPlayerInBlack(value.PlayerData, BlackState_Login)
if ok {
targetPlayer = append(targetPlayer, value)
}
}
for _, p := range targetPlayer {
if p.sid != 0 {
p.Kickout(int32(loginproto.SSDisconnectTypeCode_SSDTC_BlackList))
} else {
LoginStateMgrSington.LogoutByAccount(p.AccountId)
}
}
}
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_BLACKLIST_PREFIX, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 初始化代理数据
func (this *EtcdMgr) InitPromoterConfig() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 初始化代理数据 拉取数据:", etcd.ETCDKEY_PROMOTER_PREFIX)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_PROMOTER_PREFIX)
if err == nil {
for i := int64(0); i < res.Count; i++ {
var promoterConfig *PromoterConfig
err = json.Unmarshal(res.Kvs[i].Value, &promoterConfig)
if err == nil {
PromoterMgrSington.AddConfig(promoterConfig)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_PROMOTER_PREFIX, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_PROMOTER_PREFIX, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_PROMOTER_PREFIX, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
dirs := strings.Split(string(ev.Kv.Key), "/")
n := len(dirs)
if n > 0 {
promoterConfig := dirs[n-1]
PromoterMgrSington.RemoveConfigByKey(promoterConfig)
}
/*
var promoterConfig *PromoterConfig
err := json.Unmarshal(ev.Kv.Value, &promoterConfig)
if err == nil {
PromoterMgrSington.RemoveConfigByKey(promoterConfig)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_PROMOTER_PREFIX, err)
}
*/
case clientv3.EventTypePut:
var promoterConfig *PromoterConfig
err := json.Unmarshal(ev.Kv.Value, &promoterConfig)
if err == nil {
PromoterMgrSington.AddConfig(promoterConfig)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_PROMOTER_PREFIX, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载活动give配置
func (this *EtcdMgr) InitPlatformAct() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_GIVE_PREFIX)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_GIVE_PREFIX)
if err == nil {
for i := int64(0); i < res.Count; i++ {
var vipConfig ActGivePlateformConfig
err = json.Unmarshal(res.Kvs[i].Value, &vipConfig)
if err == nil {
ActMgrSington.AddGiveConfig(&vipConfig, vipConfig.Platform)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_GIVE_PREFIX, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_GIVE_PREFIX, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_GIVE_PREFIX, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
var vipConfig ActGivePlateformConfig
err := json.Unmarshal(ev.Kv.Value, &vipConfig)
if err == nil {
ActMgrSington.AddGiveConfig(&vipConfig, vipConfig.Platform)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_GOLDCOME_PREFIX, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载七日签到
func (this *EtcdMgr) InitSign7() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_7SIGN)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_7SIGN)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.Welfare7SignDateList{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateSign7(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_7SIGN, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_7SIGN, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_7SIGN, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.Welfare7SignDateList{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateSign7(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_7SIGN, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载轮盘
func (this *EtcdMgr) InitTurnplate() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_TURNPLATE)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_TURNPLATE)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.WelfareTurnplateDateList{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateTurnplate(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_TURNPLATE, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_TURNPLATE, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_TURNPLATE, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.WelfareTurnplateDateList{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateTurnplate(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_TURNPLATE, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载盲盒
func (this *EtcdMgr) InitBlindBox() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_BLINDBOX)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_BLINDBOX)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.WelfareBlindBoxDataList{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateBlindBox(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_BLINDBOX, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_BLINDBOX, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_BLINDBOX, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.WelfareBlindBoxDataList{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateBlindBox(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_BLINDBOX, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载首充
func (this *EtcdMgr) InitFirstPay() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_FIRSTPAY)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_FIRSTPAY)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.WelfareFirstPayDataList{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateFirstPay(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_FIRSTPAY, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_FIRSTPAY, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_FIRSTPAY, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.WelfareFirstPayDataList{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateFirstPay(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_FIRSTPAY, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载连续充值
func (this *EtcdMgr) InitContinuousPay() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_CONTINUOUSPAY)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_CONTINUOUSPAY)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.WelfareContinuousPayDataList{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateContinuousPay(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_CONTINUOUSPAY, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_CONTINUOUSPAY, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_CONTINUOUSPAY, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.WelfareContinuousPayDataList{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdateContinuousPay(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_CONTINUOUSPAY, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载VIP
func (this *EtcdMgr) InitUpdateVIPcfg() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_VIP_CFG)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_VIP_CFG)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.VIPcfgDataList{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
VipMgrSington.UpdateVIPcfg(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_VIP_CFG, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_VIP_CFG, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_VIP_CFG, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.VIPcfgDataList{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
VipMgrSington.UpdateVIPcfg(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_VIP_CFG, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载段位配置
func (this *EtcdMgr) InitUpdateChessRankcfg() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_CHESSRANK_CFG)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_CHESSRANK_CFG)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.ChessRankcfgData{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
ChessRankMgrSington.UpdateChessRankConfig(cfg)
logger.Logger.Tracef("ChessRankConfig %v", cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_CHESSRANK_CFG, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_CHESSRANK_CFG, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_CHESSRANK_CFG, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.ChessRankcfgData{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
ChessRankMgrSington.UpdateChessRankConfig(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_CHESSRANK_CFG, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载抽手机活动
func (this *EtcdMgr) InitPhoneLottery() {
initFunc := func() int64 {
if model.GameParamData.UseEtcd {
logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_ACT_PHONELOTTERY)
res, err := this.GetValueWithPrefix(etcd.ETCDKEY_ACT_PHONELOTTERY)
if err == nil {
for i := int64(0); i < res.Count; i++ {
cfg := &webapiproto.WelfarePhoneLotteryStatus{}
//msg := &webapi.ASSrvCtrlClose{}
err = proto.Unmarshal(res.Kvs[i].Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdatePhoneLotteryStatus(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_PHONELOTTERY, cfg.Platform, err)
}
}
if res.Header != nil {
return res.Header.Revision
}
} else {
logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_ACT_PHONELOTTERY, err)
}
}
return -1
}
// 监控数据变动
watchFunc := func(ctx context.Context, revision int64) {
this.GoWatch(ctx, revision, etcd.ETCDKEY_ACT_PHONELOTTERY, func(res clientv3.WatchResponse) error {
for _, ev := range res.Events {
switch ev.Type {
case clientv3.EventTypeDelete:
case clientv3.EventTypePut:
cfg := &webapiproto.WelfarePhoneLotteryStatus{}
err := proto.Unmarshal(ev.Kv.Value, cfg)
if err == nil && cfg.Platform != "" {
WelfareMgrSington.UpdatePhoneLotteryStatus(cfg)
} else {
logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_ACT_PHONELOTTERY, cfg.Platform, err)
}
}
}
return nil
})
}
this.InitAndWatch(initFunc, watchFunc)
}
// 加载 调控黑白名单
//func (this *EtcdMgr) InitWBCtrlCFG() {
// initFunc := func() int64 {
// if model.GameParamData.UseEtcd {
// logger.Logger.Info("ETCD 拉取数据:", etcd.ETCDKEY_WBCtrl_CFG)
// res, err := this.GetValueWithPrefix(etcd.ETCDKEY_WBCtrl_CFG)
// if err == nil {
// for i := int64(0); i < res.Count; i++ {
// cfg := &webapi_proto.WbCtrlCfg{}
// err = proto.Unmarshal(res.Kvs[i].Value, cfg)
// if err == nil && cfg.Platform != "" {
// WBCtrlCfgMgr.UpdateConfig(cfg)
// } else {
// logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_WBCtrl_CFG, cfg.Platform, err)
// }
// }
// if res.Header != nil {
// return res.Header.Revision
// }
// } else {
// logger.Logger.Errorf("etcd get WithPrefix(%v) panic:%v", etcd.ETCDKEY_WBCtrl_CFG, err)
// }
// }
// return -1
// }
//
// // 监控数据变动
// watchFunc := func(ctx context.Context, revision int64) {
// this.GoWatch(ctx, revision, etcd.ETCDKEY_WBCtrl_CFG, func(res clientv3.WatchResponse) error {
// for _, ev := range res.Events {
// switch ev.Type {
// case clientv3.EventTypeDelete:
// case clientv3.EventTypePut:
// cfg := &webapi_proto.WbCtrlCfg{}
// err := proto.Unmarshal(ev.Kv.Value, cfg)
// if err == nil && cfg.Platform != "" {
// WBCtrlCfgMgr.UpdateConfig(cfg)
// } else {
// logger.Logger.Errorf("etcd desc WithPrefix(%v) Platform %v panic:%v", etcd.ETCDKEY_WBCtrl_CFG, cfg.Platform, err)
// }
// }
// }
// return nil
// })
// }
//
// this.InitAndWatch(initFunc, watchFunc)
//}
func (this *EtcdMgr) Init() {
if model.GameParamData.UseEtcd {
logger.Logger.Infof("EtcdClient开始连接url:%v;etcduser:%v;etcdpwd:%v", common.CustomConfig.GetStrings("etcdurl"), common.CustomConfig.GetString("etcduser"), common.CustomConfig.GetString("etcdpwd"))
err := this.Open(common.CustomConfig.GetStrings("etcdurl"), common.CustomConfig.GetString("etcduser"), common.CustomConfig.GetString("etcdpwd"), time.Minute)
if err != nil {
logger.Logger.Tracef("EtcdMgr.Open err:%v", err)
return
}
}
}
func (this *EtcdMgr) Shutdown() {
this.Close()
}
func (this *EtcdMgr) Reset() {
this.Close()
this.Init()
this.ReInitAndWatchAll()
}