encodeRetrieveResponse static method
Encode retrieve messages response
Implementation
static Uint8List encodeRetrieveResponse(RetrieveMessagesResponse response) {
// Encode each message
final encodedMessages = response.messages.map((m) => _encodeMessage(m)).toList();
final metadata = <String, dynamic>{
'hasMore': response.hasMore,
'messageCount': response.messages.length,
};
final metadataBytes = utf8.encode(jsonEncode(metadata));
final metadataLength = metadataBytes.length;
// Calculate total size
int totalSize = 4; // metadata length (4 bytes)
totalSize += metadataLength;
for (final msgBytes in encodedMessages) {
totalSize += 4; // message length (4 bytes)
totalSize += msgBytes.length;
}
final result = ByteData(totalSize);
int offset = 0;
// Write metadata length and data
result.setUint32(offset, metadataLength);
offset += 4;
result.buffer.asUint8List().setRange(offset, offset + metadataLength, metadataBytes);
offset += metadataLength;
// Write each message frame
for (final msgBytes in encodedMessages) {
result.setUint32(offset, msgBytes.length);
offset += 4;
result.buffer.asUint8List().setRange(offset, offset + msgBytes.length, msgBytes);
offset += msgBytes.length;
}
return result.buffer.asUint8List();
}