From e491cdb48129752324c4e3764f99bd9203c56dec Mon Sep 17 00:00:00 2001
From: lgq <1015864684@qq.com>
Date: 星期二, 31 三月 2026 09:48:44 +0800
Subject: [PATCH] 1.新增VF205门禁机代码
---
vf205_access/dxmodules/dxMqtt.js | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 225 insertions(+), 0 deletions(-)
diff --git a/vf205_access/dxmodules/dxMqtt.js b/vf205_access/dxmodules/dxMqtt.js
new file mode 100644
index 0000000..71346ac
--- /dev/null
+++ b/vf205_access/dxmodules/dxMqtt.js
@@ -0,0 +1,225 @@
+//build:20240411
+//鍒╃敤mqtt鍗忚瀹炵幇鍜宮qtt鏈嶅姟绔殑閫氫俊鎴栭�氳繃mqtt broker瀹炵幇鍜屽叾瀹僲qtt瀹㈡埛绔殑閫氫俊
+//渚濊禆缁勪欢 dxMap,dxLogger,dxDriver,dxCommon,dxEventBus,dxNet
+import { mqttClass } from './libvbar-m-dxmqtt.so'
+import * as os from "os"
+import std from './dxStd.js'
+import dxMap from './dxMap.js'
+import dxCommon from './dxCommon.js'
+import bus from './dxEventBus.js'
+const map = dxMap.get("default")
+const mqttObj = new mqttClass();
+const mqtt = {}
+/**
+ * 鍒濆鍖杕qtt鐩稿叧灞炴�у苟鍒涘缓杩炴帴,璇峰湪worker閲屼娇鐢╠xMqtt缁勪欢鎴栦娇鐢ㄧ畝鍖栧嚱鏁癲xMqtt.run
+ * @param {string} mqttAddr mqtt鏈嶅姟鍦板潃锛屽繀濉紝浠cp://寮�澶达紝鏍煎紡鏄痶cp://ip:port
+ * @param {string} clientId 瀹㈡埛绔痠d锛屽繀濉紝涓嶅悓鐨勮澶囪浣跨敤涓嶅悓鐨勫鎴风id
+ * @param {string} username 闈炲繀濉紝mqtt鐢ㄦ埛鍚�
+ * @param {string} password 闈炲繀濉紝mqtt瀵嗙爜
+ * @param {string} prefix 闈炲繀濉紝缂虹渷涓虹┖瀛楃涓诧紝杩欎釜琛ㄧず鑷姩鍦ㄤ富棰樺墠鍔犱笂涓�涓墠缂�
+ * @param {number} qos 0,1,2 闈炲繀濉紝缂虹渷鏄�1. 鍏朵腑0琛ㄧず娑堟伅鏈�澶氬彂閫佷竴娆★紝鍙戦�佸悗娑堟伅灏辫涓㈠純;1琛ㄧず娑堟伅鑷冲皯鍙戦�佷竴娆★紝鍙互淇濊瘉娑堟伅琚帴鏀舵柟鏀跺埌锛屼絾鏄細瀛樺湪鎺ユ敹鏂规敹鍒伴噸澶嶆秷鎭殑鎯呭喌;2琛ㄧず娑堟伅鍙戦�佹垚鍔熶笖鍙彂閫佷竴娆�,璧勬簮寮�閿�澶�
+ * @param {string} willTopic 闈炲繀濉紝閬楀槺涓婚锛岄�氳繃broker閫氫俊鐨勬椂鍊欒澶囨柇寮�浼氳嚜鍔ㄨЕ鍙戜竴涓猰qtt閬楀槺娑堟伅锛岃繖涓槸閬楀槺娑堟伅鐨勪富棰�
+ * @param {string} willMessage 闈炲繀濉紝閬楀槺鍐呭锛岄�氳繃broker閫氫俊鐨勬椂鍊欒澶囨柇寮�浼氳嚜鍔ㄨЕ鍙戜竴涓猰qtt閬楀槺娑堟伅锛岃繖涓槸閬楀槺娑堟伅鐨勫唴瀹�
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堣嫢鍒濆鍖栧涓疄渚嬮渶瑕佷紶鍏ュ敮涓�id锛�
+ */
+mqtt.init = function (mqttAddr, clientId, username, password, prefix = "", qos = 1, willTopic, willMessage, id) {
+
+ if (mqttAddr === undefined || mqttAddr.length === 0) {
+ throw new Error("dxMqtt.init: 'mqttAddr' parameter should not be null or empty")
+ }
+ if (clientId === undefined || clientId.length === 0) {
+ throw new Error("dxMqtt.init: 'clientId' parameter should not be null or empty")
+ }
+ // 濡傛灉mqttAddr涓嶄互tcp://寮�澶达紝鑷姩娣诲姞鍓嶇紑
+ if (!mqttAddr.startsWith('tcp://')) {
+ mqttAddr = 'tcp://' + mqttAddr
+ }
+ let pointer = mqttObj.init(mqttAddr, clientId, username, password, prefix, qos, willTopic, willMessage);
+ if (pointer === undefined || pointer === null) {
+ throw new Error("dxMqtt.init: mqtt init failed")
+ }
+
+ dxCommon.handleId("mqtt", id, pointer)
+}
+
+/**
+ * 閲嶆柊杩炴帴,姣斿杩炴帴鎴愬姛鍚庣獊鐒剁綉缁滄柇寮�锛屾棤闇�閲嶆柊init锛岀洿鎺ラ噸杩炲嵆鍙�
+ * @param {string} willTopic 闈炲繀濉紝閬楀槺涓婚锛岄�氳繃broker閫氫俊鐨勬椂鍊欒澶囨柇寮�浼氳嚜鍔ㄨЕ鍙戜竴涓猰qtt閬楀槺娑堟伅锛岃繖涓槸閬楀槺娑堟伅鐨勪富棰�
+ * @param {string} willMessage 闈炲繀濉紝閬楀槺鍐呭锛岄�氳繃broker閫氫俊鐨勬椂鍊欒澶囨柇寮�浼氳嚜鍔ㄨЕ鍙戜竴涓猰qtt閬楀槺娑堟伅锛岃繖涓槸閬楀槺娑堟伅鐨勫唴瀹�
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ */
+mqtt.reconnect = function (willTopic, willMessage, id) {
+ let pointer = dxCommon.handleId("mqtt", id)
+ return mqttObj.recreate(pointer, willTopic, willMessage);
+}
+
+/**
+ * 璁㈤槄澶氫富棰�
+ * @param {array} topics 蹇呭~锛� 瑕佽闃呯殑涓婚鏁扮粍锛屽彲浠ュ悓鏃惰闃呭涓�
+ * @param {number} qos 闈炲繀濉紝缂虹渷鏄�1. 鍏朵腑0琛ㄧず娑堟伅鏈�澶氬彂閫佷竴娆★紝鍙戦�佸悗娑堟伅灏辫涓㈠純;1琛ㄧず娑堟伅鑷冲皯鍙戦�佷竴娆★紝鍙互淇濊瘉娑堟伅琚帴鏀舵柟鏀跺埌锛屼絾鏄細瀛樺湪鎺ユ敹鏂规敹鍒伴噸澶嶆秷鎭殑鎯呭喌;2琛ㄧず娑堟伅鍙戦�佹垚鍔熶笖鍙彂閫佷竴娆�,璧勬簮寮�閿�澶�
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ * @returns
+ */
+mqtt.subscribes = function (topics, qos, id) {
+ if (topics === undefined || topics.length === 0) {
+ throw new Error("dxMqtt.subscribes: 'topics' parameter should not be null or empty")
+ }
+
+ if (qos === undefined) {
+ qos = 1
+ }
+ let pointer = dxCommon.handleId("mqtt", id)
+ return mqttObj.subscribes(pointer, topics, qos);
+}
+
+/**
+ * 鍒ゆ柇mqtt鏄惁杩炴帴锛岃繛鎺ユ垚鍔熷悗濡傛灉缃戠粶鏂紑锛岃繛鎺ヤ篃浼氭柇寮�
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ * @returns false澶辫触锛� true鎴愬姛
+ */
+mqtt.isConnected = function (id) {
+ let pointer = dxCommon.handleId("mqtt", id)
+ return mqttObj.isConnected(pointer);
+}
+
+/**
+ * 鏌ヨmqtt閰嶇疆
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ * @returns mqtt閰嶇疆
+ */
+mqtt.getConfig = function (id) {
+ let pointer = dxCommon.handleId("mqtt", id)
+ return mqttObj.getConfig(pointer);
+}
+
+/**
+ * mqtt閰嶇疆鏇存柊
+ * @param {object} options 閰嶇疆鍙傛暟锛屽ぇ閮ㄥ垎鍙互鐢ㄩ粯璁ゅ��
+ * @param {string} options.mqttAddr mqtt鏈嶅姟鍦板潃锛屽繀濉紝浠cp://寮�澶达紝鏍煎紡鏄痶cp://ip:port
+ * @param {string} options.clientId 瀹㈡埛绔痠d锛屽繀濉紝涓嶅悓鐨勮澶囪浣跨敤涓嶅悓鐨勫鎴风id
+ * @param {string} options.userName 闈炲繀濉紝mqtt鐢ㄦ埛鍚�
+ * @param {string} options.password 闈炲繀濉紝mqtt瀵嗙爜
+ * @param {string} options.prefix 闈炲繀濉紝缂虹渷涓虹┖瀛楃涓诧紝杩欎釜琛ㄧず鑷姩鍦ㄤ富棰樺墠鍔犱笂涓�涓墠缂�
+ * @param {number} options.qos 0,1,2 闈炲繀濉紝缂虹渷鏄�1. 鍏朵腑0琛ㄧず娑堟伅鏈�澶氬彂閫佷竴娆★紝鍙戦�佸悗娑堟伅灏辫涓㈠純;1琛ㄧず娑堟伅鑷冲皯鍙戦�佷竴娆★紝鍙互淇濊瘉娑堟伅琚帴鏀舵柟鏀跺埌锛屼絾鏄細瀛樺湪鎺ユ敹鏂规敹鍒伴噸澶嶆秷鎭殑鎯呭喌;2琛ㄧず娑堟伅鍙戦�佹垚鍔熶笖鍙彂閫佷竴娆�,璧勬簮寮�閿�澶�
+ * @param {string} options.ssl 闈炲繀濉紝ssl閰嶇疆绫�
+ */
+mqtt.updateConfig = function (options, id) {
+ if (!options) {
+ throw new Error("dxMqtt.updateConfig: 'options' parameter should not be null or empty")
+ }
+ if (options.mqttAddr === undefined || options.mqttAddr.length === 0) {
+ throw new Error("dxMqtt.updateConfig: 'options.mqttAddr' parameter should not be null or empty")
+ }
+ if (options.clientId === undefined || options.clientId.length === 0) {
+ throw new Error("dxMqtt.updateConfig: 'options.clientId' parameter should not be null or empty")
+ }
+ if (options.qos === undefined || options.qos == null) {
+ throw new Error("dxMqtt.updateConfig: 'options.qos' parameter should not be null or empty")
+ }
+ // 濡傛灉mqttAddr涓嶄互tcp://寮�澶达紝鑷姩娣诲姞鍓嶇紑
+ if (!options.mqttAddr.startsWith('tcp://')) {
+ options.mqttAddr = 'tcp://' + options.mqttAddr
+ }
+ let pointer = dxCommon.handleId("mqtt", id)
+ let res = mqttObj.setConfig(pointer, options);
+ return res;
+}
+
+/**
+ * 鍙戦�乵qtt璇锋眰
+ * @param {string} topic 涓婚锛屽繀濉�
+ * @param {string} payload 娑堟伅浣撳唴瀹癸紝蹇呭~
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ */
+mqtt.send = function (topic, payload, id) {
+ if (topic === undefined || topic.length === 0) {
+ throw new Error("dxMqtt.send:'topic' parameter should not be null or empty")
+ }
+ if (payload === undefined || payload.length === 0) {
+ throw new Error("dxMqtt.send:'payload' parameter should not be null or empty")
+ }
+ let pointer = dxCommon.handleId("mqtt", id)
+ return mqttObj.sendMsg(pointer, topic, payload);
+}
+
+/**
+ * 鎺ユ敹mqtt鏁版嵁,闇�瑕佽疆璇㈠幓鑾峰彇
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ * @return mqtt璇锋眰鏁版嵁锛岀粨鏋勬槸: {topic:'涓婚',payload:'鍐呭'}
+ */
+mqtt.receive = function (id) {
+ let msg = mqttObj.msgReceive(id);
+ return JSON.parse(msg);
+}
+
+/**
+ * 鍒ゆ柇鏄惁鏈夋柊鐨勬暟鎹紝涓�鑸厛鍒ゆ柇鏈夋暟鎹悗鍐嶈皟鐢╮eceive鍘昏幏鍙栨暟鎹�
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ * @returns false 鏈夋暟鎹紱true 娌℃湁鏁版嵁
+ */
+mqtt.msgIsEmpty = function (id) {
+ return mqttObj.msgIsEmpty(id);
+}
+
+/**
+ * 閿�姣乵qtt瀹炰緥
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ */
+mqtt.destroy = function (id) {
+ let pointer = dxCommon.handleId("mqtt", id)
+ mqttObj.deinit(pointer);
+}
+
+mqtt.RECEIVE_MSG = '__mqtt__MsgReceive'
+mqtt.CONNECTED_CHANGED = '__mqtt__Connect_changed'
+mqtt.RECONNECT = '__mqtt__Reconnect'
+
+/**
+ * 鐢ㄧ畝鍗曠殑鏂瑰紡瀹炵幇mqtt瀹㈡埛绔紝鍙渶瑕佽皟鐢ㄨ繖涓�涓嚱鏁板氨鍙互瀹炵幇mqtt瀹㈡埛绔紝
+ * 鏀跺埌娑堟伅浼氳Е鍙戠粰 dxEventBus鍙戦�佷竴涓簨浠讹紝浜嬩欢鐨勪富棰樻槸mqtt.RECEIVE_MQTT_MSG锛屽唴瀹规槸{topic:'',payload:''}鏍煎紡
+ * 濡傛灉闇�瑕佸彂閫佹秷鎭紝鐩存帴浣跨敤 mqtt.send鏂规硶 mqtt鍙戦�佺殑鏁版嵁鏍煎紡绫讳技锛� { topic: "sendtopic1", payload: JSON.stringify({ a: i, b: "ssss" }) }
+ * mqtt鐨勮繛鎺ョ姸鎬佸彂鐢熷彉鍖栦細瑙﹀彂缁� dxEventBus鍙戦�佷竴涓簨浠讹紝浜嬩欢鐨勪富棰樻槸mqtt.CONNECTED_CHANGED锛屽唴瀹规槸'connected'鎴栬��'disconnect'
+ * mqtt闇�瑕佹湁缃戠粶锛屾墍浠ュ繀椤诲湪浣跨敤涔嬪墠纭繚dxNet缁勪欢瀹屾垚鍒濆鍖�
+ * @param {object} options mqtt鐩稿叧鍙傛暟,蹇呭~
+ * @param {string} options.mqttAddr mqtt鏈嶅姟鍦板潃锛屽繀濉紝浠cp://寮�澶达紝鏍煎紡鏄痶cp://ip:port
+ * @param {string} options.clientId 瀹㈡埛绔痠d锛屽繀濉紝涓嶅悓鐨勮澶囪浣跨敤涓嶅悓鐨勫鎴风id
+ * @param {string} options.username 闈炲繀濉紝mqtt鐢ㄦ埛鍚�
+ * @param {string} options.password 闈炲繀濉紝mqtt瀵嗙爜
+ * @param {string} options.prefix 闈炲繀濉紝缂虹渷涓虹┖瀛楃涓诧紝杩欎釜琛ㄧず鑷姩鍦ㄤ富棰樺墠鍔犱笂涓�涓墠缂�
+ * @param {number} options.qos 0,1,2 闈炲繀濉紝缂虹渷鏄�1. 鍏朵腑0琛ㄧず娑堟伅鏈�澶氬彂閫佷竴娆★紝鍙戦�佸悗娑堟伅灏辫涓㈠純;1琛ㄧず娑堟伅鑷冲皯鍙戦�佷竴娆★紝鍙互淇濊瘉娑堟伅琚帴鏀舵柟鏀跺埌锛屼絾鏄細瀛樺湪鎺ユ敹鏂规敹鍒伴噸澶嶆秷鎭殑鎯呭喌;2琛ㄧず娑堟伅鍙戦�佹垚鍔熶笖鍙彂閫佷竴娆�,璧勬簮寮�閿�澶�
+ * @param {string} options.willTopic 闈炲繀濉紝閬楀槺涓婚锛岄�氳繃broker閫氫俊鐨勬椂鍊欒澶囨柇寮�浼氳嚜鍔ㄨЕ鍙戜竴涓猰qtt閬楀槺娑堟伅锛岃繖涓槸閬楀槺娑堟伅鐨勪富棰�
+ * @param {string} options.willMessage 闈炲繀濉紝閬楀槺鍐呭锛岄�氳繃broker閫氫俊鐨勬椂鍊欒澶囨柇寮�浼氳嚜鍔ㄨЕ鍙戜竴涓猰qtt閬楀槺娑堟伅锛岃繖涓槸閬楀槺娑堟伅鐨勫唴瀹�
+ * @param {array} options.subs 闈炲繀濉紝瑕佽闃呯殑涓婚缁�
+ * @param {string} options.id 鍙ユ焺id锛岄潪蹇呭~锛堣嫢鍒濆鍖栧涓疄渚嬮渶瑕佷紶鍏ュ敮涓�id锛�
+ */
+mqtt.run = function (options) {
+ if (options === undefined || options.length === 0) {
+ throw new Error("dxmqtt.run:'options' parameter should not be null or empty")
+ }
+ if (options.id === undefined || options.id === null || typeof options.id !== 'string') {
+ // 鍙ユ焺id
+ options.id = ""
+ }
+ let oldfilepre = '/app/code/dxmodules/mqttWorker'
+ let content = std.loadFile(oldfilepre + '.js').replace("{{id}}", options.id)
+ let newfile = oldfilepre + options.id + '.js'
+ std.saveFile(newfile, content)
+ let init = map.get("__mqtt__run_init" + options.id)
+ if (!init) {//纭繚鍙垵濮嬪寲涓�娆�
+ map.put("__mqtt__run_init" + options.id, options)
+ bus.newWorker(options.id || "__mqtt", newfile)
+ }
+}
+/**
+ * 鑾峰彇褰撳墠mqtt杩炴帴鐨勭姸鎬�
+ * @param {string} id 鍙ユ焺id锛岄潪蹇呭~锛堥渶淇濇寔鍜宨nit涓殑id涓�鑷达級
+ * @returns 'connected' 鎴栬�� 'disconnected'
+ */
+mqtt.getConnected = function (id) {
+ if (id == undefined || id == null) {
+ id = ""
+ }
+ return mqtt.isConnected(id) ? "connected" : "disconnected"
+}
+
+export default mqtt;
--
Gitblit v1.9.3