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