83 lines
1.9 KiB
Dart
83 lines
1.9 KiB
Dart
import 'package:mqtt5_client/mqtt5_client.dart';
|
|
import 'package:mqtt5_client/mqtt5_server_client.dart';
|
|
|
|
class Mqtt {
|
|
final MqttConfig _config;
|
|
MqttClient? _client;
|
|
|
|
Mqtt(this._config);
|
|
|
|
static late Mqtt _mqtt;
|
|
|
|
static Mqtt getInstance() {
|
|
return _mqtt;
|
|
}
|
|
|
|
static void setInstance(Mqtt server) {
|
|
_mqtt = server;
|
|
}
|
|
|
|
Future<bool> connect() async {
|
|
if (_client != null) {
|
|
return true;
|
|
}
|
|
_client =
|
|
MqttServerClient.withPort(_config.host, _config.clientId, _config.port);
|
|
_client?.autoReconnect = true;
|
|
|
|
await _client?.connect(_config.username, _config.password);
|
|
_client?.updates.listen((List<MqttReceivedMessage<MqttMessage>> message) {
|
|
final recMess = message[0].payload as MqttPublishMessage;
|
|
final payload =
|
|
MqttUtilities.bytesToStringAsString(recMess.payload.message!);
|
|
_config.messgae(message[0].topic!, payload);
|
|
});
|
|
_config.topic?.forEach((topic) {
|
|
subscribe(topic, _config.qos);
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
void disconnect() {
|
|
_client?.disconnect();
|
|
_client = null;
|
|
}
|
|
|
|
void subscribe(String topic, int qos) {
|
|
_client?.subscribe(topic, MqttUtilities.getQosLevel(qos));
|
|
}
|
|
|
|
void unSubscribe(String topic) {
|
|
_client?.unsubscribeStringTopic(topic);
|
|
}
|
|
|
|
void publish(String topic, String msg, {int qos = 0}) {
|
|
var payload = MqttPayloadBuilder();
|
|
payload.addString(msg);
|
|
_client?.publishMessage(
|
|
topic, MqttUtilities.getQosLevel(qos), payload.payload!);
|
|
}
|
|
}
|
|
|
|
class MqttConfig {
|
|
final String host;
|
|
final int port;
|
|
final String clientId;
|
|
String? username;
|
|
String? password;
|
|
List<String>? topic;
|
|
int qos;
|
|
Function(String topic, String message) messgae;
|
|
|
|
MqttConfig(
|
|
{required this.host,
|
|
this.port = 1883,
|
|
required this.clientId,
|
|
required this.messgae,
|
|
this.topic,
|
|
this.qos = 0,
|
|
this.username,
|
|
this.password});
|
|
}
|