mini-mqtt-bus
Version:
MQTT client wrapper with event bus for WeChat Mini Programs
77 lines (76 loc) • 2.18 kB
JavaScript
class c {
constructor() {
this.events = {};
}
/**
* 监听事件
* @param event 事件名称
* @param callback 回调函数
*/
on(e, o) {
this.events[e] || (this.events[e] = []), this.events[e].push(o);
}
/**
* 移除事件监听
* @param event 事件名称
* @param callback 可选的回调函数,不传则移除所有该事件监听
*/
off(e, o) {
this.events[e] && (o ? this.events[e] = this.events[e].filter((i) => i !== o) : delete this.events[e]);
}
/**
* 派发事件
* @param event 事件名称
* @param args 参数
*/
emit(e, ...o) {
this.events[e] && this.events[e].forEach((i) => i(...o));
}
}
const s = new c(), r = require("../mqtt/mqtt.min.js");
let n = null;
function l(t) {
n && n.connected || (n = r.connect(t), n.on("connect", () => {
console.log("[MQTT] 已连接"), s.emit("mqtt:connected");
}), n.on("message", (e, o) => {
const i = o.toString();
console.log(`[MQTT] 收到消息: ${e} => ${i}`), s.emit(`mqtt:message:${e}`, i), s.emit("mqtt:message", { topic: e, payload: i });
}), n.on("reconnect", () => {
console.log("[MQTT] 正在重连..."), s.emit("mqtt:reconnecting");
}), n.on("close", () => {
console.warn("[MQTT] 连接关闭"), s.emit("mqtt:closed");
}), n.on("error", (e) => {
console.error("[MQTT] 错误:", e), s.emit("mqtt:error", e);
}));
}
function u(t) {
if (!n || !n.connected) {
console.warn("[MQTT] 客户端未连接,无法订阅");
return;
}
n.subscribe(t, { qos: 0 }, (e) => {
e ? console.error(`[MQTT] 订阅失败: ${t}`, e) : (console.log(`[MQTT] 已订阅: ${t}`), s.emit(`mqtt:subscribed:${t}`, t));
});
}
function m(t) {
!n || !n.connected || n.unsubscribe(t, (e) => {
e ? console.error(`[MQTT] 取消订阅失败: ${t}`, e) : (console.log(`[MQTT] 已取消订阅: ${t}`), s.emit("mqtt:unsubscribed", t));
});
}
function f(t, e) {
!n || !n.connected || n.publish(t, e);
}
function T() {
n && (n.end(), n = null, s.emit("mqtt:disconnected"));
}
const d = {
init: l,
subscribe: u,
unsubscribe: m,
publish: f,
disconnect: T
};
export {
s as eventBus,
d as mqttClient
};