Ejemplo n.º 1
0
        public ClientAssetModel GetNewestObjByPackageName(string packageName)
        {
            ClientAssetModel value = null;

            PackageObjMap.TryGetValue(packageName, out value);
            return(value);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        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);
        }