Beispiel #1
0
    private List <HotUpdateAssetItem> CheckDifferent(HotUpdateAssetsList localList, HotUpdateAssetsList serverList)
    {
        var differentList = new List <HotUpdateAssetItem>();
        Dictionary <string, HotUpdateAssetItem> dictionary = new Dictionary <string, HotUpdateAssetItem>();

        for (int i = 0; i < localList.assetList.Count; i++)
        {
            var item = localList.assetList[i];
            dictionary.Add(item.assetPath, item);
        }
        for (int i = 0; i < serverList.assetList.Count; i++)
        {
            var item = serverList.assetList[i];
            if (dictionary.ContainsKey(item.assetPath))
            {
                if (dictionary[item.assetPath].md5 != item.md5)
                {
                    differentList.Add(item);
                }
            }
            else
            {
                differentList.Add(item);
            }
        }
        return(differentList);
    }
Beispiel #2
0
 public void CheckNeedUpdate()
 {
     //从资源服务器下载,资源列表
     _resourceLoader.LoadRemoteAsset(Path.Combine(Application.platform.ToString(), assetsListName), "", (data) =>
     {
         string jsonStr = System.Text.Encoding.UTF8.GetString(data);
         HotUpdateAssetsList serverAssetsList = JsonUtility.FromJson <HotUpdateAssetsList>(jsonStr);
         //读取本地资源维护表
         string localAssetOutAppFilePath = Path.Combine(Application.persistentDataPath, localAssetOutAppName);
         if (File.Exists(localAssetOutAppFilePath))
         {
             localAssetOutAppList = JsonUtility.FromJson <HotUpdateAssetsList>(File.ReadAllText(localAssetOutAppFilePath));
         }
         else
         {
             localAssetOutAppList = new HotUpdateAssetsList();//记录本地已经热更新过得资源
         }
         //读取本地资源md5文件
         string localListPath = "";
         if (!File.Exists(Path.Combine(Application.persistentDataPath, assetsListName)))//应该是没更新过,本地资源列表还在app包内
         {
             // FileStream file = new FileStream(filePath, System.IO.FileMode.Open);
             localListPath = UrlCombine.GetLocalUrl(assetsListName, true, Application.platform);
         }
         else
         {
             localListPath = UrlCombine.GetLocalUrl(assetsListName, false, Application.platform);
         }
         //加载本地表,加载完成后比较本地和服务器返回表
         string localAssetListJsonStr                  = File.ReadAllText(localListPath);
         HotUpdateAssetsList localAssetList            = JsonUtility.FromJson <HotUpdateAssetsList>(localAssetListJsonStr);
         List <HotUpdateAssetItem> needUpdateAssetList = CheckDifferent(localAssetList, serverAssetsList);
         //加在更新资源
         int loadedAssetCouint = 0;
         for (int i = 0; i < needUpdateAssetList.Count; i++)
         {
             var assetInfo = needUpdateAssetList[i];
             _resourceLoader.LoadRemoteAsset(assetInfo.assetPath, assetInfo.md5, (assetBytes) =>
             {
                 loadedAssetCouint++;
                 UpdateOutAppAssetPath(assetInfo);
                 string assetPath = Path.Combine(Application.persistentDataPath, assetInfo.assetPath);
                 WriteFile(assetPath, assetBytes);
                 if (loadedAssetCouint == needUpdateAssetList.Count)
                 {
                     //全部资源更新完成,更新本地表格
                     string assetListJsonString = JsonUtility.ToJson(serverAssetsList);
                     WriteFile(Path.Combine(Application.persistentDataPath, assetsListName), assetListJsonString);
                     string assetOutAppJsonString = JsonUtility.ToJson(localAssetOutAppList);
                     WriteFile(localAssetOutAppFilePath, assetOutAppJsonString);
                 }
             });
         }
     });
 }
    private static void CreateAssetList(string assetBundleFullPath)
    {
        EditorUtility.DisplayProgressBar("CreateAssetsList", "progress: ", 0);
        //读取所有文件,并创建md5文件
        HotUpdateAssetsList hotUpdateAssetsList = new HotUpdateAssetsList();
        DirectoryInfo       directoryInfo       = new DirectoryInfo(assetBundleFullPath);

        FileInfo[] allAsset = directoryInfo.GetFiles();
        for (int i = 0; i < allAsset.Length; i++)
        {
            EditorUtility.DisplayProgressBar("CreateAssetsList", "progress: ", 1f * i / allAsset.Length);
            FileInfo fileInfo          = allAsset[i];
            string   fullName          = fileInfo.FullName.Replace("\\", "/");
            string   rootDirectoryPath = assetBundleFullPath.Replace("\\", "/");
            string   assetName         = fullName.Substring(rootDirectoryPath.Length + 1);
            if (assetName == assetListName)
            {
                continue;
            }
            if (assetName.Split('.').Length > 0)
            {
                assetName = assetName.Split('.')[0];
            }
            //StreamReader fileStream = fileInfo.OpenText();
            //string fileStr = fileStream.ReadToEnd();
            //fileStream.Close();
            string             md5 = MD5Builder.BuildMD5(fileInfo.FullName);
            HotUpdateAssetItem hotUpdateAssetItem = new HotUpdateAssetItem(assetName, md5);
            hotUpdateAssetsList.assetList.Add(hotUpdateAssetItem);
        }
        EditorUtility.ClearProgressBar();
        EditorUtility.DisplayProgressBar("Write \"CreateAssetsList to file\" ", "progress: ", 0);
        string assetListJsonStr = JsonUtility.ToJson(hotUpdateAssetsList);
        string assetListPath    = Path.Combine(assetBundleFullPath, assetListName);

        File.WriteAllText(assetListPath, assetListJsonStr);
        EditorUtility.ClearProgressBar();
    }