@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.
- package/README.md +5 -0
- package/index.js +72 -0
- package/package.json +5 -0
package/README.md
ADDED
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
|
+
};
|