Esempio n. 1
0
        public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName)
        {
            var content = BuildAndLoad <object>(sourceAssetFile, contentImporter, contentProcessor, fileName);

            Compile(OutputFilename, content);
            return(OutputFilename);
        }
Esempio n. 2
0
        public TRuntime Load <TRuntime>(string sourceAssetFile, IImporter importer, IProcessor processor)
        {
            var content = BuildAndLoad <object>(sourceAssetFile, importer, processor, null);

            if (content == null)
            {
                return(default(TRuntime));
            }
            Compile(OutputFilename, content);
            return(Content.Load <TRuntime>(OutputFilename));
        }
Esempio n. 3
0
        private static string GetCachedFileName(string fileName, IProcessor processor = null)
        {
            fileName = Extensions.CleanPath(fileName).ToLowerInvariant();

            var memoryStream = new MemoryStream(1024);
            var bytes        = Encoding.UTF8.GetBytes(fileName);

            memoryStream.Write(bytes, 0, bytes.Length);
            bytes = BitConverter.GetBytes(File.GetLastWriteTimeUtc(fileName).Ticks);
            memoryStream.Write(bytes, 0, bytes.Length);

            if (processor != null)
            {
                xamlSerializer.Save(memoryStream, processor, null);
            }

            return(Path.Combine(CacheDirectory, string.Concat(
                                    Path.GetFileNameWithoutExtension(fileName), "-",
                                    new Guid(md5.ComputeHash(memoryStream.ToArray())).ToString("N").ToUpper())));
        }
Esempio n. 4
0
        public static T Load <T>(string fileName, IImporter importer, IProcessor processor = null, IServiceProvider serviceProvider = null)
        {
            // TODO: Race conditions when 2 processes tried to access the file at the same time?
            var cachedFileName = GetCachedFileName(fileName, processor);

            if (!File.Exists(cachedFileName))
            {
                var content = LoadContent <object>(fileName, importer, processor);
                if (content == null)
                {
                    return(default(T));
                }

                SaveContent(cachedFileName, content);
            }

            using (var stream = File.OpenRead(cachedFileName))
            {
                var result = (T)(reader.Read(new BinaryReader(stream), null, serviceProvider));
                ObjectCache.Add(new WeakReference(result), cachedFileName);
                return(result);
            }
        }
Esempio n. 5
0
        public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName)
        {
            contentImporter = contentImporter ?? FindImporter(null, sourceAssetFile);
            if (contentImporter == null)
            {
                throw new InvalidOperationException(string.Format("Cannot find content importer for {0}", sourceAssetFile));
            }
            var content = contentImporter.Import(sourceAssetFile, ImporterContext);

            if (contentProcessor != null)
            {
                try
                {
                    outputFilenames.Push(sourceAssetFile);
                    content = contentProcessor.Process(content, ProcessorContext);
                }
                finally
                {
                    LastFilename = outputFilenames.Pop();
                }
            }
            return((TContent)content);
        }
Esempio n. 6
0
 public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor)
 {
     return(BuildAndLoad <TContent>(sourceAssetFile, contentImporter, contentProcessor, null));
 }
Esempio n. 7
0
        public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName)
        {
            try
            {
                OutputFilename = FindNextValidAssetName(fileName ?? Path.GetFileNameWithoutExtension(sourceAssetFile), ".xnb");

                var outputDirectory = Path.GetDirectoryName(OutputFilename);
                if (!Directory.Exists(outputDirectory))
                {
                    Directory.CreateDirectory(outputDirectory);
                }

                // Create a dummy file in case a nested build uses the same name
                File.WriteAllText(OutputFilename, "");

                contentImporter = contentImporter ?? FindImporter(null, sourceAssetFile);
                if (contentImporter == null)
                {
                    throw new InvalidOperationException(string.Format("Cannot find content importer for {0}", sourceAssetFile));
                }

                contentProcessor = contentProcessor ?? FindDefaultProcessor(contentImporter);

                Trace.TraceInformation("Building {0} -> {1} with {2} and {3}",
                                       sourceAssetFile, OutputFilename,
                                       contentImporter != null ? contentImporter.GetType().Name : "<No Importer>",
                                       contentProcessor != null ? contentProcessor.GetType().Name : "<No Processor>");

                object content = contentImporter.Import(sourceAssetFile, ImporterContext);

                if (contentProcessor != null)
                {
                    content = contentProcessor.Process(content, ProcessorContext);
                }
                return((TContent)content);
            }
            catch (Exception e)
            {
                Trace.TraceError("Error importing {0} with asset name {1}", sourceAssetFile, fileName ?? "[Unspecified]");
                Trace.WriteLine(e);
                throw;
            }
        }
Esempio n. 8
0
 public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor)
 {
     return(Build(sourceAssetFile, contentImporter, contentProcessor, null));
 }
Esempio n. 9
0
 public static T Load <T>(Stream input, IImporter importer, IProcessor processor = null, IServiceProvider serviceProvider = null)
 {
     return(Load <T>(ValidateFileStream(input), importer, processor, serviceProvider));
 }
Esempio n. 10
0
 public static T LoadContent <T>(string fileName, IImporter importer, IProcessor processor = null)
 {
     return(builder.BuildAndLoad <T>(fileName, importer, processor));
 }
Esempio n. 11
0
 public static T LoadContent <T>(Stream input, IImporter importer, IProcessor processor = null)
 {
     return(LoadContent <T>(ValidateFileStream(input), importer, processor));
 }