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);
        }
Example #5
0
        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();
        }