138 lines
3.3 KiB
Plaintext
138 lines
3.3 KiB
Plaintext
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))
|
||
}
|