read method
Implementation
Future<Uint8List> read(int len, [Duration? timeout]) async {
if (len <= 0) {
return Uint8List(0);
}
final id = await _waitYourTurn();
final result = Completer<Uint8List>();
final bytes = Uint8List(len);
int i = 0;
if (timeout is Duration) {
_execptionTimer = Timer(timeout, () {
_subscription?.pause();
result.completeError(
TimeoutException("read soket timeout: $timeout", timeout),
);
});
}
_subscription?.onData((b) {
bytes[i] = b;
i += 1;
if (i == len) {
result.complete(bytes);
_subscription?.pause();
}
});
_subscription?.resume();
final out = await result.future;
_execptionTimer?.cancel();
_readQueue.remove(id);
return out;
}