uniapp-ZHSQ/utils/mqtt.js
2025-09-24 17:24:22 +08:00

142 lines
4.0 KiB
JavaScript

import mqtt from 'mqtt/dist/mqtt'
import Vue from 'vue'
let mqttTool = {
client: null
}
mqttTool.connect = function(params, callbacks = {}){
let options = {
clientId: params.clientId,
username: 'dev01',
password: '211561',
clean: true,
reconnectPeriod: 1000,
protocolVersion: 4,
connectTimeout: 600000,
cleanSession: false
}
let client = null
client = mqtt.connect('wx://api.hshuishang.com:8084/mqtt', options)
console.log('WX', client)
mqttTool.client = client
// 设置连接状态回调
if (callbacks.onConnect) {
client.on('connect', callbacks.onConnect)
}
if (callbacks.onDisconnect) {
client.on('disconnect', callbacks.onDisconnect)
}
if (callbacks.onError) {
client.on('error', callbacks.onError)
}
if (callbacks.onReconnect) {
client.on('reconnect', callbacks.onReconnect)
}
client.on('connect', function() {
console.log('MQTT连接成功')
})
client.on('error', function(error) {
console.log('MQTT连接错误:', error)
})
client.on('reconnect', function() {
console.log('MQTT正在重连...')
})
return client
}
mqttTool.end = function(){
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log('App_text' + ':end 未连接')
return
}
mqttTool.client.end()
mqttTool.client = null
resolve('连接终止')
})
}
mqttTool.reconnect = function(){
console.log('连接已断开,重新连接中....')
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log('App_text' + ':reconnect 未连接')
return
}
mqttTool.client.reconnect()
})
}
mqttTool.subscribe = function(params){
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log('App_text' + ':unconnect 未连接')
return
}
mqttTool.client.subscribe(params.topic, { qos: params.qos }, function(err, res){
console.log(err, res)
if (!err && res.length > 0) {
resolve('订阅成功')
console.log('App_text' + ':subscribe success 订阅成功')
} else {
resolve('订阅失败')
console.log('App_text' + ':subscribe failed 订阅失败')
}
})
})
}
mqttTool.unsubscribe = function(params){
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log('App_text' + ':unconnect 未连接')
return
}
mqttTool.client.unsubscribe(params.topic, function(err){
if (!err) {
resolve('取消订阅成功')
console.log('App_text' + ':unsubscribe success 取消订阅成功')
} else {
resolve('取消订阅失败')
console.log('App_text' + ':unsubscribe failed 取消订阅失败')
}
})
})
}
mqttTool.publish = function(params){
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('未连接')
console.log('App_text' + ':unconnect 未连接')
return
}
mqttTool.client.publish(params.topic, params.message, function(err){
if (!err) {
resolve(params.topic + '-' + params.message + '-发送成功')
console.log('App_text' + ':publish success 发送成功')
} else {
resolve(params.topic + '-' + params.message + '-发送失败')
console.log('App_text' + ':publish failed 发送失败')
}
})
})
}
Vue.prototype.$mqtt = mqttTool
export default mqttTool