149 lines
3.3 KiB
JavaScript
149 lines
3.3 KiB
JavaScript
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 |