Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }