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