UNPKG

mini-mqtt-bus

Version:

MQTT client wrapper with event bus for WeChat Mini Programs

77 lines (76 loc) 2.18 kB
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 };