/* main.js 项目主入口注入实例 */
|
// import mqttTool from './lib/mqttTool.js'
|
// Vue.prototype.$mqttTool = mqttTool
|
|
/* 使用范例见 /pages/index/index.vue */
|
// mqtt协议:H5使用ws/wss APP-PLUS使用wx/wxs
|
|
var mqtt = require('mqtt/dist/mqtt.js')
|
|
//客户端
|
let mqttTool = {
|
client: null
|
}
|
|
//连接息
|
mqttTool.connect = function(params){
|
let options = {
|
clientId: params.clientId,
|
username: params.username,
|
password: params.password,
|
clean: true,
|
keepalive:10, //心跳 单位:s
|
connectTimeout: 10*1000, //连接超时 单位:ms
|
cleanSession: true
|
}
|
let client = mqtt.connect(params.url, options);
|
mqttTool.client = client
|
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(){
|
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 订阅失败")
|
return;
|
}
|
})
|
})
|
}
|
|
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 取消订阅失败")
|
return;
|
}
|
})
|
})
|
}
|
|
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 发送失败")
|
return;
|
}
|
})
|
})
|
}
|
|
//消息处理
|
mqttTool.message = function(){
|
return new Promise((resolve, reject) => {
|
if(mqttTool.client == null){
|
resolve('未连接')
|
console.log('App_text' + ":unconnect 未连接")
|
return;
|
}
|
if(mqttTool.client != null && ! mqttTool.client.connected){
|
mqttTool.client.reconnect()
|
}
|
|
mqttTool.client.on('message', function(topic, message, buffer) {
|
console.info(topic)
|
console.info(message)
|
setTimeout(() => {
|
resolve({topic, message, buffer })
|
}, 300)
|
})
|
|
})
|
}
|
|
|
|
export default mqttTool
|