Files
tianrunCRM/Assets/trCRM/upgradeRes4Dev/priority/lua/ui/panel/CLLPSplash.lua
2020-07-16 08:54:32 +08:00

384 lines
14 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.

--开始loading页面处理资源更新、及相关初始化
do
---@type json
local json = require("json.json")
---@type Coolape.CLPanelLua
local csSelf = nil
local transform = nil
local gameObject = nil
local progressBar = nil
local progressBarTotal = nil
local lbprogressBarTotal = nil
local LabelTip = nil
local LabelVer = nil
local lbCustServer
local loadedPanelCount = 0
local server
local user
local bottom
local www4UpgradeCell = nil -- 更新时单个单元的www
-- 预先加载的页面(在热更新完成后,先把必要的公共页面先加载了,后面的处理可能会用到)
local beforeLoadPanels = {
"PanelHotWheel", -- 菊花
"PanelBackplate", -- 背板遮罩
"PanelConfirm", -- 确认提示页面
"PanelMask4Panel", -- 遮挡
"PanelWWWProgress", -- 显示网络请求资源的进度
}
local CLLPSplash = {}
function CLLPSplash.init(go)
csSelf = go
transform = csSelf.transform
gameObject = csSelf.gameObject
bottom = getChild(transform, "Bottom")
progressBar = getCC(bottom, "Progress Bar", "UISlider")
NGUITools.SetActive(progressBar.gameObject, false)
progressBarTotal = getChild(transform, "Bottom", "Progress BarTotal")
lbprogressBarTotal = getChild(progressBarTotal, "Thumb", "Label"):GetComponent("UILabel")
progressBarTotal = progressBarTotal:GetComponent("UISlider")
NGUITools.SetActive(progressBarTotal.gameObject, false)
LabelTip = getChild(bottom, "LabelTip")
LabelTip = LabelTip:GetComponent("UILabel")
NGUITools.SetActive(LabelTip.gameObject, false)
LabelVer = getChild(transform, "TopLeft", "LabelVer")
LabelVer = LabelVer:GetComponent("UILabel")
lbCustServer = getCC(transform, "TopLeft/LabelCustomerServer", "UILabel")
end
function CLLPSplash.show()
csSelf.panel.depth = 200
loadedPanelCount = 0
SetActive(progressBar.gameObject, false)
SetActive(progressBarTotal.gameObject, false)
-- load alert
CLLPSplash.addAlertHud()
-- 初始化需要提前加载的页面
loadedPanelCount = 0
for i, v in ipairs(beforeLoadPanels) do
CLPanelManager.getPanelAsy(v, CLLPSplash.onLoadPanelBefore)
end
-- Hide company panel
csSelf:invoke4Lua(CLLPSplash.hideFirstPanel, 1.5)
end
-- 关闭页面
function CLLPSplash.hide()
csSelf:cancelInvoke4Lua()
CLLPSplash.hideFirstPanel()
end
-- 刷新页面
function CLLPSplash.refresh()
LabelVer.text = joinStr(Localization.Get("Version"), __version__)
lbCustServer.text = ""
LabelTip.text = ""
end
-- 加载hud alert
function CLLPSplash.addAlertHud()
-- local onGetObj = function(name, AlertRoot, orgs)
-- AlertRoot.transform.parent = CLUIInit.self.uiPublicRoot
-- AlertRoot.transform.localPosition = Vector3.zero
-- AlertRoot.transform.localScale = Vector3.one
-- NGUITools.SetActive(AlertRoot, true)
-- end
-- CLUIOtherObjPool.borrowObjAsyn("ToastRoot", onGetObj)
getPanelAsy("ToastRoot", doShowPanel)
end
function CLLPSplash.hideFirstPanel()
do return end
---@type Coolape.CLPanelLua
local p = CLPanelManager.getPanel(MyMain.self.firstPanel)
if (p ~= nil and p.gameObject.activeInHierarchy) then
CLPanelManager.hidePanel(p)
end
end
function CLLPSplash.onLoadPanelBefore(p)
p:init()
loadedPanelCount = loadedPanelCount + 1
if (p.name == "PanelConfirm" or
p.name == "PanelHotWheel" or
p.name == "PanelMask4Panel" or
p.name == "PanelWWWProgress") then
p.transform.parent = CLUIInit.self.uiPublicRoot
p.transform.localScale = Vector3.one
end
if (p.name == "PanelWWWProgress") then
CLPanelManager.showPanel(p)
end
CLLPSplash.onProgress(#(beforeLoadPanels), loadedPanelCount)
if (loadedPanelCount >= #(beforeLoadPanels)) then
-- 页面已经加载完成,处理热更新
if (not Application.isEditor) then
CLLPSplash.checkNewVersion()
else
csSelf:invoke4Lua(CLLPSplash.updateRes, 0.2)
end
end
end
--[[
-- 更新版本
--{"ver":"1.0","force":true,"url":"http://"}
--]]
function CLLPSplash.checkNewVersion()
local oldVer = __version__
local onGetVer = function(content, orgs)
local map = JSON.DecodeMap(content)
local newVer = MapEx.getString(map, "ver")
if (tonumber(newVer) > tonumber(oldVer)) then
local doUpgradeApp = function()
CLLPSplash.upgradeGame(MapEx.getString(map, "url"))
end
if MapEx.getBool(map, "force") then
CLUIUtl.showConfirm(LGet("MsgHadNewVerApp"), true, "更新", doUpgradeApp, "", nil)
else
CLUIUtl.showConfirm(LGet("MsgHadNewVerApp"), false, "更新", doUpgradeApp, "忽略", CLLPSplash.updateRes)
end
else
CLLPSplash.updateRes()
end
end
local onGetVerError = function(msg, orgs)
-- CLAlert.add(LGet("MsgCheckAppUpgradeFail"), Color.white, 1)
CLLPSplash.updateRes()
end
local chlCode = getChlCode()
local url = Utl.urlAddTimes(joinStr(CLVerManager.self.baseUrl, "/appVer.", chlCode, ".json"))
WWWEx.get(url, CLAssetType.text, onGetVer, onGetVerError, nil, true)
end
-- 更新安装游戏
function CLLPSplash.upgradeGame(url)
if not isNilOrEmpty(url ) then
Application.OpenURL(url)
end
end
-- 处理热更新
function CLLPSplash.updateRes()
if CLCfgBase.self.isDirectEntry then
-- 取得缓存的数据
user = json.decode(Prefs.getUserInfor())
server = json.decode(Prefs.getCurrServer())
CLLPSplash.checkHotUpgrade()
else
if not CLCfgBase.self.hotUpgrade4EachServer then
-- 更新资源
print("更新资源")
CLLVerManager.init(CLLPSplash.onProgress, CLLPSplash.onFinishResUpgrade, true, "")
else
--
CLLPSplash.accountLogin()
end
end
end
function CLLPSplash.accountLogin()
-- getPanelAsy("PanelLogin", onLoadedPanelTT, {CLLPSplash.onAccountLogin, true})
CLLPSplash.prepareStartGame()
end
function CLLPSplash.onAccountLogin(_user, _server)
Prefs.setUserInfor(json.encode(_user))
Prefs.setCurrServer(json.encode(_server))
user = _user
server = _server
CLLPSplash.checkHotUpgrade()
end
function CLLPSplash.checkHotUpgrade()
if CLCfgBase.self.hotUpgrade4EachServer then
local resMd5 = ""
if CLPathCfg.self.platform == "IOS" then
resMd5 = server.iosVer
else
resMd5 = server.androidVer
end
-- 更新资源
CLLVerManager.init(CLLPSplash.onProgress, CLLPSplash.onFinishResUpgrade, true, resMd5)
else
CLLPSplash.prepareStartGame()
end
end
--设置进度条
function CLLPSplash.onProgress(...)
local args = { ... }
local all = args[1] -- 总量
local v = args[2] -- 当前值
if (#(args) >= 3) then
www4UpgradeCell = args[3]
else
www4UpgradeCell = nil
end
if (progressBarTotal ~= nil) then
NGUITools.SetActive(progressBarTotal.gameObject, true)
NGUITools.SetActive(LabelTip.gameObject, true)
if (type(all) == "number") then
if (all > 0) then
local value = v / all
progressBarTotal.value = value
if (www4UpgradeCell ~= nil) then
-- 说明有单个资源
lbprogressBarTotal.text = joinStr(v, "/", all)
end
-- 表明已经更新完成
if (value == 1) then
InvokeEx.cancelInvokeByUpdate(CLLPSplash.onProgressCell)
NGUITools.SetActive(progressBarTotal.gameObject, false)
NGUITools.SetActive(LabelTip.gameObject, false)
NGUITools.SetActive(progressBar.gameObject, false)
else
-- 单个资源的进度
CLLPSplash.onProgressCell()
end
else
InvokeEx.cancelInvokeByUpdate(CLLPSplash.onProgressCell)
progressBarTotal.value = 0
NGUITools.SetActive(progressBarTotal.gameObject, false)
NGUITools.SetActive(LabelTip.gameObject, false)
NGUITools.SetActive(progressBar.gameObject, false)
end
else
print(joinStr("all====", all))
end
end
end
-- 单个文件更新进度
function CLLPSplash.onProgressCell(...)
if (www4UpgradeCell ~= nil) then
NGUITools.SetActive(progressBar.gameObject, true)
progressBar.value = www4UpgradeCell.downloadProgress or 0
InvokeEx.invokeByUpdate(CLLPSplash.onProgressCell, 0.02)
else
NGUITools.SetActive(progressBar.gameObject, false)
InvokeEx.cancelInvokeByUpdate(CLLPSplash.onProgressCell)
end
end
-- 资源更新完成
function CLLPSplash.onFinishResUpgrade(upgradeProcSuccess)
print("CLLPSplash.onFinishResUpgrade")
if (not upgradeProcSuccess) then
print("UpgradeResFailed")
else
if (CLLVerManager.isHaveUpgrade()) then
-- 说明有更新,重新启动
if CLCfgBase.self.hotUpgrade4EachServer then
CLCfgBase.self.isDirectEntry = true
end
csSelf:cancelInvoke4Lua()
csSelf:invoke4Lua(CLLPSplash.reLoadGame, 0.1)
return
end
end
if CLCfgBase.self.hotUpgrade4EachServer then
-- 准备开始游戏
CLLPSplash.prepareStartGame()
else
--SetActive(ButtonEntry, true)
CLLPSplash.accountLogin()
end
end
-- 重新启动lua
function CLLPSplash.reLoadGame()
--- 释放资源开始-------------------------------
local cleanRes = function()
if CLAlert ~= nil and CLAlert.csSelf ~= nil then
GameObject.DestroyImmediate(CLAlert.csSelf.gameObject, true)
end
pcall(doSomethingBeforeRestart)
pcall(releaseRes4GC, true)
end
--- 释放资源结束-------------------------------
pcall(cleanRes)
local panel = CLPanelManager.getPanel(CLMainBase.self.firstPanel)
if panel then
CLPanelManager.showPanel(panel)
end
CLMainBase.self:reStart()
end
-- 准备开始游戏
function CLLPSplash.prepareStartGame()
CLLPSplash.checkSignCode()
if (progressBar ~= nil) then
InvokeEx.cancelInvokeByUpdate(CLLPSplash.onProgressCell)
NGUITools.SetActive(progressBar.gameObject, false)
NGUITools.SetActive(progressBarTotal.gameObject, false)
NGUITools.SetActive(LabelTip.gameObject, false)
end
-- 播放背景音乐---------------
-- SoundEx.playMainMusic()
----------------------------
end
function CLLPSplash.checkSignCode()
-- 把热更新及加载ui完了后再做验证签名
if (not CLLPSplash.isSignCodeValid()) then
CLUIUtl.showConfirm(Localization.Get("MsgTheVerIsNotCorrect"), nil)
-- CLUIUtl.showConfirm("亲爱的玩家你所下载的版本可能是非官方版本请到xxx去下载。非常感谢", nil)
return
end
CLLPSplash.goNext()
end
-- 签名是否有效(Only 4 android)
function CLLPSplash.isSignCodeValid(...)
if isNilOrEmpty(CLCfgBase.self.singinMd5Code) then
return true
end
-- 取得签名串
local md5Code = Utl.getSingInCodeAndroid()
if (isNilOrEmpty(md5Code)) then
if (string.lower(md5Code) ~= string.lower(CLCfgBase.self.singinMd5Code)) then
return false
end
end
return true
end
function CLLPSplash.uiEventDelegate(go)
end
function CLLPSplash.goNext()
if CLCfgBase.self.isDirectEntry then
CLCfgBase.self.isDirectEntry = false
end
CLPanelManager.getPanelAsy("PanelStart", onLoadedPanel, { user, server })
end
-- 当按了返回键时关闭自己返值为true时关闭
function CLLPSplash.hideSelfOnKeyBack( )
return false
end
----------------------------------------------
return CLLPSplash
end