OsakaRuma
OsakaRuma
**新增功能:** #861 利用HTTP分片下载机制实现ZIP流式下载,且支持分卷压缩文件,支持限速。经过测试,目前支持原神、崩坏:星穹铁道、绝区零中国官方、全球官方、哔哩哔哩的安装和更新。崩坏3因为使用了7z压缩格式,暂不支持。 **大致流程:** 1. 下载前先获取压缩文件的中央目录数据,并保存为`zipcdr`文件; 2. 解析并遍历中央目录数据中的目录实体,创建目录; 3. 解析并遍历中央目录数据中的文件实体,获取各文件的文件名、修改日期、压缩算法、压缩文件大小和在压缩文件中的偏移信息; 4. 如果有已经存在的同名文件,检查其大小和创建时间(更新时不检查创建时间,进行CRC校验); 5. 利用HTTP分片下载机制从压缩文件的特定位置开始获取压缩文件数据头,中央目录数据进行核对并校验有效性; 6. 根据中央目录数据创建文件,并预分配磁盘空间; 7. 从压缩文件头后开始下载压缩文件,并缓存到内存(不存储到硬盘),边下载边解压,下载完成即解压完成,下载中如果出现网络错误延迟1秒重试; 8. 下载解压完成后设置文件创建时间和修改时间,并进行CRC和文件大小校验,保证文件完整性。 **效果:** 缩减下载时硬盘占用近一半,且大幅缩减游戏安装时间。 **新增依赖:** SharpZipLib: 1.4.2    
#1037 的优化,此分支可能不稳定,**不要合并**,如需合并合并#1037。 - ~~将重试机制从单次压缩包内文件下载前移到单次数据流读取,当单个压缩包内的文件下载到一半失败时无需将其整个文件重新下载~~;✔️ - ~~将域名解析和解析的IP地址可用性检测从单次压缩包内文件下载前移到整个压缩包下载阶段,并均衡地分配服务器节点(如果DNS服务器返回多个可用IP地址)~~;✔️ - 升级时,先获删除文件列表和差异文件,根据删除文件列表删除文件后,边下载,边解压,边合并。
### Checklist - [X] My issue was not mentioned by others, and it is not a duplicate issue. ### Description 疑似 #1019 合入的代码导致。@Eric-Joker 想询问下这样写的原因是否和我理解的一样,讨论下看看有什么修复方案。 暂停继续逻辑问题,以下代码,依照我的理解,实际上是想解决暂停后马上继续会造成上一次任务未结束,下一次任务就开始了的问题。不过没有修改完整,导致启动任务时未设置`TaskItems`变量的值,导致空引用异常。 InstallGameStateModel.cs: ```C# private void ContinueOrPause()...