receive method
Implementation
Iterable<ZModemEvent> receive(Uint8List data) sync* {
_parser.addData(data);
_parser.metrics = metrics; // share metrics reference
while (_parser.moveNext()) {
final frame = _parser.current;
onTrace?.call('<- $frame');
final m = metrics;
if (m != null) {
m.stateTransitions++;
}
if (!frame.crcValid && frame.format == ZFrameFormat.dataSubpacket) {
yield ZCrcErrorEvent(frame);
continue;
}
final event = _handleFrame(frame);
if (event != null) {
if (event is ZFileDataEvent) {
metrics?.totalDataBytesReceived += event.data.length;
}
if (event is ZFileOfferedEvent) {
metrics?.fileTransfers++;
}
if (event is ZTimeoutEvent) {
metrics?.timeoutsFired++;
}
yield event;
}
}
if (_cancelled) {
_cancelled = false;
yield ZSessionCancelledEvent();
}
}