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); } }