520 lines
17 KiB
Lua
520 lines
17 KiB
Lua
|
|
-- 资源更新器
|
|||
|
|
--//TODO:1,可能考虑把共公部分路径抽取出来,以减少配置文件的容量;2,语言文件考虑增量更新的方式,避免改一点点更新整个文件(语言文件还是挺大的)
|
|||
|
|
-- 服务器
|
|||
|
|
local csSelf = CLVerManager.self
|
|||
|
|
local baseUrl = CLVerManager.self.baseUrl --"http://gamesres.ultralisk.cn/cdn/test";
|
|||
|
|
local platform = ""
|
|||
|
|
local newestVerPath = "newestVers"
|
|||
|
|
local resVer = "resVer"
|
|||
|
|
local versPath = "VerCtl"
|
|||
|
|
local fverVer = "VerCtl.ver" --本地所有版本的版本信息
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local localverVer = Hashtable()
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local serververVer = Hashtable()
|
|||
|
|
--========================
|
|||
|
|
local verPriority = "priority.ver"
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local localPriorityVer = Hashtable() --本地优先更新资源
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local serverPriorityVer = Hashtable() --服务器优先更新资源
|
|||
|
|
|
|||
|
|
local verOthers = "other.ver"
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local otherResVerOld = Hashtable() --所有资源的版本管理
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local otherResVerNew = Hashtable() --所有资源的版本管理
|
|||
|
|
|
|||
|
|
local tmpUpgradePirorityPath = "tmpUpgrade4Pirority"
|
|||
|
|
local haveUpgrade = false
|
|||
|
|
local is2GNetUpgrade = CLVerManager.self.is2GNetUpgrade
|
|||
|
|
local is3GNetUpgrade = CLVerManager.self.is3GNetUpgrade
|
|||
|
|
local is4GNetUpgrade = CLVerManager.self.is4GNetUpgrade
|
|||
|
|
|
|||
|
|
local onFinishInit = nil
|
|||
|
|
local progressCallback = nil
|
|||
|
|
local mVerverPath = ""
|
|||
|
|
local mVerPrioriPath = ""
|
|||
|
|
local mVerOtherPath = ""
|
|||
|
|
|
|||
|
|
---@type System.Collections.Hashtable
|
|||
|
|
local needUpgradeVerver = Hashtable()
|
|||
|
|
local progress = 0
|
|||
|
|
|
|||
|
|
local isNeedUpgradePriority = false
|
|||
|
|
local needUpgradePrioritis = Queue()
|
|||
|
|
local isSucessUpgraded = false
|
|||
|
|
local verVerMD5 = ""
|
|||
|
|
|
|||
|
|
CLLVerManager = {}
|
|||
|
|
|
|||
|
|
-- 更新初始化
|
|||
|
|
--[[
|
|||
|
|
iprogressCallback: 进度回调,回调有两个参数
|
|||
|
|
ifinishCallback: 完成回调
|
|||
|
|
isdoUpgrade: 是否做更新处理
|
|||
|
|
--]]
|
|||
|
|
function CLLVerManager.init(iprogressCallback, ifinishCallback, isdoUpgrade, _verVerMD5)
|
|||
|
|
haveUpgrade = false
|
|||
|
|
verVerMD5 = _verVerMD5
|
|||
|
|
CLVerManager.self.haveUpgrade = false
|
|||
|
|
isNeedUpgradePriority = false
|
|||
|
|
localverVer:Clear()
|
|||
|
|
serververVer:Clear()
|
|||
|
|
localPriorityVer:Clear()
|
|||
|
|
serverPriorityVer:Clear()
|
|||
|
|
otherResVerOld:Clear()
|
|||
|
|
otherResVerNew:Clear()
|
|||
|
|
platform = CLPathCfg.self.platform
|
|||
|
|
CLVerManager.self.platform = platform
|
|||
|
|
|
|||
|
|
mVerverPath = PStr.begin():a(CLPathCfg.self.basePath):a("/"):a(resVer):a("/"):a(platform):a("/"):a(fverVer):e()
|
|||
|
|
mVerPrioriPath =
|
|||
|
|
PStr.begin():a(CLPathCfg.self.basePath):a("/"):a(resVer):a("/"):a(platform):a("/"):a(versPath):a("/"):a(
|
|||
|
|
verPriority
|
|||
|
|
):e()
|
|||
|
|
mVerOtherPath =
|
|||
|
|
PStr.begin():a(CLPathCfg.self.basePath):a("/"):a(resVer):a("/"):a(platform):a("/"):a(versPath):a("/"):a(
|
|||
|
|
verOthers
|
|||
|
|
):e()
|
|||
|
|
CLVerManager.self.mVerverPath = mVerverPath
|
|||
|
|
CLVerManager.self.mVerPrioriPath = mVerPrioriPath
|
|||
|
|
CLVerManager.self.mVerOtherPath = mVerOtherPath
|
|||
|
|
|
|||
|
|
progressCallback = iprogressCallback
|
|||
|
|
onFinishInit = ifinishCallback
|
|||
|
|
|
|||
|
|
if (not isdoUpgrade) then
|
|||
|
|
CLLVerManager.loadPriorityVer()
|
|||
|
|
-- 后面会调用onFinish的回调
|
|||
|
|
CLLVerManager.loadOtherResVer(true)
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
--[[*
|
|||
|
|
/// None 无网络
|
|||
|
|
/// WiFi
|
|||
|
|
/// 2G
|
|||
|
|
/// 3G
|
|||
|
|
/// 4G
|
|||
|
|
/// Unknown
|
|||
|
|
*/
|
|||
|
|
--]]
|
|||
|
|
local netState = Utl.getNetState()
|
|||
|
|
local netActived = true
|
|||
|
|
if (netState == "None") then
|
|||
|
|
netActived = false
|
|||
|
|
elseif (netState == "2G") then
|
|||
|
|
if (not is2GNetUpgrade) then
|
|||
|
|
netActived = false
|
|||
|
|
end
|
|||
|
|
elseif (netState == "3G") then
|
|||
|
|
if (not is3GNetUpgrade) then
|
|||
|
|
netActived = false
|
|||
|
|
end
|
|||
|
|
elseif (netState == "4G") then
|
|||
|
|
if (not is4GNetUpgrade) then
|
|||
|
|
netActived = false
|
|||
|
|
end
|
|||
|
|
elseif (netState == "WiFi") then
|
|||
|
|
netActived = true
|
|||
|
|
elseif (netState == "Unknown") then
|
|||
|
|
netActived = true
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local canDoUpgrade = false
|
|||
|
|
if (platform == "Android") then
|
|||
|
|
if (not CLCfgBase.self.isEditMode and netActived) then
|
|||
|
|
canDoUpgrade = true
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
if (not CLCfgBase.self.isEditMode and Utl.netIsActived()) then
|
|||
|
|
canDoUpgrade = true
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
if (canDoUpgrade) then
|
|||
|
|
canDoUpgrade = CLLVerManager.checkChannel()
|
|||
|
|
if (canDoUpgrade) then
|
|||
|
|
CLLVerManager.netWorkActived()
|
|||
|
|
else
|
|||
|
|
CLLVerManager.loadPriorityVer()
|
|||
|
|
-- 后面会调用onFinish的回调
|
|||
|
|
CLLVerManager.loadOtherResVer(true)
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
-- 说明是编辑器环境
|
|||
|
|
Utl.doCallback(onFinishInit, true)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 验证渠道是否需要更新
|
|||
|
|
function CLLVerManager.checkChannel()
|
|||
|
|
local defaultReuslt = false
|
|||
|
|
-- 先判断是否已经取得取渠道
|
|||
|
|
local fpath = "channels.json"
|
|||
|
|
|
|||
|
|
-- 得渠道控制醘数据
|
|||
|
|
local content = FileEx.readNewAllText(fpath)
|
|||
|
|
local channels = nil
|
|||
|
|
if (content ~= nil) then
|
|||
|
|
channels = JSON.DecodeMap(content)
|
|||
|
|
else
|
|||
|
|
return defaultReuslt
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 取得当前版本的渠道数据
|
|||
|
|
fpath = "chnCfg.json" -- 该文在打包时会自动放在streamingAssetsPath目录下,详细参见打包工具
|
|||
|
|
content = FileEx.readNewAllText(fpath)
|
|||
|
|
local chnCfg = nil
|
|||
|
|
if (content ~= nil) then
|
|||
|
|
chnCfg = JSON.DecodeMap(content)
|
|||
|
|
else
|
|||
|
|
return defaultReuslt
|
|||
|
|
end
|
|||
|
|
-- 取得当前包的渠道在渠道配置文件中是否有配置可更新
|
|||
|
|
if (MapEx.getBool(channels, MapEx.getString(chnCfg, "SubChannel"))) then
|
|||
|
|
return true
|
|||
|
|
else
|
|||
|
|
return false
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return defaultReuslt
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 验证网络是否可用
|
|||
|
|
function CLLVerManager.netWorkActived()
|
|||
|
|
local onCheckNetSateSuc = function(...)
|
|||
|
|
CLVerManager.self:StartCoroutine(FileEx.readNewAllBytesAsyn(mVerverPath, CLLVerManager.onGetlcalVerverMap))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local onCheckNetSateFail = function(...)
|
|||
|
|
printw("Cannot connect Server or Net !!!")
|
|||
|
|
CLLVerManager.loadPriorityVer()
|
|||
|
|
-- 后面会调用onFinish的回调
|
|||
|
|
CLLVerManager.loadOtherResVer(false)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local url = Utl.urlAddTimes(PStr.b():a(baseUrl):a("/netState.txt"):e())
|
|||
|
|
WWWEx.get(url, CLAssetType.text, onCheckNetSateSuc, onCheckNetSateFail, nil, true, 2)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--[[
|
|||
|
|
/// <summary>
|
|||
|
|
/// Ons the get verver map.取得本地版本文件的版本信息
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name='buff'>
|
|||
|
|
/// Buff.
|
|||
|
|
/// </param>
|
|||
|
|
--]]
|
|||
|
|
function CLLVerManager.onGetlcalVerverMap(buff)
|
|||
|
|
if (buff ~= nil) then
|
|||
|
|
localverVer = CLVerManager.self:toMap(buff)
|
|||
|
|
else
|
|||
|
|
localverVer = Hashtable()
|
|||
|
|
end
|
|||
|
|
CLLVerManager.getServerVerverMap()
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
--[[
|
|||
|
|
/// <summary>
|
|||
|
|
/// Gets the server verver map.取得服务器版本文件的版本信息
|
|||
|
|
/// </summary>
|
|||
|
|
--]]
|
|||
|
|
function CLLVerManager.getServerVerverMap(...)
|
|||
|
|
local url = ""
|
|||
|
|
if CLCfgBase.self.hotUpgrade4EachServer then
|
|||
|
|
-- 说明是每个服务器单独处理更新控制
|
|||
|
|
url = PStr.begin():a(baseUrl):a("/"):a(mVerverPath):a("."):a(verVerMD5):e()
|
|||
|
|
else
|
|||
|
|
url = PStr.begin():a(baseUrl):a("/"):a(mVerverPath):e()
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
WWWEx.get(
|
|||
|
|
Utl.urlAddTimes(url),
|
|||
|
|
CLAssetType.bytes,
|
|||
|
|
CLLVerManager.onGetServerVerverBuff,
|
|||
|
|
CLLVerManager.onGetServerVerverBuff,
|
|||
|
|
nil,
|
|||
|
|
true,
|
|||
|
|
2
|
|||
|
|
)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetServerVerverBuff(content, orgs)
|
|||
|
|
if (content ~= nil) then
|
|||
|
|
serververVer = CLVerManager.self:toMap(content)
|
|||
|
|
else
|
|||
|
|
serververVer = Hashtable()
|
|||
|
|
end
|
|||
|
|
--判断哪些版本控制信息需要更新
|
|||
|
|
CLLVerManager.checkVervers()
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.checkVervers()
|
|||
|
|
progress = 0
|
|||
|
|
needUpgradeVerver:Clear()
|
|||
|
|
isNeedUpgradePriority = false
|
|||
|
|
local ver = nil
|
|||
|
|
local keysList = MapEx.keys2List(serververVer)
|
|||
|
|
local count = keysList.Count
|
|||
|
|
local key = ""
|
|||
|
|
for i = 0, count - 1 do
|
|||
|
|
key = keysList[i]
|
|||
|
|
ver = MapEx.getString(localverVer, key)
|
|||
|
|
if (ver == nil or ver ~= MapEx.getString(serververVer, key)) then
|
|||
|
|
MapEx.set(needUpgradeVerver, key, false)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
keysList:Clear()
|
|||
|
|
keysList = nil
|
|||
|
|
|
|||
|
|
if (needUpgradeVerver.Count > 0) then
|
|||
|
|
if (progressCallback ~= nil) then
|
|||
|
|
progressCallback(needUpgradeVerver.Count, 0)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
keysList = MapEx.keys2List(needUpgradeVerver)
|
|||
|
|
count = keysList.Count
|
|||
|
|
key = ""
|
|||
|
|
for i = 0, count - 1 do
|
|||
|
|
key = keysList[i]
|
|||
|
|
CLLVerManager.getVerinfor(key, MapEx.getString(serververVer, key))
|
|||
|
|
end
|
|||
|
|
keysList:Clear()
|
|||
|
|
keysList = nil
|
|||
|
|
else
|
|||
|
|
CLLVerManager.loadPriorityVer()
|
|||
|
|
CLLVerManager.loadOtherResVer(true)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 取得版本文件
|
|||
|
|
function CLLVerManager.getVerinfor(fPath, verVal)
|
|||
|
|
local url = PStr.b():a(baseUrl):a("/"):a(fPath):a("."):a(verVal):e() -- 注意是加了版本号的,可以使用cdn
|
|||
|
|
WWWEx.get(url, CLAssetType.bytes, CLLVerManager.onGetVerinfor, CLLVerManager.onGetVerinfor, fPath, true, 2)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetVerinfor(content, orgs)
|
|||
|
|
if (content ~= nil) then
|
|||
|
|
local fPath = orgs
|
|||
|
|
progress = progress + 1
|
|||
|
|
MapEx.set(localverVer, fPath, MapEx.getString(serververVer, fPath))
|
|||
|
|
|
|||
|
|
local fName = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(newestVerPath):a("/"):a(fPath):e()
|
|||
|
|
if (Path.GetFileName(fName) == "priority.ver") then
|
|||
|
|
-- 优先更新需要把所有资源更新完后才记录
|
|||
|
|
isNeedUpgradePriority = true
|
|||
|
|
serverPriorityVer = CLVerManager.self:toMap(content)
|
|||
|
|
else
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(fName))
|
|||
|
|
File.WriteAllBytes(fName, content)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
MapEx.set(needUpgradeVerver, fPath, true)
|
|||
|
|
|
|||
|
|
if (progressCallback ~= nil) then
|
|||
|
|
progressCallback(needUpgradeVerver.Count, progress)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- if (isFinishAllGet ()) then
|
|||
|
|
if (needUpgradeVerver.Count == progress) then
|
|||
|
|
if (not isNeedUpgradePriority) then
|
|||
|
|
-- 说明没有优先资源需要更新,可以不做其它处理了
|
|||
|
|
--同步到本地
|
|||
|
|
local ms = MemoryStream()
|
|||
|
|
B2OutputStream.writeMap(ms, localverVer)
|
|||
|
|
local vpath = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(mVerverPath):e()
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(vpath))
|
|||
|
|
File.WriteAllBytes(vpath, ms:ToArray())
|
|||
|
|
|
|||
|
|
CLLVerManager.loadPriorityVer()
|
|||
|
|
CLLVerManager.loadOtherResVer(true)
|
|||
|
|
else
|
|||
|
|
CLLVerManager.checkPriority() --处理优先资源更新
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
CLLVerManager.initFailed()
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.checkPriority()
|
|||
|
|
--取得本地优先更新资源版本信息
|
|||
|
|
CLVerManager.self:StartCoroutine(FileEx.readNewAllBytesAsyn(mVerPrioriPath, CLLVerManager.onGetNewPriorityMap))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetNewPriorityMap(buff)
|
|||
|
|
if (buff ~= nil) then
|
|||
|
|
localPriorityVer = CLVerManager.self:toMap(buff)
|
|||
|
|
else
|
|||
|
|
localPriorityVer = Hashtable()
|
|||
|
|
end
|
|||
|
|
CLVerManager.self.localPriorityVer = localPriorityVer -- 同步到c#
|
|||
|
|
|
|||
|
|
progress = 0
|
|||
|
|
needUpgradeVerver:Clear()
|
|||
|
|
needUpgradePrioritis:Clear()
|
|||
|
|
local ver = nil
|
|||
|
|
local keysList = MapEx.keys2List(serverPriorityVer)
|
|||
|
|
local key = nil
|
|||
|
|
local count = keysList.Count
|
|||
|
|
for i = 0, count - 1 do
|
|||
|
|
key = keysList[i]
|
|||
|
|
ver = MapEx.getString(localPriorityVer, key)
|
|||
|
|
if (ver == nil or ver ~= MapEx.getString(serverPriorityVer, key)) then
|
|||
|
|
MapEx.set(needUpgradeVerver, key, false)
|
|||
|
|
needUpgradePrioritis:Enqueue(key)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
keysList:Clear()
|
|||
|
|
keysList = nil
|
|||
|
|
|
|||
|
|
if (needUpgradePrioritis.Count > 0) then
|
|||
|
|
haveUpgrade = true
|
|||
|
|
CLVerManager.self.haveUpgrade = true
|
|||
|
|
if (progressCallback ~= nil) then
|
|||
|
|
progressCallback(needUpgradeVerver.Count, 0)
|
|||
|
|
end
|
|||
|
|
CLLVerManager.getPriorityFiles(needUpgradePrioritis:Dequeue())
|
|||
|
|
else
|
|||
|
|
--同步总的版本管理文件到本地
|
|||
|
|
local ms = MemoryStream()
|
|||
|
|
B2OutputStream.writeMap(ms, localverVer)
|
|||
|
|
local vpath = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(mVerverPath):e()
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(vpath))
|
|||
|
|
File.WriteAllBytes(vpath, ms:ToArray())
|
|||
|
|
|
|||
|
|
CLLVerManager.loadOtherResVer(true)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- 取得优先更新的资源
|
|||
|
|
function CLLVerManager.getPriorityFiles(fPath)
|
|||
|
|
local Url = ""
|
|||
|
|
local verVal = MapEx.getString(serverPriorityVer, fPath)
|
|||
|
|
Url = PStr.begin():a(baseUrl):a("/"):a(fPath):a("."):a(verVal):e() -- 把版本号拼在后面
|
|||
|
|
-- print("Url==" .. Url);
|
|||
|
|
|
|||
|
|
WWWEx.get(Url, CLAssetType.bytes, CLLVerManager.onGetPriorityFiles, CLLVerManager.initFailed, fPath, true, 2)
|
|||
|
|
|
|||
|
|
if (progressCallback ~= nil) then
|
|||
|
|
progressCallback(needUpgradeVerver.Count, progress, WWWEx.getWwwByUrl(Url))
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetPriorityFiles(content, orgs)
|
|||
|
|
if (content == nil) then
|
|||
|
|
CLLVerManager.initFailed()
|
|||
|
|
return
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
local fPath = orgs
|
|||
|
|
progress = progress + 1
|
|||
|
|
-- 先把文件放在tmp目录,等全部下载好后再移到正式目录
|
|||
|
|
local fName = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(tmpUpgradePirorityPath):a("/"):a(fPath):e()
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(fName))
|
|||
|
|
File.WriteAllBytes(fName, content)
|
|||
|
|
|
|||
|
|
--同步到本地
|
|||
|
|
MapEx.set(localPriorityVer, fPath, MapEx.getString(serverPriorityVer, fPath))
|
|||
|
|
MapEx.set(needUpgradeVerver, fPath, true)
|
|||
|
|
CLVerManager.self.localPriorityVer = localPriorityVer
|
|||
|
|
|
|||
|
|
if (progressCallback ~= nil) then
|
|||
|
|
progressCallback(needUpgradeVerver.Count, progress)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
if (needUpgradePrioritis.Count > 0) then
|
|||
|
|
CLLVerManager.getPriorityFiles(needUpgradePrioritis:Dequeue())
|
|||
|
|
else
|
|||
|
|
--已经把所有资源取得完成
|
|||
|
|
-- 先把文件放在tmp目录,等全部下载好后再移到正式目录
|
|||
|
|
local keysList = MapEx.keys2List(needUpgradeVerver)
|
|||
|
|
local count = keysList.Count
|
|||
|
|
local key = nil
|
|||
|
|
local fromFile = ""
|
|||
|
|
local toFile = ""
|
|||
|
|
for i = 0, count - 1 do
|
|||
|
|
key = keysList[i]
|
|||
|
|
fromFile = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(tmpUpgradePirorityPath):a("/"):a(key):e()
|
|||
|
|
toFile = PStr.begin():a(CLPathCfg.persistentDataPath):a("/"):a(key):e()
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(toFile))
|
|||
|
|
File.Copy(fromFile, toFile, true)
|
|||
|
|
end
|
|||
|
|
Directory.Delete(PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(tmpUpgradePirorityPath):e(), true)
|
|||
|
|
keysList:Clear()
|
|||
|
|
keysList = nil
|
|||
|
|
|
|||
|
|
--同步优先资源更新的版本管理文件到本地
|
|||
|
|
local ms = MemoryStream()
|
|||
|
|
B2OutputStream.writeMap(ms, localPriorityVer)
|
|||
|
|
local vpath = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(mVerPrioriPath):e()
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(vpath))
|
|||
|
|
File.WriteAllBytes(vpath, ms:ToArray())
|
|||
|
|
|
|||
|
|
--同步总的版本管理文件到本地
|
|||
|
|
ms = MemoryStream()
|
|||
|
|
B2OutputStream.writeMap(ms, localverVer)
|
|||
|
|
vpath = PStr.b():a(CLPathCfg.persistentDataPath):a("/"):a(mVerverPath):e()
|
|||
|
|
FileEx.CreateDirectory(Path.GetDirectoryName(vpath))
|
|||
|
|
File.WriteAllBytes(vpath, ms:ToArray())
|
|||
|
|
|
|||
|
|
CLLVerManager.loadOtherResVer(true)
|
|||
|
|
end
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.loadPriorityVer()
|
|||
|
|
CLVerManager.self:StartCoroutine(FileEx.readNewAllBytesAsyn(mVerPrioriPath, CLLVerManager.onGetVerPriority))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetVerPriority(buff)
|
|||
|
|
if (buff ~= nil) then
|
|||
|
|
localPriorityVer = CLVerManager.self:toMap(buff)
|
|||
|
|
else
|
|||
|
|
localPriorityVer = Hashtable()
|
|||
|
|
end
|
|||
|
|
CLVerManager.self.localPriorityVer = localPriorityVer
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.loadOtherResVer(sucessProcUpgrade)
|
|||
|
|
isSucessUpgraded = sucessProcUpgrade
|
|||
|
|
CLVerManager.self:StartCoroutine(FileEx.readNewAllBytesAsyn(mVerOtherPath, CLLVerManager.onGetVerOther))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetVerOther(buff)
|
|||
|
|
if (buff ~= nil) then
|
|||
|
|
otherResVerOld = CLVerManager.self:toMap(buff)
|
|||
|
|
else
|
|||
|
|
otherResVerOld = Hashtable()
|
|||
|
|
end
|
|||
|
|
CLVerManager.self.otherResVerOld = otherResVerOld
|
|||
|
|
local path = PStr.b():a(newestVerPath):a("/"):a(mVerOtherPath):e()
|
|||
|
|
CLVerManager.self:StartCoroutine(FileEx.readNewAllBytesAsyn(path, CLLVerManager.onGetNewVerOthers))
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.onGetNewVerOthers(buff)
|
|||
|
|
if (buff ~= nil) then
|
|||
|
|
otherResVerNew = CLVerManager.self:toMap(buff)
|
|||
|
|
else
|
|||
|
|
otherResVerNew = Hashtable()
|
|||
|
|
end
|
|||
|
|
CLVerManager.self.otherResVerNew = otherResVerNew
|
|||
|
|
|
|||
|
|
progressCallback = nil
|
|||
|
|
Utl.doCallback(onFinishInit, isSucessUpgraded)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.initFailed(...)
|
|||
|
|
if (progressCallback ~= nil) then
|
|||
|
|
progressCallback(needUpgradeVerver.Count, progress, nil)
|
|||
|
|
end
|
|||
|
|
CLLVerManager.loadPriorityVer()
|
|||
|
|
CLLVerManager.loadOtherResVer(false)
|
|||
|
|
printw("initFailed")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function CLLVerManager.isHaveUpgrade(...)
|
|||
|
|
return haveUpgrade
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
return CLLVerManager
|