Пример #1
0
        public override void flatten(BinaryWriter writer)
        {
            // Format:  0. Protocol revision number
            //             (4 bytes, always set to CURRENT_PROTOCOL_VERSION)
            //          1. 'what' code (4 bytes)
            //          2. Number of entries (4 bytes)
            //          3. Entry name length (4 bytes)
            //          4. Entry name string (flattened String)
            //          5. Entry type code (4 bytes)
            //          6. Entry data length (4 bytes)
            //          7. Entry data (n bytes)
            //          8. loop to 3 as necessary
            writer.Write((int)CURRENT_PROTOCOL_VERSION);
            writer.Write((int)what);
            writer.Write((int)countFields());
            IEnumerator e = fieldNames();

            while (e.MoveNext())
            {
                string       name  = (string)e.Current;
                MessageField field = (MessageField)_fieldTable[name];

                byte [] byteArray = Encoding.UTF8.GetBytes(name);

                writer.Write((int)(byteArray.Length + 1));
                writer.Write(byteArray);
                writer.Write((byte)0);  // terminating NUL byte

                writer.Write(field.typeCode());
                writer.Write(field.flattenedSize());
                field.flatten(writer);
            }
        }