| 699 | |
| 700 | |
| 701 | int cProtocol132::ParseItem(cItem & a_Item) |
| 702 | { |
| 703 | HANDLE_PACKET_READ(ReadBEShort, short, ItemType); |
| 704 | |
| 705 | if (ItemType <= -1) |
| 706 | { |
| 707 | a_Item.Empty(); |
| 708 | return PARSE_OK; |
| 709 | } |
| 710 | a_Item.m_ItemType = ItemType; |
| 711 | |
| 712 | HANDLE_PACKET_READ(ReadChar, char, ItemCount); |
| 713 | HANDLE_PACKET_READ(ReadBEShort, short, ItemDamage); |
| 714 | a_Item.m_ItemCount = ItemCount; |
| 715 | a_Item.m_ItemDamage = ItemDamage; |
| 716 | if (ItemCount <= 0) |
| 717 | { |
| 718 | a_Item.Empty(); |
| 719 | } |
| 720 | |
| 721 | HANDLE_PACKET_READ(ReadBEShort, short, MetadataLength); |
| 722 | if (MetadataLength <= 0) |
| 723 | { |
| 724 | return PARSE_OK; |
| 725 | } |
| 726 | |
| 727 | // Read the metadata |
| 728 | AString Metadata; |
| 729 | Metadata.resize((size_t)MetadataLength); |
| 730 | if (!m_ReceivedData.ReadBuf((void *)Metadata.data(), (size_t)MetadataLength)) |
| 731 | { |
| 732 | return PARSE_INCOMPLETE; |
| 733 | } |
| 734 | |
| 735 | return ParseItemMetadata(a_Item, Metadata); |
| 736 | } |
| 737 | |
| 738 | |
| 739 | |