首次提交

This commit is contained in:
qmqz
2025-01-02 10:08:03 +08:00
commit fd62ed3d98
16 changed files with 1143 additions and 0 deletions

82
lib/base/mqtt/mqtt.dart Normal file
View File

@@ -0,0 +1,82 @@
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});
}