769 lines
24 KiB
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()
|
|
}
|