/// <summary>
        /// Deserializes the filesystem portion (directory and files) of a release manifest file.
        /// </summary>
        private void DeserializeFileSystemBody(
            BinaryReader reader,
            ReleaseManifest manifest,
            DeserializationContext context)
        {
            // - First load the directory block and treeify it ---------------------------------------
            reader.BaseStream.Position   = context.DirectoryTableDataOffset;
            context.DirectoryDescriptors = new ReleaseManifestDirectoryDescriptor[context.DirectoryTableCount];
            context.FileParentTable      = new ReleaseManifestDirectoryEntry[context.FileTableCount];
            context.directoryTable       = new ReleaseManifestDirectoryEntry[context.DirectoryTableCount];

            for (var i = 0; i < context.DirectoryTableCount; i++)
            {
                context.DirectoryDescriptors[i] = reader.ReadRMDirectoryDescriptor();
            }

            DeserializeTreeifyDirectoryDescriptor(0, context);
            manifest.Directories = new ReadOnlyCollection <ReleaseManifestDirectoryEntry>(context.directoryTable);
            manifest.Root        = context.directoryTable[0];

            // - Place the File Descriptors into our tree---------------------------------------------
            reader.BaseStream.Position = context.FileTableDataOffset;
            var files = new ReleaseManifestFileEntry[context.FileTableCount];

            for (var fileId = 0U; fileId < context.FileTableCount; fileId++)
            {
                var fileDescriptor = reader.ReadRMFileEntryDescriptor();
                files[fileId] = new ReleaseManifestFileEntry(fileId, manifest, fileDescriptor, context.FileParentTable[fileId]);
            }

            manifest.Files = new ReadOnlyCollection <ReleaseManifestFileEntry>(files);
        }
Exemple #2
0
 private void SerializeFile(BinaryWriter writer, ReleaseManifestFileEntry file)
 {
     writer.Write((UInt32)file.NameStringTableIndex);
     writer.Write((UInt32)file.ArchiveId);
     writer.Write((UInt64)file.ChecksumLow);
     writer.Write((UInt64)file.ChecksumHigh);
     writer.Write((UInt32)file.EntityType);
     writer.Write((UInt32)file.DecompressedSize);
     writer.Write((UInt32)file.CompressedSize);
     writer.Write((UInt32)file.Checksum2);
     writer.Write((UInt16)file.PatcherEntityType);
     writer.Write((byte)file.UnknownConstant1);
     writer.Write((byte)file.UnknownConstant2);
 }