Example #1
0
        public static MetaDataFile ParseFile(PackFile file, PackFileService pf)
        {
            var fileContent   = file.DataSource.ReadData();
            var contentLength = fileContent.Count();


            MetaDataFile outputFile = new MetaDataFile()
            {
                FileName = pf.GetFullPath(file),
                Version  = BitConverter.ToInt32(fileContent, 0)
            };

            if (outputFile.Version != 2)
            {
                throw new Exception($"Unknown version - {outputFile.Version} for {outputFile.FileName}");
            }

            if (contentLength > 8)
            {
                MetaDataTagItem currentElement = null;
                int             numElements    = BitConverter.ToInt32(fileContent, 4);
                int             currentIndex   = 0 + 8; // First 4 bytes is the number of elements, next 2 is unknown
                while (currentIndex != contentLength && (currentElement = GetElement(currentIndex, fileContent, outputFile.FileName, out currentIndex)) != null)
                {
                    outputFile.TagItems.Add(currentElement);
                }

                if (numElements != outputFile.TagItems.Count)
                {
                    throw new Exception($"Not the expected amount elements. Expected {numElements}, got {outputFile.TagItems.Count}");
                }
            }

            return(outputFile);
        }
Example #2
0
        internal static byte[] GenerateBytes(MetaDataFile output)
        {
            List <byte> data = new List <byte>();

            data.AddRange(BitConverter.GetBytes((int)output.Version));
            data.AddRange(BitConverter.GetBytes((int)output.TagItems.Count));
            foreach (var item in output.TagItems)
            {
                data.AddRange(ByteParsers.String.Encode(item.Name, out _));
                data.AddRange(item.DataItems[0].Bytes);
            }

            return(data.ToArray());
        }