processData method

List<ProcessingResult> processData(
  1. Uint8List data
)

Process incoming raw data and extract complete messages

Implementation

List<ProcessingResult> processData(Uint8List data) {
  final results = <ProcessingResult>[];

  try {
    // Add new data to buffer
    _buffer.addAll(data);
    _bytesProcessed += data.length;

    // Process all available complete messages
    while (_buffer.isNotEmpty) {
      final result = _processNextMessage();

      if (result.bytesConsumed > 0) {
        // Remove consumed bytes from buffer
        _buffer.removeRange(0, result.bytesConsumed);
      }

      if (result.hasMessage || result.hasError) {
        results.add(result);
        if (result.hasMessage) _messagesProcessed++;
        if (result.hasError) _errors++;
      }

      // If no progress made, wait for more data
      if (result.bytesConsumed == 0) break;
    }
  } catch (e, stackTrace) {
    logger.severe('Fatal error processing data', e, stackTrace);
    _state = ProcessingState.error;
    _errors++;
    results.add(ProcessingResult(
      bytesConsumed: 0,
      error: 'Fatal processing error: $e',
    ));
  }

  return results;
}