/// <summary>
        /// Processes a single item.
        /// </summary>
        /// <param name="input">The input to process.</param>
        /// <returns>The output of the process.</returns>
        public override IAssetFile Process(IAssetFile input)
        {
            try
            {
                // Get the content
                var content = input.Content.AsString();

                // Attempt to extract headers, if none simply return the input
                int endOffset;
                var header = AssetHeader.FromString(content, out endOffset);
                if (header == null)
                {
                    return(input);
                }

                //dynamic head = header;
                //Console.WriteLine("layout: " + (string)head.layout);
                //Console.WriteLine("title: " + (string)head.title);

                // Return processed output
                return(AssetOutputFile.Create(
                           from: input,
                           content: content.Remove(0, endOffset).TrimStart(),
                           meta: header
                           ));
            }
            catch (Exception ex)
            {
                // We didn't manage to create anything
                Tracing.Error("Header", ex);
                return(null);
            }
        }
        public static void ClassInitialize(TestContext context)
        {
            var file = @".\Data\bundle_5.1.unity3d";
            var abr  = new AssestFile(file);

            _header = abr.AssetHeader;
        }
        public static AssetOutputFile Create(IAssetFile from, byte[] content, AssetHeader meta = null, string extension = null)
        {
            var name = extension == null
                ? new FileInfo(from.FullName)
                : new FileInfo(Path.ChangeExtension(from.FullName, extension));

            var head = meta == null
                ? from.Meta
                : meta;

            return new AssetOutputFile(
                from.Project,
                name,
                head,
                content
                );
        }
        static void CreateAssetHeaders(AssetBundleManifest manifest, string path)
        {
            AssetHeader header = null;

            string[] dependencies = null;
            string   urlPath      = SceneLoader.ASSET_SERVER + path;

            foreach (var assetBundleName in manifest.GetAllAssetBundles())
            {
                // Setup header info
                header              = new AssetHeader(urlPath + assetBundleName, 0);
                header.size         = new FileInfo(path + assetBundleName).Length;
                dependencies        = manifest.GetAllDependencies(assetBundleName);
                header.dependencies = new string[dependencies.Length];
                for (int i = 0; i < dependencies.Length; i++)
                {
                    header.dependencies[i] = urlPath + dependencies[i];
                }

                // Save into file
                string fileName = path + assetBundleName + AssetHeader.SUFFIX;
                File.WriteAllText(fileName, JsonUtility.ToJson(header));
            }
        }
Example #5
0
 public void Add(AssetHeader ObjToSave)
 {
     _context.AssetHeaders.Add(ObjToSave);
 }
Example #6
0
 public AssetHeader GetAssetHeader(AssetHeader item)
 {
     return((AssetHeader)assetheaderDAL.GetItem <AssetHeader>(item));
 }
Example #7
0
 public bool DeleteAssetHeader(AssetHeader item)
 {
     return(assetheaderDAL.Delete(item));
 }
Example #8
0
 public bool SaveAssetHeader(AssetHeader newItem)
 {
     return(assetheaderDAL.Save(newItem));
 }
Example #9
0
        public static void WriteAssetPackage(FileStream outputFileStream, IList <FileInfo> inputFiles,
                                             bool useCache)
        {
            using BinaryWriter headerWriter = new BinaryWriter(outputFileStream, Encoding.UTF8);

            //Write amount of assets
            headerWriter.Write(inputFiles.Count);
            headerWriter.Flush();

            foreach (FileInfo file in inputFiles)
            {
                var writer = AssetLoaderResolver.FindAssetWriter(file.Extension);

                var        metaFile = AssetFileHelpers.GetMetaFile(file);
                IAssetMeta meta     = new JsonAssetMeta();

                writer.GetDefaultMeta(meta);

                if (metaFile.Exists)
                {
                    using var fs = metaFile.OpenRead();
                    meta.ReadFromStream(fs);
                }

                Stopwatch watch = new Stopwatch();
                watch.Start();

                Console.WriteLine($"Processing file: {file}.");

                using MemoryStream uncompressedOutput = new MemoryStream();
                using MemoryStream compressedOutput   = new MemoryStream();

                if (AssetCacher.HasCachedFile(file, meta) && useCache)
                {
                    AssetCacher.LoadCachedFile(file, meta, uncompressedOutput);
                    Console.WriteLine("Cached found!");
                }
                else
                {
                    Console.WriteLine("No cached asset found");
                    writer.LoadAndWriteToStream(file, meta, uncompressedOutput);
                    AssetCacher.SaveCachedFile(file, meta, uncompressedOutput);
                }

                Console.WriteLine($"Processing took: {watch.ElapsedMilliseconds} milliseconds.");

                watch.Restart();
                Console.WriteLine("Compressing...");

                using DeflateStream deflate = new DeflateStream(compressedOutput, CompressionLevel.Optimal, true);

                uncompressedOutput.Seek(0, SeekOrigin.Begin);
                uncompressedOutput.CopyTo(deflate);
                deflate.Flush();

                string      assetName = AssetFileHelpers.GetAssetName(file);
                System.Type assetType = writer.GetAssetType();

                long length           = uncompressedOutput.Length;
                long compressedLength = compressedOutput.Length;

                AssetHeader.WriteAssetHeader(headerWriter, assetName, assetType, AssetCompression.Deflate, length, compressedLength);
                compressedOutput.Seek(0, SeekOrigin.Begin);
                compressedOutput.CopyTo(outputFileStream);

                watch.Stop();
                Console.WriteLine($"Compression took: {watch.ElapsedMilliseconds} milliseconds.");
            }
        }
 public static AssetOutputFile Create(IAssetFile from, MemoryStream content, AssetHeader meta = null, string extension = null)
 {
     return Create(from, content.ToArray(), meta, extension);
 }
 public static AssetOutputFile Create(IAssetFile from, string content, AssetHeader meta = null, string extension = null)
 {
     return Create(from, Encoding.UTF8.GetBytes(content), meta, extension);
 }
 /// <summary>
 /// Constructs a new file wrapper around a file info.
 /// </summary>
 /// <param name="file">The file info to wrap.</param>
 /// <param name="meta">The metadata associated with the output file.</param>
 /// <param name="project">The project of this file.</param>
 /// <param name="content">The content of the output file.</param>
 public AssetOutputFile(SiteProject project, FileInfo file, AssetHeader meta, byte[] content)
     : base(project, file)
 {
     this.CachedContent = content;
     this.Meta = meta;
 }