encode method

Uint8List encode()

Encode frame to bytes

Implementation

Uint8List encode() {
  if (payload.length > MAX_PAYLOAD_SIZE) {
    throw ArgumentError('Payload too large: ${payload.length} > $MAX_PAYLOAD_SIZE');
  }

  final buffer = ByteData(HEADER_SIZE + payload.length);
  int offset = 0;

  // Magic (4 bytes)
  buffer.setUint32(offset, MAGIC, Endian.big);
  offset += 4;

  // Version (1 byte)
  buffer.setUint8(offset, version);
  offset += 1;

  // Type (1 byte)
  buffer.setUint8(offset, type.value);
  offset += 1;

  // Flags (1 byte)
  buffer.setUint8(offset, flags.value);
  offset += 1;

  // Reserved (1 byte)
  buffer.setUint8(offset, 0);
  offset += 1;

  // Length (4 bytes)
  buffer.setUint32(offset, payload.length, Endian.big);
  offset += 4;

  // Stream ID (4 bytes)
  buffer.setUint32(offset, streamId, Endian.big);
  offset += 4;

  // Copy payload
  final result = buffer.buffer.asUint8List();
  result.setRange(HEADER_SIZE, HEADER_SIZE + payload.length, payload);

  return result;
}