Files
Main/Assets/GameAssets/Resources/Lua/Logic/ServerList/ServerDataInfo.lua

276 lines
9.6 KiB
Lua
Raw Permalink Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
-- 作者: gzg
-- 日期: 2021-02-25
-- 文件: ServerDataInfo.lua
-- 模块: ServerDataInfo
-- 描述: 服务器数据的信息
------------------------------------------------
local L_INT_MAX = 2147483648
local ServerDataInfo = {
--服务器ID
ServerId = 0,
--真实服务器ID,如果有合服,表示当前服务器登录真实服务器ID.
ReallyServerId = 0,
--展示的服务器ID,
ShowServerId = 0,
--服务名字
Name = "",
--分组类型
GroupType = 0,
--支付回调
PayCallURL = "",
--服务器的顺序号 ,用于排序
ShowOrder = 0,
--服务器的IP地址
Ip = "",
--服务器端口
Port = 0,
--当前服务器的标签
Labels = List:New(),
--当前服务器状态
Status = 0,
--当前服务器的玩家数量
PlayerNum = L_INT_MAX,
--当前服务器总角色的列表
CharacterList = List:New(),
--当前服务器中是否有玩家的角色
HasRole = false,
--是否位登录服务器
IsLoginServer = false,
--隐藏
IsHideServer = false,
--维护状态
IsMaintainServer = false,
--是否新服
IsNewServer = false,
--当前服务器是否爆满
IsFullServer = false,
--是否推荐服
IsRecommendServer = false,
}
function ServerDataInfo:New()
local _m = Utils.DeepCopy(self);
return _m;
end
--解析游戏服务器的json
--{"data":{"servers":[{"group_type":1,"svr_host":"127.0.0.1","svr_id":"20017","svr_idx":"20017","svr_label":"3","svr_name":"本地服务器","svr_pay_callback":"xxx","svr_port":8587,"svr_sort":3,"svr_status":1}]},"state":1}
function ServerDataInfo:ParseGameServerListJson(jsonStr)
Debug.Log("服务器列表字符串:" .. jsonStr);
local _result = List:New();
local _jsonTable = Json.decode(jsonStr);
if _jsonTable and _jsonTable.data then
local _serArray = _jsonTable.data.servers;
if _serArray and #_serArray > 0 then
for _, value in ipairs(_serArray) do
if value then
_result:Add(ServerDataInfo:New():ParseGameServerNode(value))
end
end
else
Debug.LogError("游戏服务器为空!" .. tostring(jsonStr));
end
else
Debug.LogError("获取的游戏服务器Json串没有数据:" .. tostring(jsonStr));
end
--根据ShowOder进行排序 -- 从小往大排序
_result:Sort(function(a,b) return a.ShowOrder < b.ShowOrder end );
return _result;
end
--解析服务器列表的Json字符串
--{"data":{"lg_server":[{"svr_host":"10.0.0.59","svr_name":"内网登陆服","svr_port":8888}],"servers":[{"svr_sort":0,"svr_host":"10.0.0.60","svr_name":"客户端测试服","svr_id":20016,"group_type":1,"svr_label":"0","svr_status":1,"svr_port":8586}]}}
function ServerDataInfo:ParseServersJsonNew(jsonStr)
Debug.Log("服务器列表字符串:" .. jsonStr);
local _serverList;
local _lgServer;
local _jsonTable = Json.decode(jsonStr);
if _jsonTable and _jsonTable.data then
_serverList = ServerDataInfo:ParseGameServerListNode(_jsonTable.data.servers);
_lgServer = ServerDataInfo:New():ParseAgentServerListNode(_jsonTable.data.lg_server)
else
Debug.LogError("获取的游戏服务器Json串没有数据:" .. tostring(jsonStr));
end
return _serverList,_lgServer;
end
--解析网关服务器的列表节点
--"lg_server":[{"svr_host":"10.0.0.59","svr_name":"内网登陆服","svr_port":8888},{"svr_host":"10.0.0.66","svr_name":"内网登陆服2","svr_port":8888}]
function ServerDataInfo:ParseAgentServerListNode(servers)
local _result = List:New();
local _serArray = servers;
if _serArray and next(_serArray) then
if type(_serArray[1]) == "table" then
for _, value in ipairs(_serArray) do
if value then
_result:Add(ServerDataInfo:New():ParseAgentServerNode(value))
end
end
else
_result:Add(ServerDataInfo:New():ParseAgentServerNode(_serArray))
end
else
Debug.LogError("网关服务器列表为空!");
end
return _result;
end
--解析网关服务器的节点
--"lg_server":{"svr_host":"10.0.0.59","svr_name":"内网登陆服","svr_port":8888}
function ServerDataInfo:ParseAgentServerNode(node)
if node then
--初始化一些变量
self.IsLoginServer = true;
self.ServerId = 0;
self.GroupType = 0;
self.PlayerNum = 0;
self.ShowOrder = 0;
self.Status = 0;
self.Labels = List:New();
self.ReallyServerId = 0;
self.ShowServerId = 0;
self.IsHideServer = false;
self.IsMaintainServer = false;
self.IsNewServer = false;
self.IsFullServer = false;
self.IsRecommendServer = false;
--开始从节点中填充数据
self.Name = node.svr_name;
math.randomseed(os.time());
if type(node.svr_host) == "table" then
self.Ip = node.svr_host[math.random(1,_arr:Count())];
else
self.Ip = node.svr_host;
end
if type(node.svr_port) == "table" then
self.Port = tonumber(node.svr_port[math.random(1,_arr:Count())]);
else
self.Port = tonumber(node.svr_port);
end
else
Debug.LogError("登录服务器为空!");
end
return self;
end
--解析游戏服务器的数组列表
--"servers":[{"group_type":1,"svr_host":"127.0.0.1","svr_id":"20017","svr_idx":"20017","svr_label":"3","svr_name":"本地服务器","svr_pay_callback":"xxx","svr_port":8587,"svr_sort":3,"svr_status":1}]}
function ServerDataInfo:ParseGameServerListNode(servers)
local _result = List:New();
local _serArray = servers;
if _serArray and next(_serArray) then
if type(_serArray[1]) == "table" then
for _, value in ipairs(_serArray) do
if value then
_result:Add(ServerDataInfo:New():ParseGameServerNode(value))
end
end
else
_result:Add(ServerDataInfo:New():ParseGameServerNode(_serArray))
end
else
Debug.LogError("游戏服务器为空!");
end
--根据ShowOder进行排序 -- 从小往大排序
_result:Sort(function(a,b) return a.ShowOrder < b.ShowOrder end );
return _result;
end
--解析一个游戏服务器节点
--{"group_type":1,"svr_host":"127.0.0.1","svr_id":"20017","svr_idx":"20017","svr_label":"3","svr_name":"本地服务器","svr_pay_callback":"xxx","svr_port":8587,"svr_sort":3,"svr_status":1}
function ServerDataInfo:ParseGameServerNode(node)
self.ServerId = tonumber(node.svr_id);
self.GroupType = tonumber(node.group_type);
self.ShowOrder = tonumber(node.svr_sort);
self.Name = UIUtils.StripLanSymbol(node.svr_name,FLanguage.Default);
self.PayCallURL = node.svr_pay_callback;
self.PlayerNum = tonumber(node.register_num);
self.Status = tonumber(node.svr_status);
if node.svr_label then
self.Labels = Utils.SplitNumber(node.svr_label,",");
else
self.Labels = List:New();
end
self.Ip = node.svr_host;
self.Port = tonumber(node.svr_port);
self.ReallyServerId = self.ServerId;
self.ShowServerId = self.ShowOrder;
self.IsLoginServer = false;
self.IsHideServer = (self.Status == 0);
self.IsMaintainServer = (self.Status == 2);
self.IsNewServer = (self.Labels:IndexOf(3) > 0);
self.IsFullServer = (self.Labels:IndexOf(1) > 0);
self.IsRecommendServer = (self.Labels:IndexOf(2) > 0);
return self;
end
--[[
-x8的服务器列表--被抛弃了--2021-08-06.
--解析登录服务器
--{data:{extParams:{svr_private_chids:73|74,svr_port:8888,svr_host:10.0.0.59|212.64.100.197,svr_name:网关服务器}},state:1}
function ServerDataInfo:ParserLoginServerListJson(jsonStr,chnId)
Debug.Log("登录服务器字符串:" .. jsonStr .. ";通道:" .. tostring(chnId));
local _jsonTable = Json.decode(jsonStr);
if _jsonTable and _jsonTable.data then
local _extParams = _jsonTable.data.extParams;
if _extParams then
return ServerDataInfo:New():ParseLoginServerNode(_extParams,chnId);
else
Debug.LogError("登录服务器为空!" .. tostring(jsonStr));
end
else
Debug.LogError("获取的登录服务器Json串没有数据:" .. tostring(jsonStr));
end
return nil;
end
--解析一个登陆服服务器的节点
--{svr_private_chids:73|74,svr_port:8888,svr_host:10.0.0.59|212.64.100.197,svr_name:网关服务器}
function ServerDataInfo:ParseLoginServerNode(node,chnId)
--初始化一些变量
self.IsLoginServer = true;
self.ServerId = 0;
self.GroupType = 0;
self.ShowOrder = 0;
self.Status = 0;
self.Labels = List:New();
self.ReallyServerId = 0;
self.ShowServerId = 0;
self.IsHideServer = false;
self.IsMaintainServer = false;
self.IsNewServer = false;
self.IsFullServer = false;
self.IsRecommendServer = false;
--开始从节点中填充数据
self.Name = node.svr_name;
self.Port = tonumber(node.svr_port);
--ip地址列表
local _ips = Utils.SplitStr(node.svr_host,'|');
--私有渠道列表
local _chns = Utils.SplitStr(node.svr_private_chids,'|');
--在私有渠道列表中
local _findIdx = nil;
if chnId then
_findIdx = _chns:IndexOf(chnId);
else
_findIdx = 1;
end
if _findIdx == nil or _findIdx <= 0 or _findIdx > _ips:Count() then
_findIdx = _ips:Count();
end
self.Ip = _ips[_findIdx];
return self;
end
]]
return ServerDataInfo;