150 lines
4.2 KiB
JavaScript
150 lines
4.2 KiB
JavaScript
import mqtt from 'mqtt/dist/mqtt'
|
||
import Vue from 'vue'
|
||
// 引入Buffer,适配小程序环境
|
||
import { Buffer } from 'buffer';
|
||
// 挂载到全局,确保所有文件可访问
|
||
if (typeof window !== 'undefined') {
|
||
window.Buffer = Buffer;
|
||
} else if (typeof global !== 'undefined') {
|
||
global.Buffer = Buffer;
|
||
}
|
||
|
||
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 |