@glodon-ecs/web-bridge-sdk 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +5 -0
  2. package/index.js +72 -0
  3. package/package.json +5 -0
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ ## ECS-BRIDGE-SDK
2
+
3
+ > ECS 通信桥接 SDK
4
+
5
+ - node >= 16
package/index.js ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * 全局消息订阅发布,依赖桥接对象(__ECS_HUB_BRIDGE__)作为全局消息中心,转发消息
3
+ *
4
+ * 优点:QT、WEB与Panel的通信,可使用同一套代码处理消息双向互通
5
+ * 缺点:依赖浏览器环境、存在全局函数冲突风险、window对象污染
6
+ *
7
+ * 场景1:Panel订阅QT的消息
8
+ * Panel订阅全局消息
9
+ * __ECS_HUB_BRIDGE_CLIENT__.subscribe(panel.callback)
10
+ *
11
+ * QT发布消息
12
+ * QT.invoke(__ECS_HUB_PUBLISH_MESSAGE__, args)
13
+ *
14
+ *
15
+ * 场景2:Panel订阅WEB的消息
16
+ * Panel订阅全局消息
17
+ * __ECS_HUB_BRIDGE_CLIENT__.subscribe(panel.callback)
18
+ *
19
+ * WEB发布消息
20
+ * web.invoke(__ECS_HUB_PUBLISH_MESSAGE__, args)
21
+ *
22
+ *
23
+ * 场景3:WEB端订阅来自Panel的消息
24
+ * WEB订阅全局消息
25
+ * __ECS_HUB_BRIDGE_CLIENT__.subscribe(web.callback)
26
+ *
27
+ * Panel发布消息
28
+ * panel.invoke(__ECS_HUB_PUBLISH_MESSAGE__, args)
29
+ *
30
+ *
31
+ * 场景4:QT端订阅来自Panel的消息
32
+ * QT订阅全局消息
33
+ * __ECS_HUB_BRIDGE_CLIENT__.subscribe(qt.callback)
34
+ *
35
+ * Panel发布消息
36
+ * panel.invoke(__ECS_HUB_PUBLISH_MESSAGE__, args)
37
+ */
38
+
39
+ function __ECS_HUB_BRIDGE__() {
40
+ // 单例,确保同一环境下数据共享
41
+ if (__ECS_HUB_BRIDGE__.instance) return __ECS_HUB_BRIDGE__.instance;
42
+ if (!(this instanceof __ECS_HUB_BRIDGE__))
43
+ return (
44
+ (__ECS_HUB_BRIDGE__.instance = new __ECS_HUB_BRIDGE__()),
45
+ __ECS_HUB_BRIDGE__.instance
46
+ );
47
+ this.subscribers = [];
48
+ }
49
+
50
+ __ECS_HUB_BRIDGE__.prototype.publish = function (payload) {
51
+ for (var index = 0; index < this.subscribers.length; index++) {
52
+ var subscriber = this.subscribers[index];
53
+ subscriber(payload);
54
+ }
55
+ };
56
+ __ECS_HUB_BRIDGE__.prototype.subscribe = function (subscriber) {
57
+ var FN_RANDOM_ID = "__FN_RANDOM_ID__" + Math.random();
58
+ subscriber.__FN_RANDOM_ID__ = FN_RANDOM_ID;
59
+ this.subscribers.push(subscriber);
60
+ return FN_RANDOM_ID;
61
+ };
62
+ __ECS_HUB_BRIDGE__.prototype.unsubscribe = function (randomId) {
63
+ var index = this.subscribers.findIndex(function (fn, index) {
64
+ return randomId && fn.__FN_RANDOM_ID__ === randomId;
65
+ });
66
+ if (index !== -1) this.subscribers.splice(index, 1);
67
+ };
68
+
69
+ window.__ECS_HUB_BRIDGE_CLIENT__ = new __ECS_HUB_BRIDGE__();
70
+ window.__ECS_HUB_PUBLISH_MESSAGE__ = function (payload) {
71
+ window.__ECS_HUB_BRIDGE_CLIENT__.publish(payload);
72
+ };
package/package.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@glodon-ecs/web-bridge-sdk",
3
+ "version": "0.0.1",
4
+ "main": "index.js"
5
+ }