goProject/.svn/pristine/d4/d4dab9d46311ec1a7fb33f7af3bf321e12849b3e.svn-base

138 lines
3.3 KiB
Plaintext
Raw Normal View History

2025-01-06 16:21:36 +08:00
package managecenterMgr
import (
"fmt"
"strings"
"time"
"Framework/goroutineMgr"
"Framework/initMgr"
"Framework/managecenterModel"
"goutil/logUtil"
)
var (
mcAPIUrl string
mcDataSwitchObj *ManageCenterDataSwitch
initSuccessObj = initMgr.NewInitSuccess("managecenterMgr")
//数据变更通知回调
mDataChangeCallBackFunc func(managecenterModel.MCDataType) error
)
// 注册初始化成功的通道
// name:模块名称
// ch:通道对象
func RegisterInitSuccess(name string, ch chan bool) {
initSuccessObj.Register(name, ch)
}
// 注册MC数据变更通知回调函数
// handler:回调方法
func RegisterDataChangeCallBackFunc(handler func(managecenterModel.MCDataType) error) {
mDataChangeCallBackFunc = handler
}
// Start ...启动ManageCenter管理器
// manageCenterAPIUrl:ManageCenter对外提供的API
// manageCenterDataSwitchObj:ManageCenter数据获取开关对象
func Start(manageCenterAPIUrl string, manageCenterDataSwitchObj *ManageCenterDataSwitch) {
mcAPIUrl = manageCenterAPIUrl
mcDataSwitchObj = manageCenterDataSwitchObj
// 先初始化一次数据
if err := reload(true); err != nil {
panic(err)
}
// 通知初始化成功
initSuccessObj.Notify()
// 定时刷新数据
go func() {
goroutineName := "managecenterMgr.timelyRefresh"
goroutineMgr.Monitor(goroutineName)
defer goroutineMgr.ReleaseMonitor(goroutineName)
for {
// 每5秒刷新一次
time.Sleep(5 * time.Second)
// 刷新服务器组
reload(false)
}
}()
}
// 重新加载/初始化
func reload(isInit bool) error {
var err error
// 加载合作商数据
if mcDataSwitchObj.AllDataSwitch || mcDataSwitchObj.PartnerDataSwitch {
if err = reloadPartner(isInit); err != nil && isInit {
return err
}
}
// 加载服务器数据
if mcDataSwitchObj.AllDataSwitch || mcDataSwitchObj.ServerDataSwitch {
if err = reloadServer(isInit); err != nil && isInit {
return err
}
}
// 加载服务器组数据
if mcDataSwitchObj.AllDataSwitch || mcDataSwitchObj.ServerGroupDataSwitch {
if err = reloadServerGroup(isInit); err != nil && isInit {
return err
}
}
// 加载资源数据
if mcDataSwitchObj.AllDataSwitch || mcDataSwitchObj.ResourceVersionDataSwitch {
if err = reloadResourceVersion(isInit); err != nil && isInit {
return err
}
}
// 加载玩家白名单数据
if mcDataSwitchObj.AllDataSwitch || mcDataSwitchObj.WhiteListDataSwitch {
if err = reloadWhiteList(isInit); err != nil && isInit {
return err
}
}
// 加载大区数据
if mcDataSwitchObj.AllDataSwitch || mcDataSwitchObj.AreaDataSwitch {
if err = reloadArea(isInit); err != nil && isInit {
return err
}
}
return nil
}
// 获取可访问的ManageCenter地址
// suffix:Url后缀
// 返回值:
// 可访问的ManageCenter地址
func getManageCenterUrl(suffix string) string {
return fmt.Sprintf("%s/%s", strings.TrimRight(mcAPIUrl, "/"), strings.TrimLeft(suffix, "/"))
}
// 回调
// dataType:数据类型
// isInit:是否初始化
func mcDataChangeCallBack(dataType managecenterModel.MCDataType, isInit bool) {
//如果没注册回调函数,或者是数据初始化,则不回调
if mDataChangeCallBackFunc == nil || isInit {
return
}
//回调
err := mDataChangeCallBackFunc(dataType)
logUtil.ErrorLog(fmt.Sprintf("通知回调出错DataType:%d,错误信息为:%s", dataType, err))
}