最近工作调整从游戏开发部门,调岗到平台支持部门,工作内容自然也有变动。现在主要工作内容是将游戏内所有收益活动拿出来做一个SDK,类似腾讯潘多拉,主要功能是 集成游戏内所有收益活动,后续公司的游戏只需要接入这个SDK就可以控制,所有收益活活动,其中也包括数据的采集分析等,对于项目来说好处还是很明显的,因为这块单独拿出来做,从开发 到数据分析都不需要开发组去做了,而且可以根据采集的数据进行道具的投放。
很久没写过东西了,主要是因为懒……最近情绪一直不是很高,又不知道怎么解决,希望疫情快点过去吧
进入正题吧
项目采用Slua +C# 除了view层的代码,基本还都是用C#来写,然后导出Lua接口供Lua调用。 最近写了一个并行下载的模块,就记录一下吧,还是希望自己能够坚持写下去
需求
- 根据提供的下载地址和保存地址,进行下载文件并保存
- 根据服务器提供的MD5码校验下载的文件是否正确
- 根据MD5码和保存路径判断本地是否有当前文件
- 设置下载超时功能,超时后判定当前下载失败
- 单个文件下载次数设置,每个文件下载三次均失败则不再下载
- 提供每个文件下载进度返回,下载完成返回
- 并行下载功能,目前设置是三个并行下载
思路
- 需要参数:下载地址、保存路径、MD5、下载进度回调函数、下载完成回调函数。
- 因为每个下载进度都要进行返回,所以写一个内部类AssetDLItem,储存当前文件的下载信息,比如下载地址、保存路径、和回调函数等。
- 创建两个List
列表,一个用来保存所有要下载的资源m_AssetDLList,另一个保存当前正在下载的资源m_TempParallelDownloadList,且当开始下载的时候从m_AssetDLList移除 并添加进m_TempParallelDownloadList列表中,下载完成或者下载三次均失败则从m_TempParallelDownloadList中移除。 - 根据文件下载状态和下载次数判断当前文件是否要继续下载
- 在Update中调用下载函数,并判断两个列表中下载文件的状态执行下载还是等待。
- 下载完成后保存文件并校验MD5并返回下载完成回调函数
代码
1 |
|
最后
其实很简单,上面就是全部代码了,最后思考一下,如果客户端本地保存了一张本地资源的表,然后根据本地资源表 进行和服务器的表比较,然后确定哪些资源需要下载,然后执行下载,那么就需要写一个 资源表的读取,和服务器表的比较,其实也比较简单,我写了一部分后来用不到 就注释了,因为没有测试就不贴出来了。