public ClientAssetModel GetNewestObjByPackageName(string packageName) { ClientAssetModel value = null; PackageObjMap.TryGetValue(packageName, out value); return(value); }
private async Task <string> CreateAssetObjForFile(AssetFileModel file, StreamWriter loger) { if (file == null) { return(""); } string apiname = SvrDataMan.GetApiNameByTypeName(file.Type); if (apiname == "") { loger.WriteLine($"{DateTime.Now}, CREATE, {file.Package}, {file.Type}, apiname is empty. skip create object"); return(""); } //update dependencies after all files uploaded. if (file.Dependencies?.Count > 0) { updateFileDependencies(file); } ApiResponseStr res = null; StaticMeshModel mesh = null; //create var obj = new StaticMeshModel(); //all assets has same structure. but use staticmesh for safety for staticmesh case. obj.name = file.Name; obj.packageName = file.Package; obj.fileAssetId = file.cookedfid; obj.unCookedAssetId = file.uncookedfid; obj.srcFileAssetId = file.srcfid; obj.iconAssetId = file.iconfid; obj.dependencies = file.dependencies; obj.properties = file.properties; obj.parameters = file.properties; res = await api.PostAsync($"/{apiname}", obj); if (res.IsSuccess && string.IsNullOrEmpty(res.Content) == false) { ClientAssetModel resobj = Newtonsoft.Json.JsonConvert.DeserializeObject <ClientAssetModel>(res.Content); file.ObjId = resobj?.id; obj.id = resobj?.id; loger.WriteLine($"{DateTime.Now}, CREATE, {file.Package}, {file.Type}, {file.ObjId}"); cache.New(file.ObjId, file.Type, obj); } else { loger.WriteLine($"{DateTime.Now}, CREATE, {file.Package}, {file.Type}, create failed. {res.StatusCode}, {res.Content}"); } mesh = obj as StaticMeshModel; return(res.IsSuccess ? "ok" : "failed " + res.StatusCode); }
AssetFileModel EntityToAssetFileModel(ClientAssetModel e, string type, string classs) { AssetFileModel model = new AssetFileModel(); model.Type = type; model.Class = classs; model.Name = e.name; model.FileId = e.fileAssetId; model.ObjId = e.id; model.Package = e.packageName; model.SizeStr = new FileSize(e.fileAsset?.size).ToString(); model.CookedFileState = string.IsNullOrEmpty(e.fileAssetId) ? "Y" : ""; model.UncookedFileState = string.IsNullOrEmpty(e.unCookedAssetId) ? "Y" : ""; model.SourceFileState = string.IsNullOrEmpty(e.srcFileAssetId) ? "Y" : ""; model.UpdateTm = e.modifiedTime.ToString(); return(model); }
void recordPackageEntity(string packageName, ClientAssetModel entityObj) { if (packageName == null) { packageName = ""; } if (PackageObjMap.ContainsKey(packageName)) { var existed = PackageObjMap[packageName]; if (entityObj.modifiedTime > existed.modifiedTime) { PackageObjMap[packageName] = entityObj; } } else { PackageObjMap[packageName] = entityObj; } }
public async Task <int> DownloadAsset(object obj, StreamWriter loger) { ClientAssetModel asset = obj as ClientAssetModel; if (asset == null || string.IsNullOrEmpty(asset?.unCookedAssetId)) { progress.CurPos++; progress.Status = ""; loger.WriteLine($"{progress.CurPos} invalid object. uncooked assetid {asset?.unCookedAssetId}"); return(0); } //get file from cache. FileModel file = cache.Parsed.GetById(asset.unCookedAssetId) as FileModel; //get file from server it not found in cache. if (file == null) { var fileres = await api.GetAsync <FileModel>("/files/" + asset.unCookedAssetId); if (fileres.IsSuccess == false || fileres.Content == null) { progress.CurPos++; progress.Status = ""; loger.WriteLine($"{progress.CurPos} object {asset.id} {asset.name} get file asset failed."); return(0); } file = fileres.Content; } string localPath = getFileModelDownloadPath(file); //download dependencies if (string.IsNullOrEmpty(asset?.dependencies) == false) { char[] spliter1 = { ';' }; char[] spliter2 = { ',' }; var deps = asset.dependencies.Split(spliter1); loger.WriteLine($"{progress.CurPos} object {asset.id} {asset.name} add {deps.Length} dependencies."); progress.Total += deps.Length; foreach (var dep in deps) { var depinfo = dep.Split(spliter2); if (depinfo == null || depinfo.Length < 2) { progress.CurPos++; continue; } string url = depinfo[0]; string package = depinfo[1]; ClientAssetModel dependAsset = null; if (cache.Parsed.PackageObjMap.ContainsKey(package)) { dependAsset = cache.Parsed.PackageObjMap[package] as ClientAssetModel; } if (dependAsset != null) { await DownloadAsset(dependAsset, loger); } } } if (File.Exists(localPath)) { string md5 = Md5Helper.Md5File(localPath); if (md5 == file.md5) { return(0); } } Directory.CreateDirectory(Path.GetDirectoryName(localPath)); string message = ""; try { await api.DownloadFile(file.url, localPath); } catch (Exception ex) { message = ex.Message; loger.WriteLine($"{progress.CurPos} object {asset.id} {asset.name} download failed. {ex.Message}"); } progress.CurPos++; progress.Status = $"{asset.id} {asset.name} {message}"; loger.WriteLine($"{progress.CurPos} object {asset.id} {asset.name} download success"); loger.Flush(); return(1); }