Esempio n. 1
0
            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);
            }