grpcEncodeFrame function
Encode a gRPC frame: 1-byte compression flag + 4-byte big-endian length + message bytes.
messageBytes is the raw protobuf-encoded message payload.
compressed indicates whether the payload has been compressed; false
writes 0x00, true writes 0x01.
Returns the complete length-prefixed frame as a byte list.
Implementation
List<int> grpcEncodeFrame(List<int> messageBytes, {bool compressed = false}) {
var length = messageBytes.length;
var frame = List<int>.filled(_headerSize + length, 0);
// Byte 0: compression flag.
frame[0] = compressed ? 1 : 0;
// Bytes 1-4: message length, big-endian.
frame[1] = (length >>> 24) & 0xFF;
frame[2] = (length >>> 16) & 0xFF;
frame[3] = (length >>> 8) & 0xFF;
frame[4] = length & 0xFF;
// Bytes 5+: message payload.
for (var i = 0; i < length; i++) {
frame[_headerSize + i] = messageBytes[i];
}
return frame;
}