|
|
- StepPackModule = StepPackModule or BaseClass()
- local StepPackModule = StepPackModule
- local Util = Util
- local os = os
- local setTimeout = setTimeout
- local AppConst_CdnUrl = AppConst.CdnUrl
- local Util_DataPath = Util.DataPath
- local AppConst_OpenDownloadLog = AppConst.OpenDownloadLog
-
-
- StepPackModule.PRELOAD_MAP_RES = "" --"1001" --新手200级使用12个地图资源的顺序
-
- function StepPackModule:__init()
- if StepPackModule.Instance ~= nil then
- error("attempt to create singleton(StepPackModule) twice!")
- return
- end
- StepPackModule.Instance = self
-
- self.hight_res_list = nil
- self.need_retry_res_list = {}
-
- self.update_res_count = 0
- self.update_res_size = 0
- self.cur_update_index = 1
-
- self.cur_download_size = 0
- self.all_download_size = 0
- self.all_download_count = 0
- self.last_download_speed = 0
-
- self.last_download_start_time = os.time()
-
- self.earch_download_wait_time = 1
-
- self.need_retry_count = 0
-
- self.wait_download_time = nil
-
- self.work_state = false
- self.download_now = false
- self.pause_state = false
- self.auto_pause = false
- self.res_checking_state = false
-
- self.download_finish_state = false
-
- self.callback_func = nil
-
- self.last_show_speed_size = 0
- self.last_show_speed_time = 0
-
- self.newplayer_map_res_finish = false
-
- self.max_download_speed = false
- self.max_speed_mode = false -- 外部设置加速模式
-
- local check_start = function()
- self:CheckAutoUpdate()
- end
-
- local scene_start_event = nil
- local scene_start = function()
- GlobalEventSystem:UnBind(scene_start_event)
- if not self.work_state and not self.download_finish_state then
- setTimeout(check_start,15) --避开scene_start后10秒时设置的帧率流程
- end
- end
- scene_start_event = GlobalEventSystem:Bind(EventName.SCENE_LOAD_VIEW_COMPLETE,scene_start)
-
- self:CheckNewPlayerResState()
-
- local callfunc = function(module_name,func)
- if module_name == "download" and func == "maxspeed" then
- self.max_download_speed = true
- elseif module_name == "download" and func == "smallspeed" then
- self.max_download_speed = false
- end
- end
- GlobalEventSystem:Bind(EventName.DO_MODULE_DEBUG_FUNC,callfunc)
-
- local lock_screen = function()
- self.max_download_speed = true
- end
- GlobalEventSystem:Bind(SceneEventType.SCREEN_BRIGHT_DEL_EVENT, lock_screen)
-
- local normal_screen = function()
- if not self.max_speed_mode then
- self.max_download_speed = false
- end
- end
- GlobalEventSystem:Bind(SceneEventType.SCREEN_BRIGHT_ADD_EVENT, normal_screen)
- end
-
- function StepPackModule:SetMaxSpeedMode( state )
- self.max_speed_mode = state
- self.max_download_speed = state
- end
-
- function StepPackModule:CheckNewPlayerResState()
- -- if self.check_newplayer_res_state or self.newplayer_map_res_finish then
- -- return
- -- end
- -- self.check_newplayer_res_state = true
- -- local data = Split(StepPackModule.PRELOAD_MAP_RES,",")
- -- if data and #data > 0 then
- -- self.map_list = data
- -- end
-
- -- local data = CookieWrapper.Instance:GetCookie(CookieLevelType.Common, CookieKey.NEWPLAYER_MAP_RES_DOWNLOAD_DATA)
- -- if data then
- -- local info = Split(data,",")
- -- if info and #info >= 3 then
- -- local finish = info[1]
- -- if tonumber(finish) == 1 then
- -- self.newplayer_map_res_finish = true
- -- end
-
- -- if not self.newplayer_map_res_finish then
- -- local last_map = tonumber(info[2])
- -- local last_index = tonumber(info[3])
-
- -- if last_map and last_index then
- -- self.last_newplayer_map = last_map
- -- self.last_newplayer_index = last_index
- -- end
- -- end
- -- end
- -- else
- -- --检测是老号并且无新手下载记录,则不下载新手资源
- -- local last_role_id = CookieWrapper.Instance:GetCookie(CookieLevelType.Common, CookieKey.LAST_LOGIN_ROLE_ID)
- -- if last_role_id then
- -- self.newplayer_map_res_finish = true
- -- else
- -- if self.map_list and #self.map_list >= 2 then
- -- self.last_newplayer_map = self.map_list[2]
- -- self.last_newplayer_index = 1
- -- CookieWrapper.Instance:SaveCookie(CookieLevelType.Common, CookieTimeType.TYPE_ALWAYS,CookieKey.NEWPLAYER_MAP_RES_DOWNLOAD_DATA,"0," .. self.last_newplayer_map .. "," .. self.last_newplayer_index)
- -- CookieWrapper.Instance:WriteAll()
- -- end
- -- end
- -- end
- end
-
- function StepPackModule:getInstance()
- if StepPackModule.Instance == nil then
- StepPackModule.New()
- end
- return StepPackModule.Instance
- end
-
- function StepPackModule:AddDownloadSize( size )
- self.all_download_size = self.all_download_size + size
- self.all_download_count = self.all_download_count + 1
-
- self:CheckDownloadFinish()
- end
-
- function StepPackModule:CheckDownloadFinish()
- if self.all_download_count >= self.update_res_count * 0.99 or self.all_download_size >= self.update_res_size * 0.99 then
- self.download_finish_state = true
- self.all_download_size = self.update_res_size
- self.work_state = false
-
- if self.update_speed_timer then
- TimerQuest.CancelQuest(GlobalTimerQuest, self.update_speed_timer)
- self.update_speed_timer = nil
- end
-
- if self.delay_write_version_timer then
- --延迟的版本全部写入
- Util.AutoWriteVersionFile(9999)
-
- TimerQuest.CancelQuest(GlobalTimerQuest, self.delay_write_version_timer)
- self.delay_write_version_timer = nil
- end
-
- if self.callback_func then
- self.callback_func(self.all_download_size,self.update_res_size,0,self.download_finish_state)
- end
-
- CookieWrapper.Instance:SaveCookie(CookieLevelType.Common,CookieTimeType.TYPE_ALWAYS,CookieKey.SILENT_ASSETS_FINISH,"finish")
- CookieWrapper.Instance:WriteAll()
- end
-
- --Debugger.Log("---------download count--------------" .. self.all_download_count .. "/" .. self.update_res_count)
- end
-
- function StepPackModule:Update(now_time, elapse_time)
- -- 自动暂停状态时,检测到有wifi,则取消暂停
- if self.auto_pause and Util.IsWifi then
- self.pause_state = false
- end
-
- if not self.pause_state and not self.download_now and self.update_res_count + self.need_retry_count >= self.cur_update_index then
-
- -- 下载中检测到流量网络状态,并且非手动在流量状态开始的,则自动暂停
- if not Util.IsWifi and not self.no_wifi_download then
- self.pause_state = true
- self.auto_pause = true
- return
- end
-
- if not Util.NetAvailable then
- return
- end
-
-
- local pass_time = os.time() - self.last_download_start_time
- if pass_time < self.earch_download_wait_time and not self.max_download_speed then
- return
- end
-
- local res = nil
- if self.cur_update_index <= self.update_res_count then
- res = self.hight_res_list[self.cur_update_index-1]
- else
- res = self.need_retry_res_list[self.cur_update_index - self.update_res_count]
- end
-
- self.cur_update_index = self.cur_update_index + 1
-
- local exist = resMgr:ExistDownloadHistory(res)
- if exist then
- self.all_download_count = self.all_download_count + 1
- self:CheckDownloadFinish()
- --print("--------normal exist------------------",res)
- return
- end
-
- self.last_download_start_time = os.time()
-
- --local update = Util.FileNeedUpdate(res)
- self.download_now = true
-
- print("--------normal download------------------",res)
- self:DownloadFile(res)
-
- local check_last_res
- check_last_res = function()
- if not self.pause_state and self.download_now and Util.NetAvailable then
- if res == self.cur_download_file then
- self.download_now = false
- self.all_download_count = self.all_download_count + 1
- end
- else
- setTimeout(check_last_res,10)
- end
- end
- setTimeout(check_last_res,10)
- end
- end
-
- function StepPackModule:DownloadError()
- table.insert(self.need_retry_res_list,self.cur_download_file)
- self.need_retry_count = self.need_retry_count + 1
- end
-
-
- function StepPackModule:DoNewPlayerOperate( )
- -- if not self.newplayer_map_res_finish then
- -- CookieWrapper.Instance:SaveCookie(CookieLevelType.Common, CookieTimeType.TYPE_ALWAYS, CookieKey.NEWPLAYER_MAP_RES_DOWNLOAD_DATA,"0," .. self.last_newplayer_map .. "," .. self.last_newplayer_index)
- -- self.last_newplayer_index = self.last_newplayer_index + 1
- -- end
- end
-
- function download_func(state,download_size)
-
- -- StepPackModule.Instance:DoNewPlayerOperate()
- StepPackModule.Instance.download_now = false
- StepPackModule.Instance:AddDownloadSize(download_size)
-
- if state == false and download_size == 0 then
- --local cur_file = StepPackModule.Instance.cur_download_file
- --local res = Util.GetAssetsBundlePathFromBase64(cur_file)
- --Debugger.LogWarning("download error:" .. res)
- else
- --print("---------------download size-------------",download_size)
- end
- end
-
- function StepPackModule:DownloadFile( res )
- local remote_path = AppConst_CdnUrl .. res
- if AppConst_EnglineVer >= 50 then
- remote_path = AppConst_CdnUrl .. string.sub(res,2,-1)
- end
-
- -- local ingore_str = "/client/unitybundle/"
- -- if SystemRuntimePlatform.IsIphone() then
- -- ingore_str = "/client/iosbundle/"
- -- elseif SystemRuntimePlatform.IsAndroid() then
- -- ingore_str = "/client/androidbundle/"
- -- end
- -- local download_path = Util_DataPath .. string.gsub(res,ingore_str,"")
-
- local ignore_list = {"/client/unitybundle/", "/client/iosbundle/", "/client/androidbundle/"}
- local path = res
- for k,v in pairs(ignore_list) do
- path = string.gsub(path, v, "")
- end
- local download_path = Util_DataPath .. path
-
- self.cur_download_file = res
-
- if AppConst_OpenDownloadLog then
- Debugger.Log("download request:" .. remote_path)
- end
-
- Util.DownloadFile(remote_path, download_path, 19000)
- end
-
-
- -- 以下是对外接口
- -- 开始下载,调用前先设置回调函数
- function StepPackModule:Start()
- if self:CheckFinish() then
- if self.callback_func then
- self.callback_func(0,0,0,true)
- end
- return
- end
-
- -- 记录在流量状态下手动开始标识
- if not Util.IsWifi then
- self.no_wifi_download = true
- end
-
- if self.work_state or self.download_finish_state then
- return
- end
- self.work_state = true
- Runner.Instance:AddRunObj(self, 10)
-
- Util.SetDownloadFileFunc(download_func)
-
- local func = function(update_size,update_count,update_list)
- self.res_checking_state = false
- self.update_res_count = update_count
- self.update_res_size = update_size
-
- --Debugger.Log("---update_res---" .. self.update_res_count .. "/" .. self.update_res_size)
-
- if self.update_res_count == 0 then
- self.download_finish_state = true
- self.work_state = false
-
- if self.callback_func then
- self.callback_func(0,0,0,true)
- end
-
- CookieWrapper.Instance:SaveCookie(CookieLevelType.Common,CookieTimeType.TYPE_ALWAYS,CookieKey.SILENT_ASSETS_FINISH,"finish")
- CookieWrapper.Instance:WriteAll()
-
- return
- end
-
- self.hight_res_list = update_list
- end
-
- self.res_checking_state = true
-
- local frame_check_count = 15
- if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
- frame_check_count = 5
- elseif SystemMemoryLevel.Cur == SystemMemoryLevel.Middle then
- frame_check_count = 10
- end
-
- Util.CheckUpdateFileList("unitybundle",func,frame_check_count)
-
- local update_func = function()
- if self.all_download_size > 0 and not self.pause_state then
- local add = self.all_download_size - self.last_show_speed_size
- self.last_download_speed = add / self.earch_download_wait_time
- if self.callback_func then
- self.callback_func(self.all_download_size,self.update_res_size,self.last_download_speed,self.download_finish_state)
- end
- self.last_show_speed_size = self.all_download_size
- end
- end
- self.update_speed_timer = TimerQuest.AddPeriodQuest(GlobalTimerQuest, update_func, self.earch_download_wait_time, -1)
-
- if tonumber(AppConst.EnglineVer) > 83 then
- local write_func = function()
- Util.AutoWriteVersionFile(20)
- end
- self.delay_write_version_timer = TimerQuest.AddPeriodQuest(GlobalTimerQuest, write_func, 20, -1)
- end
- end
-
- -- 设置暂停状态
- function StepPackModule:SetPauseState( state )
- self.pause_state = state
- self.download_now = false
-
- -- 记录在流量状态下手动开始标识
- if not self.pause_state and not Util.IsWifi then
- self.no_wifi_download = true
- end
- end
-
- -- 设置下载回调函数
- -- func(已下载量,总更新量,当前更新速度,是否已更新完成)
- function StepPackModule:SetCallbackFunc( func )
- self.callback_func = func
- if self.callback_func and self.all_download_size > 0 then
- self.callback_func(self.all_download_size,self.update_res_size,self.last_download_speed,self.download_finish_state)
- end
- end
-
- function StepPackModule:IsResCheckState()
- return self.res_checking_state
- end
-
- -- 状态: 0 未开始 1 暂停 2 下载中 3 已下载完成
- function StepPackModule:CurrentPackState()
- if self:CheckFinish() then
- return 3
- end
-
- if self.pause_state then
- return 1
- end
-
- if self.work_state then
- return 2
- end
-
- if self.download_finish_state then
- return 3
- end
-
- return 0
- end
-
- -- 是否支持静默下载
- function StepPackModule:IsSupport()
- if AppConst_EnglineVer > 44 and AppConst.UpdateMode and SystemMemoryLevel.Cur ~= SystemMemoryLevel.Low then
- return true
- end
-
- return false
- end
-
- function StepPackModule:CheckFinish()
- local flag = CookieWrapper.Instance:GetCookie(CookieLevelType.Common, CookieKey.SILENT_ASSETS_FINISH)
- local assets_update = false
- if AppConst_EnglineVer > 41 then
- assets_update = AppConst.SilentAssetsUpdate
- end
-
- if flag == "finish" and not assets_update then
- self.download_finish_state = true
- self.work_state = false
- end
-
- return self.download_finish_state
- end
-
-
- function StepPackModule:CheckAutoUpdate()
- local real_start = function()
- self:Start()
- GlobalEventSystem:Fire(EventName.AFTER_AUTO_UPDATE_RES)
-
- CookieWrapper.Instance:SaveCookie(CookieLevelType.Common,CookieTimeType.TYPE_ALWAYS,CookieKey.SILENT_ASSETS_FINISH,"no")
- CookieWrapper.Instance:WriteAll()
- end
-
- if self:IsSupport() and Util.IsWifi and ClientConfig.auto_slient_update and (RoleManager and RoleManager.Instance.mainRoleInfo.level > 120) then
- if not self:CheckFinish() then
- real_start()
- end
- else
- -- --进入游戏时非wifi,一分钟定时检测如果切换到wifi则自动开启
- -- if self:IsSupport() and not Util.IsWifi and not self:CheckFinish() and ClientConfig.auto_slient_update then
-
- -- local cancel_check = function()
- -- if self.check_wifi_open then
- -- TimerQuest.CancelQuest(GlobalTimerQuest, self.check_wifi_open)
- -- self.check_wifi_open = nil
- -- end
- -- end
-
- -- cancel_check()
-
- -- local check_func = function()
- -- if self.work_state or self:CheckFinish() then
- -- cancel_check()
- -- return
- -- end
-
- -- if Util.IsWifi then
- -- cancel_check()
- -- real_start()
- -- end
- -- end
- -- self.check_wifi_open = TimerQuest.AddPeriodQuest(GlobalTimerQuest, check_func, 60, -1)
- -- end
- end
- end
|