示例#1
0
            public bool Write(BinaryWriter bw)
            {
                byte[] name_encoded  = EncodeString(name);
                byte[] value_encoded = EncodeString(value);

                EncodedInt encName  = new EncodedInt((u32)name_encoded.Length);
                EncodedInt encValue = new EncodedInt((u32)value_encoded.Length);

                u32 total_size = 0;

                EncodedInt encItem = null;

                if (item_id != 0)
                {
                    encItem     = new EncodedInt(item_id);
                    total_size += 1 + encItem.Length();
                }

                if (encName.Value > 0)
                {
                    total_size += 1 + encName.Length() + encName.Value;
                }

                if (encValue.Value > 0)
                {
                    total_size += 1 + encValue.Length() + encValue.Value;
                }

                // write total size
                EncodedInt encTotal = new EncodedInt(total_size);

                bw.Write(PREFIX_SIZE);
                encTotal.Write(bw);

                if (encItem != null)
                {
                    // write item_id
                    bw.Write(PREFIX_ITEM_ID);
                    encItem.Write(bw);

                    // write name
                    if (encName.Value > 0)
                    {
                        bw.Write(PREFIX_ITEM_NAME);
                        encName.Write(bw);
                        bw.Write(name_encoded, 0, name_encoded.Length);
                    }

                    // write value
                    if (encValue.Value > 0)
                    {
                        bw.Write(PREFIX_ITEM_VALUE);
                        encValue.Write(bw);
                        bw.Write(value_encoded, 0, value_encoded.Length);
                    }
                }
                else
                {
                    // write name
                    if (encName.Value > 0)
                    {
                        bw.Write(PREFIX_CLIENT_KEY);
                        encName.Write(bw);
                        bw.Write(name_encoded, 0, name_encoded.Length);
                    }

                    // write value
                    if (encValue.Value > 0)
                    {
                        bw.Write(PREFIX_CLIENT_VAL);
                        encValue.Write(bw);
                        bw.Write(value_encoded, 0, value_encoded.Length);
                    }
                }

                return(true);
            }