goProject/trunk/framework/managecenterModel/serverGroup.go

185 lines
4.9 KiB
Go
Raw Normal View History

2025-01-06 16:01:02 +08:00
package managecenterModel
import (
"encoding/json"
"fmt"
"strings"
"time"
"goutil/stringUtil"
)
// 服务器组
type ServerGroup struct {
// 服务器组Id
Id int32 `json:"GroupID"`
// 服务器组名称
Name string `json:"GroupName"`
// 服务器组Url
Url string `json:"GroupUrl"`
// 聊天服务器Url
ChatServerUrl string `json:"ChatServerUrl"`
// 数据库连接配置
DBConnectionConfig string `json:"DBConnectionConfig"`
// 服务器组状态1正常2维护
GroupState int32 `json:"GroupState"`
// 服务器组热度1正常2新服3推荐
GroupHeat int32 `json:"GroupHeat"`
// 服务器组负载1正常2火爆
GroupLoad int32 `json:"GroupLoad"`
// 服务器开服时间对应的Unix时间戳
OpenTimeTick int64 `json:OpenTimeTick`
// 服务器组Ip(外网IP;内网IP;回调GS内网端口)
Ip string `json:"GroupIp"`
// 正式服或测试服1正式服2测试服
OfficialOrTest int32 `json:"OfficialOrTest"`
// 服务器组类型
Type int32 `json:"GroupType"`
// 服务器组排序
Order int32 `json:"GroupOrder"`
// 服务器组维护开始时间对应的时间戳
MaintainBeginTimeTick int64 `json:MaintainBeginTimeTick`
// 维护持续分钟数
MaintainMinutes int32 `json:"MaintainMinutes"`
// 维护信息
MaintainMessage string `json:"MaintainMessage"`
// 游戏监听地址
GameListenAddr string `json:"GameListenAddr"`
// 回调监听地址
CallbackListenAddr string `json:"CallbackListenAddr"`
// 外网回调地址
ExternalCallbackUrl string `json:"ExternalCallbackUrl"`
// 内网回调地址
InternalCallbackUrl string `json:"InternalCallbackUrl"`
// 是否在主群组(机房)内
IsInMainGroup bool `json:"IsInMainGroup"`
// 监控端口
GopsPort string `json:"GopsPort"`
}
// 排序方法(默认按照Id进行升序排序)
// target:另一个服务器组对象
// 是否是小于
func (this *ServerGroup) SortByIdAsc(target *ServerGroup) bool {
return this.Id < target.Id
}
// 按照开服时间进行升序排序
// target:另一个服务器组对象
// 是否是小于
func (this *ServerGroup) SortByOpenTimeAsc(target *ServerGroup) bool {
return this.OpenTimeTick < target.OpenTimeTick
}
// 获取数据库配置对象
// 返回值:
// 数据库配置对象
// 错误对象
func (this *ServerGroup) GetDBConfig() (*DBConnectionConfig, error) {
var dbConfig *DBConnectionConfig
if err := json.Unmarshal([]byte(this.DBConnectionConfig), &dbConfig); err != nil {
return nil, err
}
return dbConfig, nil
}
// 获取ip列表
// 返回值:
// ip列表
func (this *ServerGroup) GetIPList() []string {
return stringUtil.Split(this.Ip, nil)
}
// 服务器组是否开启
// 返回值:
// 是否开启
func (this *ServerGroup) IsOpen() bool {
return this.OpenTimeTick < time.Now().Unix()
}
// 获取游戏服务器的回调地址
// suffix:地址后缀
// 返回值
// 游戏服务器的回调地址
func (this *ServerGroup) GetGSCallbackUrl(suffix string) string {
// 如果是在主群组(机房)内,则使用内网地址,否则使用外网地址
url := ""
if this.IsInMainGroup {
url = this.InternalCallbackUrl
} else {
url = this.ExternalCallbackUrl
}
if url != "" {
if strings.HasSuffix(url, "/") {
return fmt.Sprintf("%s%s", url, suffix)
} else {
return fmt.Sprintf("%s/%s", url, suffix)
}
}
// 兼容旧的ManageCenter版本
ipList := this.GetIPList()
// 外网IP;内网IP;回调GS内网端口如果数量小于3则直接使用配置的GroupUrl否则使用第3个值
if len(ipList) < 3 {
if strings.HasSuffix(this.Url, "/") {
return fmt.Sprintf("%s%s", this.Url, suffix)
} else {
return fmt.Sprintf("%s/%s", this.Url, suffix)
}
} else {
return fmt.Sprintf("http://%s:%s/%s", ipList[1], ipList[2], suffix)
}
}
// 判断服务器组是否相同
// target:目标服务器组
// 是否相同
func (this *ServerGroup) IsEqual(target *ServerGroup) bool {
return this.Id == target.Id &&
this.Name == target.Name &&
this.Url == target.Url &&
this.ChatServerUrl == target.ChatServerUrl &&
this.DBConnectionConfig == target.DBConnectionConfig &&
this.GroupState == target.GroupState &&
this.GroupHeat == target.GroupHeat &&
this.GroupLoad == target.GroupLoad &&
this.OpenTimeTick == target.OpenTimeTick &&
this.Ip == target.Ip &&
this.OfficialOrTest == target.OfficialOrTest &&
this.Type == target.Type &&
this.Order == target.Order &&
this.MaintainBeginTimeTick == target.MaintainBeginTimeTick &&
this.MaintainMinutes == target.MaintainMinutes &&
this.MaintainMessage == target.MaintainMessage &&
this.GameListenAddr == target.GameListenAddr &&
this.CallbackListenAddr == target.CallbackListenAddr &&
this.ExternalCallbackUrl == target.ExternalCallbackUrl &&
this.InternalCallbackUrl == target.InternalCallbackUrl &&
this.IsInMainGroup == target.IsInMainGroup &&
this.GopsPort == target.GopsPort
}