void Deserialize(byte[] data) { using (DataStream ds = new DataStream(data)) { while (ds.SizeRemaining() > 0) { uint magic = ds.ReadUInt32(); ds.Seek(-4, SeekOrigin.Current); switch (magic) { case Steam3Manifest.MAGIC: Steam3Manifest binaryManifest = new Steam3Manifest(ds); ParseBinaryManifest(binaryManifest); break; // todo: handle protobuf manifest? default: throw new NotImplementedException(string.Format("Unrecognized magic value {0:X} in depot manifest.", magic)); } uint marker = ds.ReadUInt32(); if (marker != magic) { throw new InvalidDataException("Unable to find end of message marker for depot manifest"); } } } }
internal Steam2Ticket(byte[] blob) { Entries = new List <Entry>(); using (var ds = new DataStream(blob)) { Magic = ds.ReadUInt16(); Length = ds.ReadUInt32(); unknown1 = ds.ReadUInt32(); while (ds.SizeRemaining() > 0) { var entry = new Entry(); entry.Deserialize(ds); Entries.Add(entry); } } }