connect method

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

Implementation

@override
Future<void> connect() async {
  mqtt.onConnected = onConnected;
  mqtt.onDisconnected = onDisconnected;
  mqtt.onAutoReconnect = onAutoReconnect;
  mqtt.onAutoReconnected = onAutoReconnected;

  _log.fine("Connecting to $server:$port");

  try {
    await mqtt.connect(username, password);
  } on NoConnectionException catch (e) {
    _log.warning("connect() error: $e");
    mqtt.disconnect();
    throw ConnectError(e.toString());
  } on SocketException catch (e) {
    _log.warning("connect() error: $e");
    mqtt.disconnect();
    throw ConnectError(e.toString());
  }

  // stream farm messages
  _mqttMessageSubscription =
      mqtt.updates!.listen((List<MqttReceivedMessage<MqttMessage?>> packets) {
    for (final received in packets) {
      final msg = received.payload as MqttPublishMessage;

      String? data;

      try {
        data = utf8.decode(msg.payload.message);
        _log.fine("received mqtt message on '${received.topic}': $data");
      } on FormatException catch (e) {
        _log.severe(
            "Error parsing mqtt message on '${received.topic}': ${msg.payload.message}");
      }

      if (data != null) {
        _messages.add(
            FarmMessage(received.topic, data, retained: msg.header!.retain));
      }
    }
  });
}