sendAndRead method
Implementation
Future<Uint8List> sendAndRead({required List<int> request, Duration timeout = const Duration(seconds: 1), Duration quietWindow = const Duration(milliseconds: 120)}) async {
await sendBytes(request);
// Accumulate until quiet or timeout
final completer = Completer<Uint8List>();
final chunks = <int>[];
Timer? quiet;
late final StreamSubscription sub;
void finish() async {
if (!completer.isCompleted) completer.complete(Uint8List.fromList(chunks));
await sub.cancel();
quiet?.cancel();
}
final hard = Timer(timeout, finish);
sub = onData.listen((evt) {
// log("Listen");
chunks.addAll(evt.bytes);
quiet?.cancel();
quiet = Timer(quietWindow, finish);
});
final resp = await completer.future;
hard.cancel();
return resp;
}