Xazn-app/common/mqttTool.js

149 lines
3.3 KiB
JavaScript
Raw Permalink Normal View History

2025-05-22 16:37:43 +08:00
import projectConfig from '@/env.config.js';
var mqtt = require('mqtt/dist/mqtt.min.js')
var url = projectConfig.mqttServer;
let mqttTool = {
client: null
}
mqttTool.connect = function (token) {
let options = {
clientId: 'phone-' + Math.random().toString(16).substr(2),
username: 'fastbee',
password: token,
cleanSession: true,
keepalive: 30,
connectTimeout: 60000,
};
mqttTool.client = mqtt.connect(url, options);
// 连接成功
mqttTool.client.on('connect', function (res) {
console.log('mqtt连接成功');
});
// 重新连接
mqttTool.client.on('reconnect', function (res) {
console.log('mqtt重连');
});
// 发生错误
mqttTool.client.on('error', function (err) {
console.log('mqtt连接错误:', err);
uni.showToast({
icon: 'none',
title: 'mqtt连接错误',
});
});
// 断开连接
mqttTool.client.on('close', function (res) {
console.log('mqtt断开连接');
});
}
mqttTool.end = function () {
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log("未连接")
return;
}
mqttTool.client.end()
mqttTool.client = null
resolve('连接终止')
})
}
mqttTool.reconnect = function () {
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
// 调用resolve方法Promise变为操作成功状态fulfilled
resolve('未连接')
console.log("未连接")
return;
}
console.log('正在重连...', res);
mqttTool.client.reconnect()
})
}
mqttTool.subscribe = function (topics) {
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log("未连接")
uni.showToast({
icon: 'none',
title: 'mqtt未连接',
});
return;
}
mqttTool.client.subscribe(topics, {
qos: 0
}, function (err, res) {
console.log("订阅主题:", topics);
if (!err && res.length > 0) {
console.log("订阅成功")
resolve('订阅成功')
} else {
console.log("订阅失败,主题可能已经订阅")
resolve('订阅失败')
return;
}
})
})
}
mqttTool.unsubscribe = function (topics) {
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log("未连接")
return;
}
mqttTool.client.unsubscribe(topics, function (err) {
if (!err) {
resolve('取消订阅成功')
console.log("取消订阅成功")
} else {
resolve('取消订阅失败')
console.log("取消订阅失败")
return;
}
})
})
}
mqttTool.publish = function (topic, message, name) {
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log("未连接")
uni.showToast({
icon: 'none',
title: '已断开Mqtt连接',
});
return;
}
mqttTool.client.publish(topic, message, function (err) {
if (!err) {
resolve(topic + '-' + message + '-发布成功')
console.log('发布主题:' + topic + ",内容:" + message);
uni.showToast({
icon: 'none',
title: "[ " + name + " ] 指令发送成功",
duration: 1000,
});
} else {
resolve(topic + '-' + message + '-发布失败')
console.log("发布失败")
uni.showToast({
icon: 'none',
title: "[ " + name + " ] 指令发送失败",
duration: 1000,
});
return;
}
})
})
}
export default mqttTool