encodeRetrieveResponse static method
Encode retrieve messages response
Implementation
static Uint8List encodeRetrieveResponse(RetrieveMessagesResponse response) {
final data = <String, dynamic>{
'hasMore': response.hasMore,
'messageCount': response.messages.length,
'messages': response.messages.map((m) => encode(m)).toList(),
};
final json = jsonEncode({
'hasMore': data['hasMore'],
'messageCount': data['messageCount'],
});
// Pack: JSON metadata + message frames
final metadataBytes = utf8.encode(json);
final metadataLength = metadataBytes.length;
// Calculate total size
int totalSize = 4; // metadata length (4 bytes)
totalSize += metadataLength;
for (final msgBytes in data['messages'] as List) {
totalSize += 4; // message length (4 bytes)
totalSize += (msgBytes as Uint8List).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 data['messages'] as List) {
final bytes = msgBytes as Uint8List;
result.setUint32(offset, bytes.length);
offset += 4;
result.buffer.asUint8List().setRange(offset, offset + bytes.length, bytes);
offset += bytes.length;
}
return result.buffer.asUint8List();
}