encodeRetrieveResponse static method

Uint8List encodeRetrieveResponse(
  1. RetrieveMessagesResponse response
)

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