decodeAll static method

Future<List<ServerMessage>> decodeAll(
  1. Uint8List bytes
)

Implementation

static Future<List<ServerMessage>> decodeAll(Uint8List bytes) async {
  final outer = BsatnDecoder(bytes);
  final compressionTag = CompressionTag.fromValue(outer.readU8());
  final payload = outer.readBytes(outer.remaining);

  final messageBytes = switch (compressionTag) {
    CompressionTag.none => payload,
    CompressionTag.brotli => await decompressBrotli(payload),
    CompressionTag.gzip => await decompressGzip(payload),
  };

  if (messageBytes.isEmpty) {
    throw SpacetimeDbProtocolException(
      'WebSocket frame payload is empty after decompression — expected at '
      'least one server message',
    );
  }

  final cursor = BsatnDecoder(messageBytes);
  final results = <ServerMessage>[];
  while (cursor.remaining > 0) {
    results.add(_decodeServerMessage(cursor));
  }
  return results;
}