import 'dart:io'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; class MQTTClientManager { MqttServerClient client = MqttServerClient.withPort('10.0.2.2', 'mobile_client', 1883); Future<int> connect() async { client.logging(on: true); client.keepAlivePeriod = 60; client.onConnected = onConnected; client.onDisconnected = onDisconnected; client.onSubscribed = onSubscribed; client.pongCallback = pong; final connMessage = MqttConnectMessage().startClean().withWillQos(MqttQos.atLeastOnce); client.connectionMessage = connMessage; try { await client.connect(); } on NoConnectionException catch (e) { print('MQTTClient::Client exception - $e'); client.disconnect(); } on SocketException catch (e) { print('MQTTClient::Socket exception - $e'); client.disconnect(); } return 0; } void disconnect(){ client.disconnect(); } void subscribe(String topic) { client.subscribe(topic, MqttQos.atLeastOnce); } void onConnected() { print('MQTTClient::Connected'); } void onDisconnected() { print('MQTTClient::Disconnected'); } void onSubscribed(String topic) { print('MQTTClient::Subscribed to topic: $topic'); } void pong() { print('MQTTClient::Ping response received'); } void publishMessage(String topic, String message) { final builder = MqttClientPayloadBuilder(); builder.addString(message); client.publishMessage(topic, MqttQos.exactlyOnce, builder.payload!); } Stream<List<MqttReceivedMessage<MqttMessage>>>? getMessagesStream() { return client.updates; } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter