Esempio n. 1
0
        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;
        }
Esempio n. 3
0
        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);
        }