@lsby/net-core 0.13.10 → 0.14.0
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/dist/cjs/global/model/hub.cjs +30 -26
- package/dist/cjs/global/model/hub.d.cts +9 -10
- package/dist/cjs/global/model/web-socket.cjs +19 -42
- package/dist/cjs/global/model/web-socket.d.cts +3 -5
- package/dist/cjs/global/web-socket.cjs +19 -42
- package/dist/cjs/help/help.cjs +19 -42
- package/dist/cjs/index.cjs +42 -45
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/interface/interface-logic.cjs +19 -42
- package/dist/cjs/plugin/web-socket.cjs +33 -29
- package/dist/cjs/plugin/web-socket.d.cts +5 -2
- package/dist/cjs/server/server.cjs +19 -42
- package/dist/esm/{chunk-MVMDWJTB.js → chunk-2IOILFRG.js} +1 -1
- package/dist/esm/{chunk-7GT72IUT.js → chunk-CPJIGVXF.js} +7 -7
- package/dist/esm/{chunk-P23ZAK4I.js → chunk-NRXEIWM6.js} +1 -1
- package/dist/esm/{chunk-AB35ZHL3.js → chunk-SMLWKWSD.js} +1 -1
- package/dist/esm/{chunk-TE6CG2FF.js → chunk-XPACPTVL.js} +1 -1
- package/dist/esm/chunk-YRLVAFRQ.js +63 -0
- package/dist/esm/{chunk-MRTIZDKN.js → chunk-ZFLDOR4T.js} +6 -17
- package/dist/esm/global/model/hub.d.ts +9 -10
- package/dist/esm/global/model/hub.js +3 -3
- package/dist/esm/global/model/web-socket.d.ts +3 -5
- package/dist/esm/global/model/web-socket.js +2 -2
- package/dist/esm/global/web-socket.js +3 -3
- package/dist/esm/help/help.js +4 -4
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +17 -12
- package/dist/esm/interface/interface-logic.js +5 -5
- package/dist/esm/plugin/web-socket.d.ts +5 -2
- package/dist/esm/plugin/web-socket.js +2 -2
- package/dist/esm/server/server.js +4 -4
- package/package.json +1 -1
- package/dist/esm/chunk-NTDDPUP7.js +0 -59
package/dist/cjs/index.cjs
CHANGED
|
@@ -55,6 +55,8 @@ __export(index_exports, {
|
|
|
55
55
|
\u865A\u62DF\u6587\u4EF6\u8FD4\u56DE\u5668: () => \u865A\u62DF\u6587\u4EF6\u8FD4\u56DE\u5668,
|
|
56
56
|
\u8C03\u8BD5\u8BF7\u6C42\u5934\u63D2\u4EF6: () => \u8C03\u8BD5\u8BF7\u6C42\u5934\u63D2\u4EF6,
|
|
57
57
|
\u8DEF\u5F84\u89E3\u6790\u63D2\u4EF6: () => \u8DEF\u5F84\u89E3\u6790\u63D2\u4EF6,
|
|
58
|
+
\u96C6\u7EBF\u5668\u6A21\u578B: () => \u96C6\u7EBF\u5668\u6A21\u578B,
|
|
59
|
+
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B: () => \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B,
|
|
58
60
|
\u9759\u6001\u6587\u4EF6\u8FD4\u56DE\u5668: () => \u9759\u6001\u6587\u4EF6\u8FD4\u56DE\u5668,
|
|
59
61
|
\u9ED8\u8BA4\u8BF7\u6C42\u9644\u52A0\u53C2\u6570: () => \u9ED8\u8BA4\u8BF7\u6C42\u9644\u52A0\u53C2\u6570
|
|
60
62
|
});
|
|
@@ -65,9 +67,20 @@ var import_ts_log = require("@lsby/ts-log");
|
|
|
65
67
|
var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
|
|
66
68
|
|
|
67
69
|
// src/global/model/hub.ts
|
|
68
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B = class {
|
|
71
|
+
\u89E3\u9664\u56DE\u8C03 = null;
|
|
72
|
+
/** @internal */
|
|
73
|
+
\u7ED1\u5B9A\u56DE\u8C03(\u56DE\u8C03) {
|
|
74
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
75
|
+
throw new Error("\u6B64\u5BBF\u4E3B\u5DF2\u88AB\u7ED1\u5B9A\u5230\u4E00\u4E2A\u76D1\u542C\u5668\uFF0C\u4E0D\u53EF\u91CD\u590D\u7ED1\u5B9A");
|
|
76
|
+
}
|
|
77
|
+
this.\u89E3\u9664\u56DE\u8C03 = \u56DE\u8C03;
|
|
78
|
+
}
|
|
79
|
+
\u89E3\u7ED1() {
|
|
80
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
81
|
+
this.\u89E3\u9664\u56DE\u8C03();
|
|
82
|
+
this.\u89E3\u9664\u56DE\u8C03 = null;
|
|
83
|
+
}
|
|
71
84
|
}
|
|
72
85
|
};
|
|
73
86
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
@@ -75,11 +88,9 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
75
88
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
76
89
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
77
90
|
if (\u5B9E\u4F8B === void 0) return;
|
|
78
|
-
|
|
79
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
91
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
80
92
|
});
|
|
81
|
-
\u76D1\u542C\u5668\
|
|
82
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
93
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
83
94
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
84
95
|
/**
|
|
85
96
|
* 设置广播错误时的处理器。
|
|
@@ -89,27 +100,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
89
100
|
}
|
|
90
101
|
/**
|
|
91
102
|
* 注册监听器。
|
|
92
|
-
*
|
|
93
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
103
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
94
104
|
*/
|
|
95
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
96
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
97
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
98
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
105
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
99
106
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
109
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
107
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
108
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
109
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
110
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
111
|
+
}
|
|
112
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
113
|
+
});
|
|
114
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
115
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u5BBF\u4E3B, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u5BBF\u4E3B);
|
|
110
116
|
}
|
|
111
117
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
112
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
118
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
113
119
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
114
120
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
115
121
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -124,8 +130,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
124
130
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
125
131
|
\u8FDE\u63A5\u8868 = {};
|
|
126
132
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
127
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
128
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
129
133
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
130
134
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
131
135
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -138,15 +142,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
138
142
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
139
143
|
}
|
|
140
144
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
141
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
142
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
143
|
-
});
|
|
144
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
145
|
-
return \u6301\u6709\u8005;
|
|
146
145
|
}
|
|
147
146
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
148
147
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
149
|
-
if (ws
|
|
148
|
+
if (ws === void 0) return;
|
|
149
|
+
if (ws !== null) {
|
|
150
150
|
ws.onmessage = null;
|
|
151
151
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
152
152
|
ws.once(
|
|
@@ -164,11 +164,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
164
164
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
165
165
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
166
166
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
167
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
168
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
169
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
170
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
171
|
-
}
|
|
172
167
|
}
|
|
173
168
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
174
169
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -190,10 +185,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
190
185
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
191
186
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
192
187
|
}
|
|
193
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
188
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
194
189
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
195
|
-
if (\u6A21\u578B === void 0) return
|
|
196
|
-
|
|
190
|
+
if (\u6A21\u578B === void 0) return;
|
|
191
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
197
192
|
}
|
|
198
193
|
};
|
|
199
194
|
|
|
@@ -647,8 +642,8 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
647
642
|
ws\u64CD\u4F5C: import_zod8.z.object({
|
|
648
643
|
\u53D1\u9001ws\u4FE1\u606F: import_zod8.z.function(import_zod8.z.tuple([\u540E\u63A8\u524D\u4FE1\u606F\u63CF\u8FF0]), import_zod8.z.promise(import_zod8.z.void())),
|
|
649
644
|
\u76D1\u542Cws\u4FE1\u606F: import_zod8.z.function(
|
|
650
|
-
import_zod8.z.tuple([import_zod8.z.function(import_zod8.z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), import_zod8.z.promise(import_zod8.z.void()))]),
|
|
651
|
-
import_zod8.z.promise(import_zod8.z.
|
|
645
|
+
import_zod8.z.tuple([import_zod8.z.function(import_zod8.z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), import_zod8.z.promise(import_zod8.z.void())), import_zod8.z.instanceof(\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B)]),
|
|
646
|
+
import_zod8.z.promise(import_zod8.z.void())
|
|
652
647
|
),
|
|
653
648
|
\u5173\u95EDws\u8FDE\u63A5: import_zod8.z.function(import_zod8.z.tuple([]), import_zod8.z.promise(import_zod8.z.void())),
|
|
654
649
|
\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570: import_zod8.z.function(import_zod8.z.tuple([import_zod8.z.function(import_zod8.z.tuple([]), import_zod8.z.promise(import_zod8.z.void()))]), import_zod8.z.promise(import_zod8.z.void()))
|
|
@@ -697,16 +692,16 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
697
692
|
await log.debug("\u8BBE\u7F6E WebSocket \u6E05\u7406\u51FD\u6570", { wsId });
|
|
698
693
|
await WebSocket\u7BA1\u7406\u56682.\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(wsId, \u6E05\u7406\u51FD\u6570);
|
|
699
694
|
},
|
|
700
|
-
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570) {
|
|
695
|
+
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
701
696
|
if (ws\u53E5\u67C4 === null) {
|
|
702
697
|
ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u56682.\u83B7\u5F97ws\u53E5\u67C4(wsId);
|
|
703
698
|
}
|
|
704
699
|
if (ws\u53E5\u67C4 === null) {
|
|
705
700
|
await log.error("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
|
|
706
|
-
return
|
|
701
|
+
return;
|
|
707
702
|
}
|
|
708
703
|
await log.debug("\u6CE8\u518C WebSocket \u6D88\u606F\u76D1\u542C", { wsId });
|
|
709
|
-
|
|
704
|
+
WebSocket\u7BA1\u7406\u56682.\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(wsId, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
710
705
|
}
|
|
711
706
|
}
|
|
712
707
|
});
|
|
@@ -1121,6 +1116,8 @@ var EXPORT_TYPE = /* @__PURE__ */ Symbol();
|
|
|
1121
1116
|
\u865A\u62DF\u6587\u4EF6\u8FD4\u56DE\u5668,
|
|
1122
1117
|
\u8C03\u8BD5\u8BF7\u6C42\u5934\u63D2\u4EF6,
|
|
1123
1118
|
\u8DEF\u5F84\u89E3\u6790\u63D2\u4EF6,
|
|
1119
|
+
\u96C6\u7EBF\u5668\u6A21\u578B,
|
|
1120
|
+
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B,
|
|
1124
1121
|
\u9759\u6001\u6587\u4EF6\u8FD4\u56DE\u5668,
|
|
1125
1122
|
\u9ED8\u8BA4\u8BF7\u6C42\u9644\u52A0\u53C2\u6570
|
|
1126
1123
|
});
|
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { 严格递归合并对象, 普通对象深合并, 构造元组, 构造对象, 默认请求附加参数 } from './help/help.cjs';
|
|
2
|
+
export { 广播错误处理, 集线器模型, 集线器监听器, 集线器监听器宿主 } from './global/model/hub.cjs';
|
|
2
3
|
export { 任意接口, 接口, 接口方法类型, 接口路径类型, 获得接口方法类型, 获得接口路径类型, 获得接口返回器类型, 获得接口逻辑类型 } from './interface/interface-base.cjs';
|
|
3
4
|
export { 任意接口逻辑, 接口逻辑, 接口逻辑Base, 接口逻辑正确类型, 接口逻辑错误类型, 接口逻辑附加参数类型, 清理函数类型, 获得接口逻辑上游接口类型, 获得接口逻辑插件类型, 获得接口逻辑最后接口类型, 获得接口逻辑正确类型, 获得接口逻辑错误类型, 获得接口逻辑附加参数类型, 计算接口逻辑参数, 计算接口逻辑正确结果, 计算接口逻辑错误结果 } from './interface/interface-logic.cjs';
|
|
4
5
|
export { 任意插件, 取插件正确ts类型, 取插件错误ts类型, 合并插件正确结果, 插件 } from './interface/interface-plugin.cjs';
|
|
@@ -27,7 +28,6 @@ import 'express';
|
|
|
27
28
|
import './help/interior.cjs';
|
|
28
29
|
import 'zod';
|
|
29
30
|
import 'multer';
|
|
30
|
-
import './global/model/hub.cjs';
|
|
31
31
|
import 'node:stream';
|
|
32
32
|
import 'node:http';
|
|
33
33
|
import '@lsby/ts-log';
|
|
@@ -31,21 +31,14 @@ var import_ts_log = require("@lsby/ts-log");
|
|
|
31
31
|
var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
|
|
32
32
|
|
|
33
33
|
// src/global/model/hub.ts
|
|
34
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
|
|
35
|
-
constructor(\u76D1\u542C\u5668) {
|
|
36
|
-
this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
34
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
40
35
|
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
41
36
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
42
37
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
43
38
|
if (\u5B9E\u4F8B === void 0) return;
|
|
44
|
-
|
|
45
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
39
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
46
40
|
});
|
|
47
|
-
\u76D1\u542C\u5668\
|
|
48
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
41
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
49
42
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
50
43
|
/**
|
|
51
44
|
* 设置广播错误时的处理器。
|
|
@@ -55,27 +48,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
55
48
|
}
|
|
56
49
|
/**
|
|
57
50
|
* 注册监听器。
|
|
58
|
-
*
|
|
59
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
51
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
60
52
|
*/
|
|
61
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
62
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
63
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
64
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
53
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
65
54
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
75
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
55
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
56
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
57
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
58
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
59
|
+
}
|
|
60
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
61
|
+
});
|
|
62
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
63
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u5BBF\u4E3B, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u5BBF\u4E3B);
|
|
76
64
|
}
|
|
77
65
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
78
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
66
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
79
67
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
80
68
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
81
69
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -90,8 +78,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
90
78
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
91
79
|
\u8FDE\u63A5\u8868 = {};
|
|
92
80
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
93
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
94
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
95
81
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
96
82
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
97
83
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -104,15 +90,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
104
90
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
105
91
|
}
|
|
106
92
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
107
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
108
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
109
|
-
});
|
|
110
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
111
|
-
return \u6301\u6709\u8005;
|
|
112
93
|
}
|
|
113
94
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
114
95
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
115
|
-
if (ws
|
|
96
|
+
if (ws === void 0) return;
|
|
97
|
+
if (ws !== null) {
|
|
116
98
|
ws.onmessage = null;
|
|
117
99
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
118
100
|
ws.once(
|
|
@@ -130,11 +112,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
130
112
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
131
113
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
132
114
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
133
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
134
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
135
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
136
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
137
|
-
}
|
|
138
115
|
}
|
|
139
116
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
140
117
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -156,10 +133,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
156
133
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
157
134
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
158
135
|
}
|
|
159
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
136
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
160
137
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
161
|
-
if (\u6A21\u578B === void 0) return
|
|
162
|
-
|
|
138
|
+
if (\u6A21\u578B === void 0) return;
|
|
139
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
163
140
|
}
|
|
164
141
|
};
|
|
165
142
|
|
|
@@ -28,9 +28,20 @@ var import_ws = require("ws");
|
|
|
28
28
|
var import_zod = require("zod");
|
|
29
29
|
|
|
30
30
|
// src/global/model/hub.ts
|
|
31
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B = class {
|
|
32
|
+
\u89E3\u9664\u56DE\u8C03 = null;
|
|
33
|
+
/** @internal */
|
|
34
|
+
\u7ED1\u5B9A\u56DE\u8C03(\u56DE\u8C03) {
|
|
35
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
36
|
+
throw new Error("\u6B64\u5BBF\u4E3B\u5DF2\u88AB\u7ED1\u5B9A\u5230\u4E00\u4E2A\u76D1\u542C\u5668\uFF0C\u4E0D\u53EF\u91CD\u590D\u7ED1\u5B9A");
|
|
37
|
+
}
|
|
38
|
+
this.\u89E3\u9664\u56DE\u8C03 = \u56DE\u8C03;
|
|
39
|
+
}
|
|
40
|
+
\u89E3\u7ED1() {
|
|
41
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
42
|
+
this.\u89E3\u9664\u56DE\u8C03();
|
|
43
|
+
this.\u89E3\u9664\u56DE\u8C03 = null;
|
|
44
|
+
}
|
|
34
45
|
}
|
|
35
46
|
};
|
|
36
47
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
@@ -38,11 +49,9 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
38
49
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
39
50
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
40
51
|
if (\u5B9E\u4F8B === void 0) return;
|
|
41
|
-
|
|
42
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
52
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
43
53
|
});
|
|
44
|
-
\u76D1\u542C\u5668\
|
|
45
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
54
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
46
55
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
47
56
|
/**
|
|
48
57
|
* 设置广播错误时的处理器。
|
|
@@ -52,27 +61,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
52
61
|
}
|
|
53
62
|
/**
|
|
54
63
|
* 注册监听器。
|
|
55
|
-
*
|
|
56
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
64
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
57
65
|
*/
|
|
58
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
59
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
60
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
61
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
66
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
62
67
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
72
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
68
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
69
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
70
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
71
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
72
|
+
}
|
|
73
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
74
|
+
});
|
|
75
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
76
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u5BBF\u4E3B, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u5BBF\u4E3B);
|
|
73
77
|
}
|
|
74
78
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
75
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
79
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
76
80
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
77
81
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
78
82
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -110,8 +114,8 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
110
114
|
ws\u64CD\u4F5C: import_zod.z.object({
|
|
111
115
|
\u53D1\u9001ws\u4FE1\u606F: import_zod.z.function(import_zod.z.tuple([\u540E\u63A8\u524D\u4FE1\u606F\u63CF\u8FF0]), import_zod.z.promise(import_zod.z.void())),
|
|
112
116
|
\u76D1\u542Cws\u4FE1\u606F: import_zod.z.function(
|
|
113
|
-
import_zod.z.tuple([import_zod.z.function(import_zod.z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), import_zod.z.promise(import_zod.z.void()))]),
|
|
114
|
-
import_zod.z.promise(import_zod.z.
|
|
117
|
+
import_zod.z.tuple([import_zod.z.function(import_zod.z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), import_zod.z.promise(import_zod.z.void())), import_zod.z.instanceof(\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B)]),
|
|
118
|
+
import_zod.z.promise(import_zod.z.void())
|
|
115
119
|
),
|
|
116
120
|
\u5173\u95EDws\u8FDE\u63A5: import_zod.z.function(import_zod.z.tuple([]), import_zod.z.promise(import_zod.z.void())),
|
|
117
121
|
\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570: import_zod.z.function(import_zod.z.tuple([import_zod.z.function(import_zod.z.tuple([]), import_zod.z.promise(import_zod.z.void()))]), import_zod.z.promise(import_zod.z.void()))
|
|
@@ -160,16 +164,16 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
160
164
|
await log.debug("\u8BBE\u7F6E WebSocket \u6E05\u7406\u51FD\u6570", { wsId });
|
|
161
165
|
await WebSocket\u7BA1\u7406\u5668.\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(wsId, \u6E05\u7406\u51FD\u6570);
|
|
162
166
|
},
|
|
163
|
-
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570) {
|
|
167
|
+
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
164
168
|
if (ws\u53E5\u67C4 === null) {
|
|
165
169
|
ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u5668.\u83B7\u5F97ws\u53E5\u67C4(wsId);
|
|
166
170
|
}
|
|
167
171
|
if (ws\u53E5\u67C4 === null) {
|
|
168
172
|
await log.error("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
|
|
169
|
-
return
|
|
173
|
+
return;
|
|
170
174
|
}
|
|
171
175
|
await log.debug("\u6CE8\u518C WebSocket \u6D88\u606F\u76D1\u542C", { wsId });
|
|
172
|
-
|
|
176
|
+
WebSocket\u7BA1\u7406\u5668.\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(wsId, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
179
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { 集线器监听器宿主 as ________ } from '../global/model/hub.cjs';
|
|
3
3
|
import { 插件 as __, 任意插件 as ____ } from '../interface/interface-plugin.cjs';
|
|
4
4
|
import '@lsby/ts-fp-data';
|
|
5
5
|
import 'express';
|
|
@@ -13,7 +13,10 @@ declare class WebSocket插件<后推前信息 extends z.AnyZodObject | z.ZodNeve
|
|
|
13
13
|
ws操作: z.ZodUnion<[
|
|
14
14
|
z.ZodObject<{
|
|
15
15
|
发送ws信息: z.ZodFunction<z.ZodTuple<[后推前信息], null>, z.ZodPromise<z.ZodVoid>>;
|
|
16
|
-
监听ws信息: z.ZodFunction<z.ZodTuple<[
|
|
16
|
+
监听ws信息: z.ZodFunction<z.ZodTuple<[
|
|
17
|
+
z.ZodFunction<z.ZodTuple<[前推后信息], null>, z.ZodPromise<z.ZodVoid>>,
|
|
18
|
+
z.ZodType<________>
|
|
19
|
+
], null>, z.ZodPromise<z.ZodVoid>>;
|
|
17
20
|
关闭ws连接: z.ZodFunction<z.ZodTuple<[], null>, z.ZodPromise<z.ZodVoid>>;
|
|
18
21
|
设置清理函数: z.ZodFunction<z.ZodTuple<[z.ZodFunction<z.ZodTuple<[], null>, z.ZodPromise<z.ZodVoid>>], null>, z.ZodPromise<z.ZodVoid>>;
|
|
19
22
|
}>,
|
|
@@ -43,21 +43,14 @@ var import_ts_log = require("@lsby/ts-log");
|
|
|
43
43
|
var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
|
|
44
44
|
|
|
45
45
|
// src/global/model/hub.ts
|
|
46
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
|
|
47
|
-
constructor(\u76D1\u542C\u5668) {
|
|
48
|
-
this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
46
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
52
47
|
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
53
48
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
54
49
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
55
50
|
if (\u5B9E\u4F8B === void 0) return;
|
|
56
|
-
|
|
57
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
51
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
58
52
|
});
|
|
59
|
-
\u76D1\u542C\u5668\
|
|
60
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
53
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
61
54
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
62
55
|
/**
|
|
63
56
|
* 设置广播错误时的处理器。
|
|
@@ -67,27 +60,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
67
60
|
}
|
|
68
61
|
/**
|
|
69
62
|
* 注册监听器。
|
|
70
|
-
*
|
|
71
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
63
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
72
64
|
*/
|
|
73
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
74
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
75
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
76
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
65
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
77
66
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
87
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
67
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
68
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
69
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
70
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
71
|
+
}
|
|
72
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
73
|
+
});
|
|
74
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
75
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u5BBF\u4E3B, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u5BBF\u4E3B);
|
|
88
76
|
}
|
|
89
77
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
90
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
78
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
91
79
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
92
80
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
93
81
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -102,8 +90,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
102
90
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
103
91
|
\u8FDE\u63A5\u8868 = {};
|
|
104
92
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
105
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
106
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
107
93
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
108
94
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
109
95
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -116,15 +102,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
116
102
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
117
103
|
}
|
|
118
104
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
119
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
120
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
121
|
-
});
|
|
122
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
123
|
-
return \u6301\u6709\u8005;
|
|
124
105
|
}
|
|
125
106
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
126
107
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
127
|
-
if (ws
|
|
108
|
+
if (ws === void 0) return;
|
|
109
|
+
if (ws !== null) {
|
|
128
110
|
ws.onmessage = null;
|
|
129
111
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
130
112
|
ws.once(
|
|
@@ -142,11 +124,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
142
124
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
143
125
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
144
126
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
145
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
146
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
147
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
148
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
149
|
-
}
|
|
150
127
|
}
|
|
151
128
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
152
129
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -168,10 +145,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
168
145
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
169
146
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
170
147
|
}
|
|
171
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
148
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
172
149
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
173
|
-
if (\u6A21\u578B === void 0) return
|
|
174
|
-
|
|
150
|
+
if (\u6A21\u578B === void 0) return;
|
|
151
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
175
152
|
}
|
|
176
153
|
};
|
|
177
154
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
集线器监听器宿主
|
|
3
|
+
} from "./chunk-YRLVAFRQ.js";
|
|
4
4
|
import {
|
|
5
5
|
插件
|
|
6
6
|
} from "./chunk-EGIJQJFI.js";
|
|
@@ -18,8 +18,8 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
18
18
|
ws\u64CD\u4F5C: z.object({
|
|
19
19
|
\u53D1\u9001ws\u4FE1\u606F: z.function(z.tuple([\u540E\u63A8\u524D\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void())),
|
|
20
20
|
\u76D1\u542Cws\u4FE1\u606F: z.function(
|
|
21
|
-
z.tuple([z.function(z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void()))]),
|
|
22
|
-
z.promise(z.
|
|
21
|
+
z.tuple([z.function(z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void())), z.instanceof(\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B)]),
|
|
22
|
+
z.promise(z.void())
|
|
23
23
|
),
|
|
24
24
|
\u5173\u95EDws\u8FDE\u63A5: z.function(z.tuple([]), z.promise(z.void())),
|
|
25
25
|
\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570: z.function(z.tuple([z.function(z.tuple([]), z.promise(z.void()))]), z.promise(z.void()))
|
|
@@ -68,16 +68,16 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
68
68
|
await log.debug("\u8BBE\u7F6E WebSocket \u6E05\u7406\u51FD\u6570", { wsId });
|
|
69
69
|
await WebSocket\u7BA1\u7406\u5668.\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(wsId, \u6E05\u7406\u51FD\u6570);
|
|
70
70
|
},
|
|
71
|
-
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570) {
|
|
71
|
+
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
72
72
|
if (ws\u53E5\u67C4 === null) {
|
|
73
73
|
ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u5668.\u83B7\u5F97ws\u53E5\u67C4(wsId);
|
|
74
74
|
}
|
|
75
75
|
if (ws\u53E5\u67C4 === null) {
|
|
76
76
|
await log.error("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
|
|
77
|
-
return
|
|
77
|
+
return;
|
|
78
78
|
}
|
|
79
79
|
await log.debug("\u6CE8\u518C WebSocket \u6D88\u606F\u76D1\u542C", { wsId });
|
|
80
|
-
|
|
80
|
+
WebSocket\u7BA1\u7406\u5668.\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(wsId, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
});
|