/// <summary> /// 2 Creates the content of the crc list. /// </summary> /// <returns>The crc list content.</returns> /// <param name="allBundles">All bundles.</param> /// <param name="manualFileList">manual file list.</param> public static StringBuilder[] CreateCrcListContent(string[] allBundles, Dictionary <string, object[]> firstCrcDict, Dictionary <string, object[]> currCrcDict, Dictionary <string, object[]> diffCrcDict, HashSet <string> manualFileList) { string title = "create crc list content "; StringBuilder[] sbs = new StringBuilder[2]; sbs[0] = new StringBuilder(); sbs[1] = new StringBuilder(); //var selected = string.Empty; float i = 0; float allLen = allBundles.Length; //group 0 manual,normal var manual0 = new StringBuilder(); var normal0 = new StringBuilder(); //group 1 manual,normal var manual1 = new StringBuilder(); var normal1 = new StringBuilder(); //忽略列表 Dictionary <string, bool> ignore = new Dictionary <string, bool>(); ignore.Add(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), true); ignore.Add(CUtils.GetRightFileName(Common.CRC32_VER_FILENAME), true); CrcCheck.Clear(); filterSB getCurrSB = (string key, StringBuilder manual, StringBuilder normal, HashSet <string> manualList) => { if (manualList.Contains(key)) { return(manual); } else { return(normal); } }; StringBuilder currSb; string extension; foreach (var str in allBundles) { string url = Path.Combine(Application.dataPath, str); uint outCrc = 0; uint fileLen = 0; string abName = str.Replace("\\", "/"); string key = BuildScript.GetAssetBundleName(abName); //后缀替换 extension = System.IO.Path.GetExtension(key); if (!string.IsNullOrEmpty(extension) && extension.Equals(Common.DOT_BYTES)) { key = key.Replace(extension, Common.CHECK_ASSETBUNDLE_SUFFIX); } if (!ignore.ContainsKey(key)) { outCrc = CrcCheck.GetLocalFileCrc(url, out fileLen); currCrcDict[key] = new object[] { outCrc, fileLen, str }; currSb = getCurrSB(key, manual0, normal0, manualFileList); currSb.AppendLine("[\"" + key + "\"] = {" + outCrc + "," + fileLen + "},"); object[] fCrc = null; if (firstCrcDict.TryGetValue(key, out fCrc) == false || (uint)fCrc[0] != outCrc)//如果不一样 { diffCrcDict[key] = new object[] { outCrc, fileLen, str }; // Debug.LogFormat("need update abName = {0} = {1} = {2}",abName,key,outCrc); currSb = getCurrSB(key, manual1, normal1, manualFileList); currSb.AppendLine("[\"" + key + "\"] = {" + outCrc + "," + fileLen + "},"); } } EditorUtility.DisplayProgressBar(title, title + "=>" + i.ToString() + "/" + allLen.ToString(), i / allLen); i++; } sbs[0].Append("return {"); sbs[0].AppendLine("[\"manual\"] = { "); sbs[0].AppendLine(manual0.ToString() + "},"); sbs[0].AppendLine("[\"normal\"] = { "); sbs[0].AppendLine(normal0.ToString() + "}"); sbs[0].AppendLine("}"); sbs[1].Append("return {"); sbs[1].AppendLine("[\"manual\"] = { "); sbs[1].AppendLine(manual1.ToString() + "},"); sbs[1].AppendLine("[\"normal\"] = { "); sbs[1].AppendLine(normal1.ToString() + "}"); sbs[1].AppendLine("}"); CrcCheck.Clear(); EditorUtility.ClearProgressBar(); return(sbs); }
/// <summary> /// 2 Creates the content of the crc list. /// </summary> /// <returns>The crc list content.</returns> /// <param name="allBundles">All bundles.</param> /// <param name="whiteFileList">White file list.</param> /// <param name="blackFileList">Black file list.</param> public static StringBuilder[] CreateCrcListContent(string[] allBundles, Dictionary <string, uint[]> firstCrcDict, Dictionary <string, uint[]> currCrcDict, Dictionary <string, uint[]> diffCrcDict, HashSet <string> whiteFileList, HashSet <string> blackFileList) { string title = "create crc list content "; StringBuilder[] sbs = new StringBuilder[2]; sbs[0] = new StringBuilder(); sbs[1] = new StringBuilder(); //var selected = string.Empty; float i = 0; float allLen = allBundles.Length; //group 0 white,black,other var white0 = new StringBuilder(); var black0 = new StringBuilder(); var other0 = new StringBuilder(); //group 1 white,black,other var white1 = new StringBuilder(); var black1 = new StringBuilder(); var other1 = new StringBuilder(); //忽略列表 Dictionary <string, bool> ignore = new Dictionary <string, bool>(); ignore.Add(CUtils.GetRightFileName(Common.CRC32_FILELIST_NAME), true); ignore.Add(CUtils.GetRightFileName(Common.CRC32_VER_FILENAME), true); CrcCheck.Clear(); filterSB getCurrSB = (string key, StringBuilder white, StringBuilder black, StringBuilder other, HashSet <string> whiteList, HashSet <string> blackList) => { if (whiteList.Contains(key)) { return(white); } else if (blackList.Contains(key)) { return(black); } else { return(other); } }; StringBuilder currSb; foreach (var str in allBundles) { string url = Path.Combine(CUtils.GetRealStreamingAssetsPath(), str); uint outCrc = 0; uint fileLen = 0; string abName = str.Replace("\\", "/"); string key = CUtils.GetAssetBundleName(abName); if (!ignore.ContainsKey(key)) { outCrc = CrcCheck.GetLocalFileCrc(url, out fileLen); currCrcDict.Add(key, new uint[] { outCrc, fileLen }); currSb = getCurrSB(key, white0, black0, other0, whiteFileList, blackFileList); currSb.AppendLine("[\"" + key + "\"] = {" + outCrc + "," + fileLen + "},"); uint[] fCrc = null; if (firstCrcDict.TryGetValue(key, out fCrc) == false || fCrc[0] != outCrc)//如果不一样 { diffCrcDict.Add(key, new uint[] { outCrc, fileLen }); // Debug.LogFormat("need update abName = {0} = {1} = {2}",abName,key,outCrc); currSb = getCurrSB(key, white1, black1, other1, whiteFileList, blackFileList); currSb.AppendLine("[\"" + key + "\"] = {" + outCrc + "," + fileLen + "},"); } } EditorUtility.DisplayProgressBar(title, title + "=>" + i.ToString() + "/" + allLen.ToString(), i / allLen); i++; } sbs[0].Append("return {"); sbs[0].AppendLine("[\"white\"] = { "); sbs[0].AppendLine(white0.ToString() + "},"); sbs[0].AppendLine("[\"black\"] = { "); sbs[0].AppendLine(black0.ToString() + "},"); sbs[0].AppendLine("[\"other\"] = { "); sbs[0].AppendLine(other0.ToString() + "}"); sbs[0].AppendLine("}"); sbs[1].Append("return {"); sbs[1].AppendLine("[\"white\"] = { "); sbs[1].AppendLine(white1.ToString() + "},"); sbs[1].AppendLine("[\"black\"] = { "); sbs[1].AppendLine(black1.ToString() + "},"); sbs[1].AppendLine("[\"other\"] = { "); sbs[1].AppendLine(other1.ToString() + "}"); sbs[1].AppendLine("}"); CrcCheck.Clear(); EditorUtility.ClearProgressBar(); return(sbs); }