UNPKG

@zhangqingcq/vgce

Version:

Vector graphics configure editor. svg组态编辑器。基于vue3.3+ts+element-plus+vite

75 lines (63 loc) 1.73 kB
import { connect } from 'mqtt/dist/mqtt' import type { MqttClient, PacketCallback } from 'mqtt' class Link { client: MqttClient | null constructor() { this.client = null } sub(url: string, user: string, pwd: string, topics: string, callback: any) { const _url = url.trim() if (!/^wss?:\/\/.*$/.test(_url)) { console.error('编辑器MQTT通信只支持ws协议 (url必须以"ws://"开头)') return false } this.client = connect(_url, { username: user.trim(), password: pwd.trim(), reconnectPeriod: 120000 /*如果连不上,2分钟后重试*/ }) this.client?.on('connect', () => { console.log('MQTT服务器连接成功') console.log(this.client?.options.clientId) this.client?.subscribe(topics, { qos: 1 }) }) this.client?.on('message', callback) } pub(url: string, user: string, pwd: string, topics: string, data: any, callback: PacketCallback) { const _url = url.trim() if (!/^wss?:\/\/.*$/.test(_url)) { console.error('编辑器MQTT通信只支持ws协议 (url必须以"ws://"开头)') return false } this.client = connect(_url, { username: user.trim(), password: pwd.trim() }) this.client?.on('connect', () => { console.log('MQTT服务器连接成功') console.log(this.client?.options.clientId) this.client?.publish( topics, JSON.stringify(data), { qos: 0, retain: true }, callback ) }) } close(callback?: () => void) { this.client?.end?.(true, {}, () => { console.log('MQTT服务连接关闭') callback?.() }) } destroy() { this.client = null } } const t = function () { return new Link() } export default t