read method

Future<Uint8List> read(
  1. int len, [
  2. Duration? timeout
])

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;
}