public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor, string fileName) { var content = BuildAndLoad <object>(sourceAssetFile, contentImporter, contentProcessor, fileName); Compile(OutputFilename, content); return(OutputFilename); }
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)); }
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()))); }
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); } }
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); }
public TContent BuildAndLoad <TContent>(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor) { return(BuildAndLoad <TContent>(sourceAssetFile, contentImporter, contentProcessor, null)); }
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; } }
public string Build(string sourceAssetFile, IImporter contentImporter, IProcessor contentProcessor) { return(Build(sourceAssetFile, contentImporter, contentProcessor, null)); }
public static T Load <T>(Stream input, IImporter importer, IProcessor processor = null, IServiceProvider serviceProvider = null) { return(Load <T>(ValidateFileStream(input), importer, processor, serviceProvider)); }
public static T LoadContent <T>(string fileName, IImporter importer, IProcessor processor = null) { return(builder.BuildAndLoad <T>(fileName, importer, processor)); }
public static T LoadContent <T>(Stream input, IImporter importer, IProcessor processor = null) { return(LoadContent <T>(ValidateFileStream(input), importer, processor)); }