grpcEncodeFrames function

List<int> grpcEncodeFrames(
  1. List<List<int>> messages, {
  2. bool compressed = false,
})

Encode multiple gRPC frames (for streaming).

Each element of messages is a raw protobuf-encoded message. All frames share the same compressed flag. Returns the concatenation of all length-prefixed frames.

Implementation

List<int> grpcEncodeFrames(
  List<List<int>> messages, {
  bool compressed = false,
}) {
  // Pre-compute total size to avoid repeated list growth.
  var totalSize = 0;
  for (var msg in messages) {
    totalSize += _headerSize + msg.length;
  }
  var result = List<int>.filled(totalSize, 0);
  var pos = 0;
  for (var msg in messages) {
    var frame = grpcEncodeFrame(msg, compressed: compressed);
    for (var i = 0; i < frame.length; i++) {
      result[pos + i] = frame[i];
    }
    pos += frame.length;
  }
  return result;
}