276 lines
9.6 KiB
Lua
276 lines
9.6 KiB
Lua
------------------------------------------------
|
|
-- 作者: 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; |