142 lines
4.0 KiB
JavaScript
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 |