@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
|
@@ -21,12 +21,23 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var hub_exports = {};
|
|
22
22
|
__export(hub_exports, {
|
|
23
23
|
\u96C6\u7EBF\u5668\u6A21\u578B: () => \u96C6\u7EBF\u5668\u6A21\u578B,
|
|
24
|
-
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\
|
|
24
|
+
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B: () => \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(hub_exports);
|
|
27
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B = class {
|
|
28
|
+
\u89E3\u9664\u56DE\u8C03 = null;
|
|
29
|
+
/** @internal */
|
|
30
|
+
\u7ED1\u5B9A\u56DE\u8C03(\u56DE\u8C03) {
|
|
31
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
32
|
+
throw new Error("\u6B64\u5BBF\u4E3B\u5DF2\u88AB\u7ED1\u5B9A\u5230\u4E00\u4E2A\u76D1\u542C\u5668\uFF0C\u4E0D\u53EF\u91CD\u590D\u7ED1\u5B9A");
|
|
33
|
+
}
|
|
34
|
+
this.\u89E3\u9664\u56DE\u8C03 = \u56DE\u8C03;
|
|
35
|
+
}
|
|
36
|
+
\u89E3\u7ED1() {
|
|
37
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
38
|
+
this.\u89E3\u9664\u56DE\u8C03();
|
|
39
|
+
this.\u89E3\u9664\u56DE\u8C03 = null;
|
|
40
|
+
}
|
|
30
41
|
}
|
|
31
42
|
};
|
|
32
43
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
@@ -34,11 +45,9 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
34
45
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
35
46
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
36
47
|
if (\u5B9E\u4F8B === void 0) return;
|
|
37
|
-
|
|
38
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
48
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
39
49
|
});
|
|
40
|
-
\u76D1\u542C\u5668\
|
|
41
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
50
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
42
51
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
43
52
|
/**
|
|
44
53
|
* 设置广播错误时的处理器。
|
|
@@ -48,27 +57,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
48
57
|
}
|
|
49
58
|
/**
|
|
50
59
|
* 注册监听器。
|
|
51
|
-
*
|
|
52
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
60
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
53
61
|
*/
|
|
54
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
55
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
56
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
57
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
62
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
58
63
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
68
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
64
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
65
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
66
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
67
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
68
|
+
}
|
|
69
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
70
|
+
});
|
|
71
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
72
|
+
_\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);
|
|
69
73
|
}
|
|
70
74
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
71
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
75
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
72
76
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
73
77
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
74
78
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -80,5 +84,5 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
80
84
|
// Annotate the CommonJS export names for ESM import in node:
|
|
81
85
|
0 && (module.exports = {
|
|
82
86
|
\u96C6\u7EBF\u5668\u6A21\u578B,
|
|
83
|
-
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\
|
|
87
|
+
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B
|
|
84
88
|
});
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
type 集线器监听器<T> = (数据: T) => Promise<void>;
|
|
2
2
|
type 广播错误处理<T> = (数据: T, 索引: number, 错误: unknown) => Promise<void> | void;
|
|
3
|
-
declare class
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare class 集线器监听器宿主 {
|
|
4
|
+
private 解除回调;
|
|
5
|
+
/** @internal */
|
|
6
|
+
绑定回调(回调: () => void): void;
|
|
7
|
+
解绑(): void;
|
|
6
8
|
}
|
|
7
9
|
declare class 集线器模型<T> {
|
|
8
10
|
private static 清理注册器;
|
|
9
|
-
private
|
|
10
|
-
private 持有者映射;
|
|
11
|
+
private 监听器集合;
|
|
11
12
|
private 错误处理器;
|
|
12
13
|
/**
|
|
13
14
|
* 设置广播错误时的处理器。
|
|
@@ -15,12 +16,10 @@ declare class 集线器模型<T> {
|
|
|
15
16
|
设置错误处理器(处理器: 广播错误处理<T>): void;
|
|
16
17
|
/**
|
|
17
18
|
* 注册监听器。
|
|
18
|
-
*
|
|
19
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
19
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
20
20
|
*/
|
|
21
|
-
添加监听器(监听器: 集线器监听器<T
|
|
22
|
-
移除监听器(持有者: 集线器监听器持有者<T>): void;
|
|
21
|
+
添加监听器(监听器: 集线器监听器<T>, 宿主: 集线器监听器宿主): void;
|
|
23
22
|
广播(数据: T): Promise<void>;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
export { type 广播错误处理, 集线器模型, type 集线器监听器,
|
|
25
|
+
export { type 广播错误处理, 集线器模型, type 集线器监听器, 集线器监听器宿主 };
|
|
@@ -29,21 +29,14 @@ var import_ts_log = require("@lsby/ts-log");
|
|
|
29
29
|
var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
|
|
30
30
|
|
|
31
31
|
// src/global/model/hub.ts
|
|
32
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
|
|
33
|
-
constructor(\u76D1\u542C\u5668) {
|
|
34
|
-
this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
32
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
38
33
|
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
39
34
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
40
35
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
41
36
|
if (\u5B9E\u4F8B === void 0) return;
|
|
42
|
-
|
|
43
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
37
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
44
38
|
});
|
|
45
|
-
\u76D1\u542C\u5668\
|
|
46
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
39
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
47
40
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
48
41
|
/**
|
|
49
42
|
* 设置广播错误时的处理器。
|
|
@@ -53,27 +46,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
53
46
|
}
|
|
54
47
|
/**
|
|
55
48
|
* 注册监听器。
|
|
56
|
-
*
|
|
57
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
49
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
58
50
|
*/
|
|
59
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
60
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
61
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
62
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
51
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
63
52
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
73
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
53
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
54
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
55
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
56
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
57
|
+
}
|
|
58
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
59
|
+
});
|
|
60
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
61
|
+
_\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);
|
|
74
62
|
}
|
|
75
63
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
76
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
64
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
77
65
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
78
66
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
79
67
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -88,8 +76,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
88
76
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
89
77
|
\u8FDE\u63A5\u8868 = {};
|
|
90
78
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
91
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
92
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
93
79
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
94
80
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
95
81
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -102,15 +88,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
102
88
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
103
89
|
}
|
|
104
90
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
105
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
106
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
107
|
-
});
|
|
108
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
109
|
-
return \u6301\u6709\u8005;
|
|
110
91
|
}
|
|
111
92
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
112
93
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
113
|
-
if (ws
|
|
94
|
+
if (ws === void 0) return;
|
|
95
|
+
if (ws !== null) {
|
|
114
96
|
ws.onmessage = null;
|
|
115
97
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
116
98
|
ws.once(
|
|
@@ -128,11 +110,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
128
110
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
129
111
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
130
112
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
131
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
132
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
133
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
134
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
135
|
-
}
|
|
136
113
|
}
|
|
137
114
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
138
115
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -154,10 +131,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
154
131
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
155
132
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
156
133
|
}
|
|
157
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
134
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
158
135
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
159
|
-
if (\u6A21\u578B === void 0) return
|
|
160
|
-
|
|
136
|
+
if (\u6A21\u578B === void 0) return;
|
|
137
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
161
138
|
}
|
|
162
139
|
};
|
|
163
140
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import { WebSocket } from 'ws';
|
|
2
|
-
import {
|
|
2
|
+
import { 集线器监听器宿主 as ________ } from './hub.cjs';
|
|
3
3
|
|
|
4
4
|
type id = string;
|
|
5
5
|
declare class WebSocket管理器 {
|
|
6
6
|
private log;
|
|
7
7
|
private 连接表;
|
|
8
8
|
private 消息监听表;
|
|
9
|
-
private 连接清理模型;
|
|
10
|
-
private 连接持有者表;
|
|
11
9
|
private 清理函数表;
|
|
12
|
-
增加连接(id: id, ws句柄: WebSocket):
|
|
10
|
+
增加连接(id: id, ws句柄: WebSocket): void;
|
|
13
11
|
删除连接(id: string): void;
|
|
14
12
|
private 注册onmessage;
|
|
15
13
|
查询连接存在(id: string): boolean;
|
|
16
14
|
获得ws句柄(id: id): Promise<WebSocket | null>;
|
|
17
15
|
设置清理函数(id: string, 清理函数: () => Promise<void>): Promise<void>;
|
|
18
|
-
设置消息监听(id: string, 回调函数: (数据: any) => Promise<void
|
|
16
|
+
设置消息监听(id: string, 回调函数: (数据: any) => Promise<void>, 宿主: ________): void;
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
export { WebSocket管理器 };
|
|
@@ -29,21 +29,14 @@ var import_ts_log = require("@lsby/ts-log");
|
|
|
29
29
|
var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
|
|
30
30
|
|
|
31
31
|
// src/global/model/hub.ts
|
|
32
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
|
|
33
|
-
constructor(\u76D1\u542C\u5668) {
|
|
34
|
-
this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
32
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
38
33
|
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
39
34
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
40
35
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
41
36
|
if (\u5B9E\u4F8B === void 0) return;
|
|
42
|
-
|
|
43
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
37
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
44
38
|
});
|
|
45
|
-
\u76D1\u542C\u5668\
|
|
46
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
39
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
47
40
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
48
41
|
/**
|
|
49
42
|
* 设置广播错误时的处理器。
|
|
@@ -53,27 +46,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
53
46
|
}
|
|
54
47
|
/**
|
|
55
48
|
* 注册监听器。
|
|
56
|
-
*
|
|
57
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
49
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
58
50
|
*/
|
|
59
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
60
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
61
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
62
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
51
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
63
52
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
73
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
53
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
54
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
55
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
56
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
57
|
+
}
|
|
58
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
59
|
+
});
|
|
60
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
61
|
+
_\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);
|
|
74
62
|
}
|
|
75
63
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
76
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
64
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
77
65
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
78
66
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
79
67
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -88,8 +76,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
88
76
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
89
77
|
\u8FDE\u63A5\u8868 = {};
|
|
90
78
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
91
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
92
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
93
79
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
94
80
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
95
81
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -102,15 +88,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
102
88
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
103
89
|
}
|
|
104
90
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
105
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
106
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
107
|
-
});
|
|
108
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
109
|
-
return \u6301\u6709\u8005;
|
|
110
91
|
}
|
|
111
92
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
112
93
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
113
|
-
if (ws
|
|
94
|
+
if (ws === void 0) return;
|
|
95
|
+
if (ws !== null) {
|
|
114
96
|
ws.onmessage = null;
|
|
115
97
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
116
98
|
ws.once(
|
|
@@ -128,11 +110,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
128
110
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
129
111
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
130
112
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
131
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
132
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
133
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
134
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
135
|
-
}
|
|
136
113
|
}
|
|
137
114
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
138
115
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -154,10 +131,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
154
131
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
155
132
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
156
133
|
}
|
|
157
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
134
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
158
135
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
159
|
-
if (\u6A21\u578B === void 0) return
|
|
160
|
-
|
|
136
|
+
if (\u6A21\u578B === void 0) return;
|
|
137
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
161
138
|
}
|
|
162
139
|
};
|
|
163
140
|
|
package/dist/cjs/help/help.cjs
CHANGED
|
@@ -32,21 +32,14 @@ var import_ts_log = require("@lsby/ts-log");
|
|
|
32
32
|
var \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B = new import_ts_log.Log("@lsby:net-core");
|
|
33
33
|
|
|
34
34
|
// src/global/model/hub.ts
|
|
35
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
|
|
36
|
-
constructor(\u76D1\u542C\u5668) {
|
|
37
|
-
this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
35
|
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
41
36
|
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
42
37
|
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
43
38
|
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
44
39
|
if (\u5B9E\u4F8B === void 0) return;
|
|
45
|
-
|
|
46
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
40
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
47
41
|
});
|
|
48
|
-
\u76D1\u542C\u5668\
|
|
49
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
42
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
50
43
|
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
51
44
|
/**
|
|
52
45
|
* 设置广播错误时的处理器。
|
|
@@ -56,27 +49,22 @@ var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
|
56
49
|
}
|
|
57
50
|
/**
|
|
58
51
|
* 注册监听器。
|
|
59
|
-
*
|
|
60
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
52
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
61
53
|
*/
|
|
62
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
63
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
64
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
65
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
54
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
66
55
|
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.
|
|
76
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
56
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
57
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
58
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
59
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
60
|
+
}
|
|
61
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
62
|
+
});
|
|
63
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
64
|
+
_\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);
|
|
77
65
|
}
|
|
78
66
|
async \u5E7F\u64AD(\u6570\u636E) {
|
|
79
|
-
let snapshot = [...this.\u76D1\u542C\u5668\
|
|
67
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
80
68
|
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
81
69
|
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
82
70
|
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
@@ -91,8 +79,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
91
79
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
92
80
|
\u8FDE\u63A5\u8868 = {};
|
|
93
81
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
94
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
95
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
96
82
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
97
83
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
98
84
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -105,15 +91,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
105
91
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
106
92
|
}
|
|
107
93
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
108
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
109
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
110
|
-
});
|
|
111
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
112
|
-
return \u6301\u6709\u8005;
|
|
113
94
|
}
|
|
114
95
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
115
96
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
116
|
-
if (ws
|
|
97
|
+
if (ws === void 0) return;
|
|
98
|
+
if (ws !== null) {
|
|
117
99
|
ws.onmessage = null;
|
|
118
100
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
119
101
|
ws.once(
|
|
@@ -131,11 +113,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
131
113
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
132
114
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
133
115
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
134
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
135
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
136
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
137
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
138
|
-
}
|
|
139
116
|
}
|
|
140
117
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
141
118
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -157,10 +134,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
157
134
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
158
135
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
159
136
|
}
|
|
160
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
137
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
161
138
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
162
|
-
if (\u6A21\u578B === void 0) return
|
|
163
|
-
|
|
139
|
+
if (\u6A21\u578B === void 0) return;
|
|
140
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
164
141
|
}
|
|
165
142
|
};
|
|
166
143
|
|