/// <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); }
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; } } } }
public override void Read(Package package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { if ((chunkBlock.Size - 4) % 0x18 != 0) { throw new ChunkReadingException("Malformed RsRq chunk"); } var numRequests = reader.ReadInt32(); ResourceRequests = new List <ResourceRequest>(numRequests); for (var i = 0; i < numRequests; i++) { var resourceRequest = new ResourceRequest(); resourceRequest.ID = reader.ReadUInt32(); resourceRequest.NameOffset = reader.ReadUInt32(); resourceRequest.Type = (ResourceType)reader.ReadUInt32(); resourceRequest.Flags = reader.ReadUInt32(); resourceRequest.Handle = reader.ReadUInt32(); resourceRequest.UserParam = reader.ReadUInt32(); ResourceRequests.Add(resourceRequest); } }
public override void Read(Package package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { chunkReader.ReadObjects(chunkBlock.Size); //foreach (var frontendObject in chunkReader.ReadObjects(chunkBlock.Size)) //{ // Objects.Add(frontendObject); //} }
public override void Read(Package package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { TagStream tagStream = new MessageTagStream(reader, package, chunkBlock, chunkBlock.Size); while (tagStream.HasTag()) { var tag = tagStream.NextTag(null); package = ProcessTag(package, tag); } }
public override void Read(Package package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { Names = new Dictionary <long, string>(); while (reader.BaseStream.Position < chunkBlock.EndOffset) { var pos = reader.BaseStream.Position; var str = NullTerminatedString.Read(reader); if (!string.IsNullOrEmpty(str)) { Names[pos - chunkBlock.DataOffset] = str; } } }
public override void Read(Package package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { if (chunkBlock.Size % 8 != 0) { throw new ChunkReadingException("Invalid TypeList chunk"); } TypeSizeList = new List <TypeSizeEntry>(chunkBlock.Size >> 3); for (int i = 0; i < chunkBlock.Size >> 3; i++) { TypeSizeList.Add(new TypeSizeEntry { ID = reader.ReadUInt32(), Size = reader.ReadUInt32() }); } }
public override void Read(FrontendPackage package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { if (reader.ReadUInt32() != 0x20000) { throw new InvalidDataException("Invalid header constant"); } if (reader.ReadUInt32() != 0) { throw new InvalidDataException("Expected null after constant"); } NumResourceNames = reader.ReadInt32(); reader.ReadUInt32(); //if (reader.ReadUInt32() != 3) //{ // throw new InvalidDataException("Invalid header version"); //} int nameLength = reader.ReadInt32(); if (nameLength < 1) { throw new InvalidDataException("Invalid name length"); } int filenameLength = reader.ReadInt32(); if (filenameLength < 1) { throw new InvalidDataException("Invalid filename length"); } Name = new string(reader.ReadChars(nameLength)).Trim('\0'); Filename = new string(reader.ReadChars(filenameLength)).Trim('\0'); reader.AlignReader(4); }
public override void Read(FrontendPackage package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { FrontendTagStream tagStream = new FrontendMessagesTagStream(reader, package, chunkBlock, chunkBlock.Size); while (tagStream.HasTag()) { FrontendTag tag = tagStream.NextTag(null); //Debug.WriteLine("PKG RESPONSES TAG {0}", tag); package = ProcessTag(package, tag); } }
public override void Read(Package package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { reader.ReadBytes(chunkBlock.Size); }
public ObjectReaderState(FrontendChunkBlock currentChunkBlock, FrontendChunkReader chunkReader) { CurrentChunkBlock = currentChunkBlock; ChunkReader = chunkReader; }
public override void Read(FrontendPackage package, FrontendChunkBlock chunkBlock, FrontendChunkReader chunkReader, BinaryReader reader) { NumEntries = reader.ReadUInt32(); }