public static ArchiveBlockDescriptor Create(uint magic, BinaryReader reader)
        {
            ArchiveBlockDescriptor ret = null;

            switch (magic)
            {
            case Signatures.ArchiveIndex:
                ret = new ArchiveIndex();
                ret.Populate(magic, reader);
                break;

            case Signatures.Pack:
                ret = new PackDescriptor();
                ret.Populate(magic, reader);
                break;

            case Signatures.Archive:
                ret = new AssetArchiveResourceContainerDescriptor();
                ret.Populate(magic, reader);
                break;
            }
            //if (ret == null)
            //    Debug.WriteLine($"WARN: Unknown magic: {magic:X8}");
            return(ret);
        }
Ejemplo n.º 2
0
 private IEnumerable <ArchiveBlockDescriptor> GetDescriptors(BlockTable blockTable)
 {
     foreach (var entry in blockTable)
     {
         if (entry.BlockSize == 0)
         {
             continue;
         }
         using (var mappedStream = File.CreateViewStream(entry.DirectoryOffset, entry.BlockSize, MemoryMappedFileAccess.Read))
             using (var binaryReader = new BinaryReader(mappedStream))
             {
                 var magic           = binaryReader.ReadUInt32();
                 var blockDescriptor = ArchiveBlockDescriptor.Create(magic, binaryReader);
                 if (blockDescriptor != null)
                 {
                     yield return(blockDescriptor);
                 }
             }
     }
 }