Example #1
0
    private void CheckFingerPrintWithServer(string json)
    {
        string   url      = "Assetbundle/CheckBundle";
        JsonData tempData = new JsonData();

                #if UNITY_ANDROID
        tempData["local_files"]    = json;
        tempData["no_compression"] = "1";
                #else
        tempData["local_files"] = Convert.ToBase64String(GZipUtil.Zip(json));
                #endif

        byte[] Data = System.Text.Encoding.UTF8.GetBytes(tempData.ToJson());
        StaticMonoBehaviour.Instance.StartCoroutine(HttpRequest.Instance.WebRequest(HttpRequest.HttpReqType.POST, url, Data, (string Json) => {
            JsonData tempJson = JsonMapper.ToObject(Json);
            JsonData data     = tempJson["data"];
                        #if UNITY_ANDROID
            string filesUpdate = data ["file_to_update"].ToString();
            string filesDelete = data ["file_to_delete"].ToString();
                        #else
            string filesUpdate = GZipUtil.UnZipToString(Convert.FromBase64String(data["file_to_update"].ToString()));
            string filesDelete = GZipUtil.UnZipToString(Convert.FromBase64String(data["file_to_delete"].ToString()));
            LogManager.Log("file_to_update: " + filesUpdate);
            LogManager.Log("file_to_delete: " + filesDelete);
                        #endif
            FingerPrint.StartWriting(m_AssetBundlePath);
            if (!string.IsNullOrEmpty(filesDelete))
            {
                JsonData jdFilesDelete = JsonMapper.ToObject(filesDelete);
                for (int i = 0; i < jdFilesDelete.Count; ++i)
                {
                    var filePath = m_AssetBundlePath + jdFilesDelete[i].ToString();
                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                    }
                    FingerPrint.DeleteItem(filePath, m_AssetBundlePath);
                }
            }
            FingerPrint.Flush();
            //有需要更新的文件
            if (!string.IsNullOrEmpty(filesUpdate))
            {
                JsonData jdFilesUpdate = JsonMapper.ToObject(filesUpdate);
                string staticServer    = data["static_server"].ToString();
                string platformPath    = data["platform_path"].ToString();
                List <string> paths    = GetPathFromJson(jdFilesUpdate, "");
                if (paths.Count > 0)
                {
                    DownloadFiles(paths, staticServer, platformPath);
                }
                else
                {
                    Ready();
                }
            }
        }, NetworkFail));
    }
    public static string ExportAsGzip(bool withEx)
    {
        string root = Path.GetFullPath(Application.dataPath + "/../../../");

        // 获取本工程中git忽略的文件列表
        List <string> gitIgnores = GetGitIgnores(root);

        if (gitIgnores == null)
        {
            return("");
        }

        try {
            // 解析Framework配置文件
            var    configurations = ParseFrameworkConfiguration(root + "framework/framework.conf");
            string version        = configurations["version"][0];
            var    foldersCopyAll = configurations["folders_copy_all"];
            var    ignores        = new List <string>();
            var    ignoresEx      = new List <string>();
            if (configurations.ContainsKey("ignore_public"))
            {
                ignores.AddRange(configurations["ignore_public"]);
                ignoresEx.AddRange(configurations["ignore_public"]);
            }
            if (configurations.ContainsKey("ignore_framework"))
            {
                ignores.AddRange(configurations["ignore_framework"]);
            }
            if (configurations.ContainsKey("ignore_framework_ex"))
            {
                ignoresEx.AddRange(configurations["ignore_framework_ex"]);
            }

            string          fileMap          = "";
            bool            hasRecordFileMap = false;
            UpkPack.Ignored ignoreFunc       = (FileInfo fileInfo) => {
                bool ex           = withEx && hasRecordFileMap;
                var  relativePath = fileInfo.FullName.Replace(root, "").Replace('\\', '/');
                // 过滤所有不在Framework文件夹中的文件
                if (!IsInFrameworkFolder(relativePath, foldersCopyAll, ex))
                {
                    return(true);
                }
                // 过滤.gitignore中忽略的文件
                if (IsIgnored(relativePath, gitIgnores))
                {
                    return(true);
                }
                // 过滤.frameworkignore中忽略的文件
                if (IsIgnored(relativePath, ex ? ignoresEx : ignores))
                {
                    return(true);
                }
                // 过滤非本版本的文件地图文件
                if (IsInvalidFileMap(relativePath, version))
                {
                    return(true);
                }

                if (!hasRecordFileMap)
                {
                    fileMap += relativePath + "\n";
                }

                return(false);
            };
            // 记录文件地图
            UpkPack.TraverseFolder(root, false, ignoreFunc);
            var fileMapPath = Path.Combine(root, "framework/filemap/" + GetFileMapName(version));
            CheckCreateDirectory(fileMapPath);
            File.WriteAllText(fileMapPath, fileMap);
            hasRecordFileMap = true;
            // 合并为upk
            var upkPath = Path.Combine(root, "framework/output/v" + version + (withEx ? "_ex" : "") + ".upk");
            CheckCreateDirectory(upkPath);
            UpkPack.PackFolder(root, upkPath, false, ignoreFunc);
            // 压缩为gzip
            var gzipPath = Path.Combine(root, "framework/output/v" + version + (withEx ? "_ex" : "") + ".upk.gz");
            CheckCreateDirectory(gzipPath);
            File.WriteAllBytes(gzipPath, GZipUtil.Zip(File.ReadAllBytes(upkPath)));
            File.Delete(upkPath);
            return(gzipPath);
        } catch (System.Exception e) {
            Debug.LogError(e.Message + "\n" + e.StackTrace);
            return("");
        }
    }