156 lines
3.8 KiB
Plaintext
156 lines
3.8 KiB
Plaintext
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
|
||
}
|