106 lines
2.4 KiB
JavaScript
106 lines
2.4 KiB
JavaScript
|
import mqtt from "mqtt/dist/mqtt"
|
|||
|
// import mqtt from "@/store/modules/mqtt.js"
|
|||
|
import store from "@/store"
|
|||
|
|
|||
|
//封装一个类(可直接cv)
|
|||
|
class MqttUtil {
|
|||
|
//创建公共变量
|
|||
|
static url //mqtt地址
|
|||
|
static userId //userId
|
|||
|
static clientId //clientId
|
|||
|
static options //clientId
|
|||
|
static client = null; //mqtt公共变量
|
|||
|
|
|||
|
//接收创建来的数据
|
|||
|
constructor() {
|
|||
|
this.url = import.meta.env.VITE_BASE_MQTT;
|
|||
|
// this.userId = store.state.user.user.userId;
|
|||
|
this.clientId = "mqtt_app_" + this.getUUID();
|
|||
|
|
|||
|
this.options = {
|
|||
|
qos: 1, //QoS 级别
|
|||
|
clean: false, // true: 清除会话, false: 保留会话
|
|||
|
connectTimeout: 3000, // 超时时间
|
|||
|
keepAlive: 60,
|
|||
|
username: "app_client",
|
|||
|
password: "app_client@2023",
|
|||
|
clientId: this.clientId
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//mqtt链接
|
|||
|
link() {
|
|||
|
if (this.client == null || this.client.connented == false) {
|
|||
|
let client = mqtt.connect(this.url, this.options);
|
|||
|
if (this.client == null) {
|
|||
|
this.client = client;
|
|||
|
|
|||
|
this.client.on("connect", error => {
|
|||
|
console.log("connect")
|
|||
|
})
|
|||
|
this.client.on("error", error => {
|
|||
|
console.log("error")
|
|||
|
})
|
|||
|
this.client.on("reconnect", error => {
|
|||
|
console.log("reconnect")
|
|||
|
})
|
|||
|
this.client.on("message", (topic, message) => {
|
|||
|
console.log("message:", message.toString())
|
|||
|
})
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//重新连接
|
|||
|
reconnect() {
|
|||
|
if (this.client.connected) {
|
|||
|
this.client.end(); // 关闭当前连接
|
|||
|
}
|
|||
|
this.client.connect(this.options); // 重新连接
|
|||
|
}
|
|||
|
//结束链接
|
|||
|
over() {
|
|||
|
this.client.end();
|
|||
|
this.client = null;
|
|||
|
}
|
|||
|
//订阅主题
|
|||
|
subscribes(topic) {
|
|||
|
this.client.subscribe(topic, error => {
|
|||
|
if (error) {
|
|||
|
console.error(`订阅主题失败:`, error)
|
|||
|
} else {
|
|||
|
console.log(`订阅主题成功`)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
//取消订阅
|
|||
|
unsubscribes(topic) {
|
|||
|
this.client.unsubscribe(topic, error => {
|
|||
|
if (!error) {
|
|||
|
console.log("取消订阅成功")
|
|||
|
} else {
|
|||
|
console.log("取消订阅错误", topic)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
//收到的消息
|
|||
|
get() {
|
|||
|
this.mqtt.client.on("message", (topic, message) => {
|
|||
|
console.log("接受消息")
|
|||
|
console.log("message:", message.toString())
|
|||
|
})
|
|||
|
}
|
|||
|
//发送消息
|
|||
|
send(message) {
|
|||
|
this.client.publish("test", JSON.stringify(message), res => {
|
|||
|
console.log(res)
|
|||
|
})
|
|||
|
}
|
|||
|
getUUID() {
|
|||
|
function S4() {
|
|||
|
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
|||
|
}
|
|||
|
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
export default MqttUtil
|