private async Task <string> UpdateProductSpecMesh(AssetFileModel file, ProductSpecModel spec, StreamWriter loger) { StaticMeshModel mesh = cache.Parsed.GetById(file.ObjId) as StaticMeshModel; if (mesh == null) { return("mesh obj not found " + file.ObjId); } spec.name = file.Name; spec.iconAssetId = file.iconfid; spec.ComponentsObj = new List <FProductComponentModel>(); FProductStaticMeshComponent meshcomp = new FProductStaticMeshComponent(); meshcomp.StaticMesh = mesh; meshcomp.Id = mesh.id; meshcomp.Name = mesh.name; meshcomp.Icon = file.iconurl; spec.ComponentsObj.Add(meshcomp); spec.staticMeshIds = "{\"Items\":[{\"StaticMeshId\":\"" + mesh.id + "\",\"MaterialIds\":[]}]}"; spec.PropObjToStr(); var res = await api.PutAsync <ProductSpecModel>("/productspec", spec); return(res.IsSuccess ? "ok" : "failed " + res.StatusCode); }
private async Task <string> CreateProductForMesh(AssetFileModel file, StreamWriter loger) { StaticMeshModel mesh = cache.Parsed.GetById(file.ObjId) as StaticMeshModel; if (mesh == null) { return("mesh obj not found " + file.ObjId); } ProductSpecModel spec = new ProductSpecModel(); spec.name = file.Name; spec.iconAssetId = file.iconfid; spec.IconUrl = file.iconurl; spec.ComponentsObj = new List <FProductComponentModel>(); FProductStaticMeshComponent meshcomp = new FProductStaticMeshComponent(); meshcomp.StaticMesh = mesh; meshcomp.Id = mesh.id; meshcomp.Name = mesh.name; meshcomp.Icon = file.iconurl; spec.ComponentsObj.Add(meshcomp); spec.staticMeshIds = "{\"Items\":[{\"StaticMeshId\":\"" + mesh.id + "\",\"MaterialIds\":[]}]}"; spec.PropObjToStr(); ProductModel product = new ProductModel(); product.name = file.Name; product.iconAssetId = file.iconfid; product.IconUrl = file.iconurl; var prodres = await api.PostAsync <ProductModel>("/products", product); string productId = ""; string specId = ""; if (prodres.IsSuccess && prodres.Content != null && prodres.Content.specifications?.Count > 0) { productId = prodres.Content.id; specId = prodres.Content.specifications[0]?.id; spec.id = specId; var specres = await api.PutAsync("/productspec", spec);//现在的api版本,put 不需要id if (specres.IsSuccess) { loger.WriteLine($"{DateTime.Now}, CREATE, {file.Package}, {file.Type}, {file.ObjId}, productid {prodres.Content.id} SpecId {specId} update ok"); } else { loger.WriteLine($"{DateTime.Now}, CREATE, {file.Package}, {file.Type}, {file.ObjId}, productid {prodres.Content.id} SpecId {specId} update failed. {specres.StatusCode} {specres.Content}"); } } else { loger.WriteLine($"{DateTime.Now}, CREATE, {file.Package}, {file.Type}, {file.ObjId}, create product failed. {prodres.StatusCode} {prodres.Content}"); } string ids = $"product id {productId} specid {specId}"; return(prodres.IsSuccess ? "ok " + ids : "failed " + prodres.StatusCode); }
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); }
private async Task <string> UpdateAssetObjForFile(AssetFileModel file, string assetObjid, 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; var obj = cache.Parsed.GetById(assetObjid) as ClientAssetModel; if (obj == null) { return(""); } mesh = obj as StaticMeshModel; if (string.IsNullOrEmpty(file.cookedfid) == false) { obj.fileAssetId = file.cookedfid; } if (string.IsNullOrEmpty(file.uncookedfid) == false) { obj.unCookedAssetId = file.uncookedfid; } if (string.IsNullOrEmpty(file.srcfid) == false) { obj.srcFileAssetId = file.srcfid; } if (string.IsNullOrEmpty(file.iconfid) == false) { obj.iconAssetId = file.iconfid; } obj.id = assetObjid; obj.name = file.Name; obj.dependencies = file.dependencies; obj.parameters = file.properties; res = await api.PutAsync($"/{apiname}", obj); //现在的api版本,put 不需要id //res = await api.PutAsync($"/{apiname}/{assetObjid}", obj); file.ObjId = assetObjid; if (res.IsSuccess && string.IsNullOrEmpty(res.Content) == false) { loger.WriteLine($"{DateTime.Now}, UPDATE, {file.Package}, {file.Type}, {assetObjid}, OK"); cache.Update(assetObjid, obj); } else { loger.WriteLine($"{DateTime.Now}, UPDATE, {file.Package}, {file.Type}, {assetObjid}, failed {res.StatusCode} {res.Content}"); } return(res.IsSuccess ? "ok" : "failed " + res.StatusCode); }
public void Parse(SvrDataCache.DataCacheModel Data) { Clear(); foreach (var id in Data.IdTable.Values) { string value = ""; Data.Kvp.TryGetValue(id.Id, out value); if (Types.Contains(id.Type) == false) { Types.Add(id.Type); } if (id.Type == "Texture") { TextureModel m = Newtonsoft.Json.JsonConvert.DeserializeObject <TextureModel>(value); TextureMap[id.Id] = m; ObjectsIdMap[id.Id] = m; recordPackageEntity(m?.packageName, m); } else if (id.Type == "Material") { MaterialModel m = Newtonsoft.Json.JsonConvert.DeserializeObject <MaterialModel>(value); MaterialMap[id.Id] = m; ObjectsIdMap[id.Id] = m; recordPackageEntity(m?.packageName, m); } else if (id.Type == "StaticMesh") { StaticMeshModel m = Newtonsoft.Json.JsonConvert.DeserializeObject <StaticMeshModel>(value); MeshMap[id.Id] = m; ObjectsIdMap[id.Id] = m; recordPackageEntity(m?.packageName, m); } else if (id.Type == "Map") { MapModel m = Newtonsoft.Json.JsonConvert.DeserializeObject <MapModel>(value); MapMap[id.Id] = m; ObjectsIdMap[id.Id] = m; recordPackageEntity(m?.packageName, m); } else if (id.Type == "File") { FileModel m = Newtonsoft.Json.JsonConvert.DeserializeObject <FileModel>(value); FileMap[id.Id] = m; ObjectsIdMap[id.Id] = m; parseFileObj(m); } else if (id.Type == "Product") { ProductModel m = Newtonsoft.Json.JsonConvert.DeserializeObject <ProductModel>(value); ProductMap[id.Id] = m; ObjectsIdMap[id.Id] = m; if (m.specifications?.Count > 0) { var spec = m.specifications[0]; spec.PropStrToObj(); if (spec.staticMeshes?.Count > 0) { PackageProductMap[spec.staticMeshes[0].packageName] = m; } else if (spec.ComponentsObj?.Count > 0) { foreach (var comp in spec.ComponentsObj) { var meshcomp = comp as FProductStaticMeshComponent; if (meshcomp != null) { PackageProductMap[meshcomp.StaticMesh?.packageName] = m; break; } } } } } } //fix file reference. foreach (var item in ObjectsIdMap.Values) { var asset = item as ClientAssetModel; if (asset == null) { continue; } if (asset.fileAssetId != null && FileMap.ContainsKey(asset.fileAssetId)) { asset.fileAsset = FileMap[asset.fileAssetId]; string packageName = asset.packageName; if (PackageFileMap.ContainsKey(packageName)) { List <FileModel> list = PackageFileMap[packageName]; //do not add same file asset to list. if (list.Find(obj => obj.id == asset.fileAssetId) == null) { list.Add(asset.fileAsset); } } else { List <FileModel> list = new List <FileModel>(); PackageFileMap[packageName] = list; list.Add(asset.fileAsset); } } } StaticsticsString(); }