public bool Read(BinaryReader br) { u8 prefix = br.ReadByte(); if (prefix != PREFIX_SIZE) { return(false); } EncodedInt encSize = new EncodedInt(); encSize.Read(br); u32 size_expected = encSize.Value; u32 size_read = 0; bool reading_items = false; prefix = br.ReadByte(); size_read++; switch (prefix) { case PREFIX_ITEM_ID: reading_items = true; break; case PREFIX_CLIENT_KEY: break; default: return(false); } if (reading_items) { EncodedInt encId = new EncodedInt(); encId.Read(br); item_id = encId.Value; size_read += encId.Length(); if (size_read == size_expected) { return(true); } prefix = br.ReadByte(); size_read++; if (prefix != PREFIX_ITEM_NAME) { return(false); } } EncodedInt encName = new EncodedInt(); encName.Read(br); name = DecodeString(br, encName.Value); size_read += encName.Value + encName.Length(); if (size_read == size_expected) { return(true); } prefix = br.ReadByte(); size_read++; if (reading_items) { if (prefix != PREFIX_ITEM_VALUE) { return(false); } } else if (prefix != PREFIX_CLIENT_VAL) { return(false); } EncodedInt encValue = new EncodedInt(); encValue.Read(br); value = DecodeString(br, encValue.Value); size_read += encValue.Value + encValue.Length();; if (size_read != size_expected) { return(false); } return(true); }