connect method

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

Connect

Implementation

@override
Future<MqttConnectionStatus?> connect(String server, int port) {
  final completer = Completer<MqttConnectionStatus?>();
  MqttLogger.log('MqttServerWs2Connection::connect - entered');
  Uri uri;
  try {
    uri = Uri.parse(server);
  } on Exception {
    final message =
        'MqttWsConnection::The URI supplied for the WS2 connection '
        'is not valid - $server';
    throw MqttNoConnectionException(message);
  }
  if (uri.scheme != 'wss') {
    final message = 'MqttWsConnection::The URI supplied for the WS2 has an '
        'incorrect scheme - $server';
    throw MqttNoConnectionException(message);
  }
  uri = uri.replace(port: port);
  final uriString = uri.toString();
  MqttLogger.log(
      'MqttServerWs2Connection:: WS URL is $uriString, protocols are $protocols');

  try {
    SecureSocket.connect(uri.host, uri.port, context: context)
        .then((Socket socket) {
      MqttLogger.log('MqttServerWs2Connection::connect - securing socket');
      _performWSHandshake(socket, uri).then((bool b) {
        client = WebSocket.fromUpgradedSocket(
            _DetachedSocket(
                socket, _subscription as StreamSubscription<Uint8List>?),
            serverSide: false);
        MqttLogger.log('MqttServerWs2Connection::connect - start listening');
        _startListening();
        completer.complete();
      }).catchError((dynamic e) {
        onError(e);
        completer.completeError(e);
      });
    });
  } on SocketException catch (e) {
    final message =
        'MqttServerWs2Connection::The connection to the message broker '
        '{$server}:{$port} could not be made. Error is ${e.toString()}';
    completer.completeError(e);
    throw MqttNoConnectionException(message);
  } on HandshakeException catch (e) {
    final message =
        'MqttServerWs2Connection::Handshake exception to the message broker '
        '{$server}:{$port}. Error is ${e.toString()}';
    completer.completeError(e);
    throw MqttNoConnectionException(message);
  } on TlsException catch (e) {
    final message =
        'MqttServerWs2Connection::TLS exception raised on secure connection. '
        'Error is ${e.toString()}';
    throw MqttNoConnectionException(message);
  }
  return completer.future;
}