public static T ReadAsset <T>(Stream stream, ITypeReaderFactory readerProvider) { if (stream == null) { throw new ArgumentNullException("stream"); } if (readerProvider == null) { throw new ArgumentNullException("readerProvider"); } BinaryReader reader = new BinaryReader(stream); var version = reader.ReadByte(); if (version != VERSION) { throw new ArgumentException("The stream does not contain a valid file!"); } var typeReaders = ReadTypesUsed(readerProvider, reader); var assetReader = new AssetReader(stream, typeReaders); return(assetReader.Read <T>()); }
public ResourceContext(IServiceLocator provider, ITypeReaderFactory trfactory, ITypeWriterFactory twfactory, IResourceLoader loader, string assetDir, string rootDir) { this.loaded = new Dictionary <string, object>(); this.trfactory = trfactory; this.twfactory = twfactory; this.resourceLoader = loader; this.assetDirectory = assetDir; this.RootDirectory = rootDir; this.Locator = provider; this.ShouldSaveAllLoadedAssets = true; }
private static ITypeReader[] ReadTypesUsed(ITypeReaderFactory readerProvider, BinaryReader reader) { int count = (int)reader.ReadUInt32(); ITypeReader[] typeReaders = new ITypeReader[count]; for (int i = 0; i < count; i++) { int length = reader.ReadInt32(); string typeName = Encoding.UTF8.GetString(reader.ReadBytes(length)); Type type = Type.GetType(typeName); typeReaders[i] = readerProvider.GetTypeReader(type); } return(typeReaders); }