Ejemplo n.º 1
0
        public override void Read(Package package, FrontendChunkBlock chunkBlock,
                                  FrontendChunkReader chunkReader, BinaryReader reader)
        {
            ResourceNamesChunk resourceNamesChunk = null;

            foreach (var chunk in chunkReader.ReadMainChunks(chunkBlock.Size))
            {
                switch (chunk)
                {
                case ResourceNamesChunk rnc:
                    resourceNamesChunk = rnc;
                    break;

                case ResourceRequestsChunk _ when resourceNamesChunk == null:
                    throw new ChunkReadingException("RsRq came before RsNm?!");

                case ResourceRequestsChunk rrc:
                {
                    foreach (var resourceRequest in rrc.ResourceRequests)
                    {
                        resourceRequest.Name = resourceNamesChunk.Names[resourceRequest.NameOffset];
                    }

                    package.ResourceRequests.AddRange(rrc.ResourceRequests);

                    break;
                }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Loads a data stream as a <see cref="Package" />.
        /// </summary>
        /// <param name="br">The <see cref="BinaryReader" /> for the data stream.</param>
        /// <returns>A new <see cref="Package" /> instance.</returns>
        public Package Load(BinaryReader br)
        {
            var package     = new Package();
            var chunkReader = new FrontendChunkReader(package, br);

            foreach (var chunk in chunkReader.ReadMainChunks())
            {
                switch (chunk)
                {
                case PackageHeaderChunk packageHeaderChunk:
                    ProcessPackageHeaderChunk(package, packageHeaderChunk);
                    break;

                case ObjectContainerChunk objectContainerChunk:
                    ProcessObjectContainerChunk(package, objectContainerChunk);
                    break;

                case MessageDefinitionsChunk messageNamesChunk:
                    package.MessageDefinitions.AddRange(messageNamesChunk.Definitions);
                    break;
                }
            }

            return(package);
        }