156 lines
3.8 KiB
Go
156 lines
3.8 KiB
Go
|
|
package gameServerMgr
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"crypto/tls"
|
|||
|
|
"encoding/json"
|
|||
|
|
"fmt"
|
|||
|
|
"strconv"
|
|||
|
|
|
|||
|
|
. "Framework/managecenterModel"
|
|||
|
|
"goutil/webUtil"
|
|||
|
|
"goutil/zlibUtil"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 区服激活地址后缀
|
|||
|
|
const ActivateServer_URL_SUFFIX string = "/API/ServerActivate.ashx"
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
mManageCenterServerAPIUrl string
|
|||
|
|
mIsInit bool = true
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 解析从ManagecenterServer中获取的服务器相关数据
|
|||
|
|
func ParseInfoFromManageCenterServer(serverGroupId int32, data string) {
|
|||
|
|
var deserializedData map[string]interface{}
|
|||
|
|
err := json.Unmarshal([]byte(data), &deserializedData)
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析服务器组
|
|||
|
|
var serverGroup *ServerGroup
|
|||
|
|
err = json.Unmarshal([]byte(deserializedData["ServerGroupInfo"].(string)), &serverGroup)
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析合作商
|
|||
|
|
var partnerList []*Partner
|
|||
|
|
err = json.Unmarshal([]byte(deserializedData["PartnerList"].(string)), &partnerList)
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析服务器列表
|
|||
|
|
var serverList []*Server
|
|||
|
|
err = json.Unmarshal([]byte(deserializedData["ServerList"].(string)), &serverList)
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析资源包
|
|||
|
|
var resourceList []*ResourceVersion
|
|||
|
|
err = json.Unmarshal([]byte(deserializedData["ResourceVersionList"].(string)), &resourceList)
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析大区
|
|||
|
|
var areaList []*Area
|
|||
|
|
err = json.Unmarshal([]byte(deserializedData["AreaList"].(string)), &areaList)
|
|||
|
|
if err != nil {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//判断是否需要更新数据(如果ServerGroupId不匹配,则不解析数据)
|
|||
|
|
if serverGroupId != serverGroup.Id {
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//缓存服务器组
|
|||
|
|
ParseServerGroupInfo(serverGroup)
|
|||
|
|
|
|||
|
|
//缓存合作商
|
|||
|
|
ParsePartnerInfo(partnerList)
|
|||
|
|
|
|||
|
|
//缓存合作商对应的充值配置
|
|||
|
|
ParseChargeConfigInfo(partnerList)
|
|||
|
|
|
|||
|
|
//缓存服务器
|
|||
|
|
ParseServerInfo(serverList)
|
|||
|
|
|
|||
|
|
//缓存资源包
|
|||
|
|
ParseResourceVersionInfo(resourceList)
|
|||
|
|
|
|||
|
|
//缓存大区
|
|||
|
|
ParseAreaInfo(areaList)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 激活服务器
|
|||
|
|
func ActiveServer(manageCenterServerAPIUrl string, serverGroupId int32) error {
|
|||
|
|
if len(manageCenterServerAPIUrl) == 0 {
|
|||
|
|
return fmt.Errorf("ManageCenterServerAPI地址不能为空")
|
|||
|
|
}
|
|||
|
|
mManageCenterServerAPIUrl = manageCenterServerAPIUrl
|
|||
|
|
|
|||
|
|
//定义参数
|
|||
|
|
requestParamMap := make(map[string]string, 0)
|
|||
|
|
requestParamMap["ServerGroupID"] = strconv.Itoa(int(serverGroupId))
|
|||
|
|
|
|||
|
|
//构造请求url
|
|||
|
|
url := fmt.Sprintf("%s/%s", mManageCenterServerAPIUrl, ActivateServer_URL_SUFFIX)
|
|||
|
|
|
|||
|
|
//请求url,请求头
|
|||
|
|
header := webUtil.GetFormHeader()
|
|||
|
|
transport := webUtil.NewTransport()
|
|||
|
|
transport.DisableKeepAlives = true
|
|||
|
|
transport.TLSClientConfig = &tls.Config{
|
|||
|
|
InsecureSkipVerify: true, //关闭证书校验
|
|||
|
|
}
|
|||
|
|
transport = webUtil.GetTimeoutTransport(transport, 30)
|
|||
|
|
|
|||
|
|
statusCode, returnBytes, err := webUtil.PostMapData(url, requestParamMap, header, transport)
|
|||
|
|
//statusCode, returnBytes, err := webUtil.PostMapData(url, requestParamMap, header, nil)
|
|||
|
|
if err != nil {
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
if statusCode != 200 {
|
|||
|
|
return fmt.Errorf("StatusCode:%d", statusCode)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解压缩
|
|||
|
|
retBytes, err1 := zlibUtil.Decompress(returnBytes)
|
|||
|
|
if err1 != nil {
|
|||
|
|
return err1
|
|||
|
|
}
|
|||
|
|
// 解析返回值
|
|||
|
|
returnObj := new(ReturnObject)
|
|||
|
|
if err = json.Unmarshal(retBytes, &returnObj); err != nil {
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 判断返回状态是否为成功
|
|||
|
|
if returnObj.Code != 0 {
|
|||
|
|
return fmt.Errorf("code:%d,Message:%s", returnObj.Code, returnObj.Message)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//解析得到的数据
|
|||
|
|
ParseInfoFromManageCenterServer(serverGroupId, returnObj.Data.(string))
|
|||
|
|
|
|||
|
|
//获取白名单
|
|||
|
|
GetWhiteListFromManageCenterServer()
|
|||
|
|
|
|||
|
|
//如果是初始化,则开启白名单刷新线程。避免游戏客户端刷新数据的时候重复开启线程
|
|||
|
|
if mIsInit {
|
|||
|
|
//启动白名单数据刷新线程
|
|||
|
|
StartRefreshWhiteListTread()
|
|||
|
|
|
|||
|
|
//启动刷新MC系统配置
|
|||
|
|
StartRefreshSysConfigTread()
|
|||
|
|
//初始化修改为fasle
|
|||
|
|
mIsInit = false
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return nil
|
|||
|
|
}
|