Пример #1
0
    // 下载资源列表文件
    public async void DownloadResListFile()
    {
        using (UnityWebRequest webRequest = new UnityWebRequest($"{PathUtility.Instance.GetResListFileUrl()}/{m_ResListFileName}"))
        {
            await webRequest.SendWebRequest();

            if (webRequest.isDone && !webRequest.isNetworkError)
            {
                ResListInfo          onlineResListInfo = ResListInfo.Descriptor.Parser.ParseFrom(webRequest.downloadHandler.data) as ResListInfo;
                List <SingleResInfo> updateList        = new List <SingleResInfo>(onlineResListInfo.Info.Count); // 预先设置容量
                FileStream           fs = new FileStream(PathUtility.Instance.GetResListFilePath(), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
                if (File.Exists(PathUtility.Instance.GetResListFilePath()))                                      // 之前更新过小版本
                {
                    int    count    = (int)fs.Length;
                    byte[] fileData = new byte[count];
                    fs.Read(fileData, 0, count);
                    ResListInfo curResListInfo = ResListInfo.Descriptor.Parser.ParseFrom(fileData) as ResListInfo;
                    GetUpdateResPaths(onlineResListInfo, curResListInfo, ref updateList);
                }
                else // 第一次更新小版本
                {
                    GetUpdateResPaths(onlineResListInfo, null, ref updateList);
                }
                ModifyLocalResFile(updateList, () => {
                    byte[] onlineData = onlineResListInfo.ToByteArray();
                    fs.Write(onlineData, 0, onlineData.Length);
                    fs.Seek(0, SeekOrigin.Begin);
                    fs.Close();
                    fs.Dispose();
                });
            }
            else
            {
                DebugUtility.Instance.Error("请求资源列表文件失败,失败原因为: " + webRequest.error);
            }
        }
    }