From a0d3ebd8787758aab39bfe229135f596f5974c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Iv=C3=A1n=20Valenzuela=20Galaviz?= Date: Thu, 27 Apr 2023 10:05:54 -0700 Subject: [PATCH 1/2] Added callback to catch an error happening on the socket connection --- lib/modbus.dart | 13 ++++++++----- lib/src/client.dart | 5 ++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/modbus.dart b/lib/modbus.dart index 0a990e2..81cb642 100644 --- a/lib/modbus.dart +++ b/lib/modbus.dart @@ -95,9 +95,12 @@ ModbusClient createClient(TcpConnector connector, {int unitId = 1}) => ModbusClientImpl(connector, unitId); ModbusClient createTcpClient(address, - {int port = 502, - ModbusMode mode = ModbusMode.rtu, - int unitId = 1, - Duration? timeout}) => + { + int port = 502, + ModbusMode mode = ModbusMode.rtu, + int unitId = 1, + Duration? timeout, + Function(dynamic error, dynamic stackTrace)? onConnectionError + }) => ModbusClientImpl( - TcpConnector(address, port, mode, timeout: timeout), unitId); + TcpConnector(address, port, mode, timeout: timeout), unitId, onConnectionError: onConnectionError); diff --git a/lib/src/client.dart b/lib/src/client.dart index 877490d..24e8027 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -20,11 +20,13 @@ class ModbusClientImpl extends ModbusClient { Map _pendingMap = HashMap(); Map _waitingMap = HashMap(); Queue _waitingQueue = DoubleLinkedQueue(); + Function(dynamic error, dynamic stackTrace)? _onConnectionError; - ModbusClientImpl(this._connector, int unitId) { + ModbusClientImpl(this._connector, int unitId, { Function(dynamic error, dynamic stackTrace)? onConnectionError }) { _connector.onResponse = _onConnectorData; _connector.onError = _onConnectorError; _connector.onClose = _onConnectorClose; + _onConnectionError = onConnectionError; _connector.setUnitId(unitId); } @@ -67,6 +69,7 @@ class ModbusClientImpl extends ModbusClient { _pendingMap.clear(); _waitingMap.clear(); // _completer?.completeError(error, stackTrace); + if(_onConnectionError != null) _onConnectionError!(error, stackTrace); throw ModbusConnectException("Connector Error: ${error}"); } From c7e4864f0a2c213461734f9a6d16883a8751cf8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Iv=C3=A1n=20Valenzuela=20Galaviz?= Date: Fri, 28 Apr 2023 13:42:29 -0700 Subject: [PATCH 2/2] Request timeout added --- lib/modbus.dart | 5 +++-- lib/src/client.dart | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/modbus.dart b/lib/modbus.dart index 81cb642..2288cd2 100644 --- a/lib/modbus.dart +++ b/lib/modbus.dart @@ -99,8 +99,9 @@ ModbusClient createTcpClient(address, int port = 502, ModbusMode mode = ModbusMode.rtu, int unitId = 1, - Duration? timeout, + Duration? connectionTimeout, + Duration? requestTimeout, Function(dynamic error, dynamic stackTrace)? onConnectionError }) => ModbusClientImpl( - TcpConnector(address, port, mode, timeout: timeout), unitId, onConnectionError: onConnectionError); + TcpConnector(address, port, mode, timeout: connectionTimeout), unitId, onConnectionError: onConnectionError, requestTimeout: requestTimeout); diff --git a/lib/src/client.dart b/lib/src/client.dart index 24e8027..d9f5ba5 100644 --- a/lib/src/client.dart +++ b/lib/src/client.dart @@ -20,13 +20,15 @@ class ModbusClientImpl extends ModbusClient { Map _pendingMap = HashMap(); Map _waitingMap = HashMap(); Queue _waitingQueue = DoubleLinkedQueue(); + Duration? _requestTimeout; Function(dynamic error, dynamic stackTrace)? _onConnectionError; - ModbusClientImpl(this._connector, int unitId, { Function(dynamic error, dynamic stackTrace)? onConnectionError }) { + ModbusClientImpl(this._connector, int unitId, { Function(dynamic error, dynamic stackTrace)? onConnectionError, Duration? requestTimeout = const Duration(milliseconds: 6000) }) { _connector.onResponse = _onConnectorData; _connector.onError = _onConnectorError; _connector.onClose = _onConnectorClose; _onConnectionError = onConnectionError; + _requestTimeout = requestTimeout; _connector.setUnitId(unitId); } @@ -174,7 +176,8 @@ class ModbusClientImpl extends ModbusClient { } else { completer!.complete(responseData); } - }); + }) + .timeout(_requestTimeout!); } @override