goProject/trunk/framework/managecenterMgr/managecenter.go
皮蛋13361098506 1b77f62820 初始化项目
2025-01-06 16:01:02 +08:00

138 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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))
}