connectAuto method

  1. @override
Future<MqttClientConnectionStatus?> connectAuto(
  1. String server,
  2. int port
)
override

Connect Auto

Implementation

@override
Future<MqttClientConnectionStatus?> connectAuto(String server, int port) {
  final completer = Completer<MqttClientConnectionStatus?>();
  MqttLogger.log('MqttSecureConnection::connectAuto - entered');
  try {
    SecureSocket.connect(
          server,
          port,
          onBadCertificate: onBadCertificate,
          context: context,
          timeout: socketTimeout,
        )
        .then((socket) {
          MqttLogger.log(
            'MqttSecureConnection::connectAuto - securing socket',
          );
          // Socket options
          final applied = _applySocketOptions(socket, socketOptions);
          if (applied) {
            MqttLogger.log(
              'MqttSecureConnection::connectAuto - socket options applied',
            );
          }
          client = socket;
          MqttLogger.log(
            'MqttSecureConnection::connectAuto - start listening',
          );
          _startListening();
          completer.complete();
        })
        .catchError((e) {
          if (_isSocketTimeout(e)) {
            final message =
                'MqttSecureConnection::connectAuto - The connection to the message broker '
                '{$server}:{$port} could not be made, a socket timeout has occurred';
            MqttLogger.log(message);
            completer.complete();
          } else {
            onError(e);
            completer.completeError(e);
          }
        });
  } on SocketException catch (e, stack) {
    final message =
        'MqttSecureConnection::connectAuto - The connection to the message broker '
        '{$server}:{$port} could not be made. Error is ${e.toString()}';
    completer.completeError(e);
    Error.throwWithStackTrace(NoConnectionException(message), stack);
  } on HandshakeException catch (e, stack) {
    final message =
        'MqttSecureConnection::connectAuto - Handshake exception to the message broker '
        '{$server}:{$port}. Error is ${e.toString()}';
    completer.completeError(e);
    Error.throwWithStackTrace(NoConnectionException(message), stack);
  } on TlsException catch (e, stack) {
    final message =
        'MqttSecureConnection::connectAuto - TLS exception raised on secure '
        'connection. Error is ${e.toString()}';
    Error.throwWithStackTrace(NoConnectionException(message), stack);
  }
  return completer.future;
}