open method

  1. @override
Future<void> open()
override

Implementation

@override
Future<void> open() async {
  if (_closed) {
    throw StateError('TcpModbusByteTransport already closed');
  }
  if (_opened) return;

  final fut = Socket.connect(host, port);
  final socket = await (connectTimeout == null
      ? fut
      : fut.timeout(connectTimeout!));
  socket.setOption(SocketOption.tcpNoDelay, true);
  _socket = socket;
  _rxSub = socket.listen(
    (chunk) {
      if (!_rxCtrl.isClosed) _rxCtrl.add(chunk);
    },
    onError: (Object e, StackTrace st) {
      if (!_rxCtrl.isClosed) _rxCtrl.addError(e, st);
    },
    onDone: () {
      if (!_closed) {
        _closed = true;
        if (!_rxCtrl.isClosed) _rxCtrl.close();
      }
    },
    cancelOnError: false,
  );
  _opened = true;
}