decodeRetrieveResponse static method

RetrieveMessagesResponse decodeRetrieveResponse(
  1. Uint8List bytes
)

Decode retrieve messages response

Implementation

static RetrieveMessagesResponse decodeRetrieveResponse(Uint8List bytes) {
  final data = ByteData.sublistView(bytes);
  int offset = 0;

  // Read metadata
  final metadataLength = data.getUint32(offset);
  offset += 4;

  final metadataBytes = bytes.sublist(offset, offset + metadataLength);
  final json = utf8.decode(metadataBytes);
  final metadata = jsonDecode(json) as Map<String, dynamic>;
  offset += metadataLength;

  final hasMore = metadata['hasMore'] as bool;
  final messageCount = metadata['messageCount'] as int;

  // Read message frames
  final messages = <SFMessage>[];
  for (int i = 0; i < messageCount; i++) {
    final msgLength = data.getUint32(offset);
    offset += 4;

    final msgBytes = bytes.sublist(offset, offset + msgLength);
    messages.add(decode(msgBytes));
    offset += msgLength;
  }

  return RetrieveMessagesResponse(
    messages: messages,
    hasMore: hasMore,
  );
}