read method
void
read(})
Implementation
void read(
Stream<List<int>> stream, {
required void Function(Uint8List event) onData,
required void Function(Object exception) onError,
}) {
unawaited(subscription?.cancel());
subscription = stream.listen(
(data) {
// Packets always start with the command & sequence
final reader = ByteDataReader();
reader.add(data);
final command = reader.readUint8();
if (command != dataCla) {
return;
}
final sequence = reader.readUint16();
if (sequence != currentSequence) {
reset();
return;
}
if (currentSequence == 0) {
// Read the length
remainingBytes = reader.readUint16();
}
remainingBytes -= reader.remainingLength;
payload.addAll(reader.read(reader.remainingLength));
if (remainingBytes == 0) {
final data = Uint8List.fromList(payload);
reset();
onData(data);
} else if (remainingBytes > 0) {
// wait for next message
currentSequence += 1;
} else {
reset();
}
},
onError: (ex) {
onError.call(ex);
},
);
}