Files
tianrunCRM/Assets/trCRM/upgradeRes4Dev/priority/lua/toolkit/CLLUpdateUpgrader.lua
2020-07-04 14:41:25 +08:00

148 lines
5.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
-- 更新热更器处理
-- 判断热更新器本身是不是需要更新,同时判断渠道配置是否要更新
--]]
do
---@type System.Collections.Hashtable
local localVer = Hashtable();
---@type System.Collections.Hashtable
local serverVer = Hashtable();
local serverVerStr = "";
-- 热更新器的版本
local upgraderVer = "upgraderVer.json";
local localVerPath = upgraderVer;
--local upgraderName = PStr.b():a(CLPathCfg.self.basePath):a("/upgradeRes/priority/lua/toolkit/CLLVerManager.lua"):e();
local upgraderName = "preUpgradeList";
-- 控制渠道更新的
local channelName = "channels.json";
local finishCallback = nil; -- finishCallback(isHaveUpdated)
local isUpdatedUpgrader = false; -- 是否更新的热更新器
----------------------------------
CLLUpdateUpgrader = {};
function CLLUpdateUpgrader.checkUpgrader(ifinishCallback)
isUpdatedUpgrader = false;
finishCallback = ifinishCallback;
CLVerManager.self:StartCoroutine(FileEx.readNewAllTextAsyn(localVerPath, CLLUpdateUpgrader.onGetLocalUpgraderVer));
end
function CLLUpdateUpgrader.onGetLocalUpgraderVer(content)
localVer = JSON.DecodeMap(content);
if (localVer == nil) then
localVer = Hashtable();
end
local url = PStr.b():a(CLVerManager.self.baseUrl):a("/"):a(upgraderVer):e();
url = Utl.urlAddTimes(url);
WWWEx.get(url, CLAssetType.text,
CLLUpdateUpgrader.onGetServerUpgraderVer,
CLLUpdateUpgrader.onGetServerUpgraderVer, nil, true);
end
function CLLUpdateUpgrader.onGetServerUpgraderVer(content, orgs)
serverVerStr = content;
serverVer = JSON.DecodeMap(content);
serverVer = serverVer == nil and Hashtable() or serverVer;
-- print("MapEx.getInt(localVer, upgraderVer)==" .. MapEx.getInt(localVer, "upgraderVer"))
-- print("MapEx.getInt(serverVer, upgraderVer)==" .. MapEx.getInt(serverVer, "upgraderVer"))
if (MapEx.getString(localVer, "upgraderVer") ~= MapEx.getString(serverVer, "upgraderVer")) then
CLLUpdateUpgrader.updateUpgrader();
else
CLLUpdateUpgrader.checkChannelVer(false);
end
end
function CLLUpdateUpgrader.updateUpgrader(...)
local url = "";
local verVal = MapEx.getString(serverVer, "upgraderVer");
url = PStr.b():a(CLVerManager.self.baseUrl):a("/"):a(upgraderName):a("."):a(verVal):e();
WWWEx.get(url, CLAssetType.text,
CLLUpdateUpgrader.ongetNewestPreupgradList,
CLLUpdateUpgrader.ongetNewestPreupgradList,
upgraderName, true);
end
function CLLUpdateUpgrader.ongetNewestPreupgradList(content, orgs)
if (content ~= nil) then
local preupgradList = JSON.DecodeList(content)
if preupgradList == nil or preupgradList.Count == 0 then
CLLUpdateUpgrader.checkChannelVer(false);
else
CLLUpdateUpgrader.loadServerRes({ preupgradList, 0 })
end
else
CLLUpdateUpgrader.checkChannelVer(false);
end
end
function CLLUpdateUpgrader.loadServerRes(orgs)
local list = orgs[1]
local i = orgs[2]
if i >= list.Count then
-- 完成
CLLUpdateUpgrader.checkChannelVer(true);
else
local cell = list[i];
local name = cell[0]
local ver = cell[1]
local url = PStr.b():a(CLVerManager.self.baseUrl):a("/"):a(name):a("."):a(ver):e();
WWWEx.get(url, CLAssetType.bytes,
CLLUpdateUpgrader.ongetNewestUpgrader,
CLLUpdateUpgrader.ongetNewestUpgrader, { list, i, name }, true);
end
end
function CLLUpdateUpgrader.ongetNewestUpgrader(content, orgs)
local list = orgs[1]
local i = orgs[2]
local fileName = orgs[3]
if (content ~= nil) then
local file = PStr.begin():a(CLPathCfg.persistentDataPath):a("/"):a(fileName):e();
FileEx.CreateDirectory(Path.GetDirectoryName(file));
File.WriteAllBytes(file, content);
else
printe(joinStr(fileName , "get content == nil"));
end
CLLUpdateUpgrader.loadServerRes({ list, i + 1 })
end
-- 取得最新的渠道更新控制信息
function CLLUpdateUpgrader.checkChannelVer(hadUpdatedUpgrader)
isUpdatedUpgrader = hadUpdatedUpgrader;
if (MapEx.getInt(localVer, "channelVer") < MapEx.getInt(serverVer, "channelVer")) then
CLLUpdateUpgrader.getChannelInfor();
else
CLLUpdateUpgrader.finished()
end
end
function CLLUpdateUpgrader.getChannelInfor(...)
local verVal = MapEx.getInt(serverVer, "channelVer");
-- 注意是加了版本号的会使用cdn
local url = PStr.b():a(CLVerManager.self.baseUrl):a("/"):a(channelName):a("."):a(verVal):e();
WWWEx.get(url, CLAssetType.text,
CLLUpdateUpgrader.onGetChannelInfor,
CLLUpdateUpgrader.onGetChannelInfor, channelName, true);
end
function CLLUpdateUpgrader.onGetChannelInfor(content, orgs)
if (content ~= nil) then
local file = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(channelName):e();
FileEx.CreateDirectory(Path.GetDirectoryName(file));
File.WriteAllText(file, content);
end
CLLUpdateUpgrader.finished()
end
function CLLUpdateUpgrader.finished()
if isUpdatedUpgrader then
local file = PStr.begin():a(CLPathCfg.persistentDataPath):a("/"):a(localVerPath):e();
File.WriteAllText(file, serverVerStr);
end
Utl.doCallback(finishCallback, isUpdatedUpgrader);
end
end
--module("CLLUpdateUpgrader", package.seeall)