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(""); } }