@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.
Files changed (33) hide show
  1. package/dist/cjs/global/model/hub.cjs +30 -26
  2. package/dist/cjs/global/model/hub.d.cts +9 -10
  3. package/dist/cjs/global/model/web-socket.cjs +19 -42
  4. package/dist/cjs/global/model/web-socket.d.cts +3 -5
  5. package/dist/cjs/global/web-socket.cjs +19 -42
  6. package/dist/cjs/help/help.cjs +19 -42
  7. package/dist/cjs/index.cjs +42 -45
  8. package/dist/cjs/index.d.cts +1 -1
  9. package/dist/cjs/interface/interface-logic.cjs +19 -42
  10. package/dist/cjs/plugin/web-socket.cjs +33 -29
  11. package/dist/cjs/plugin/web-socket.d.cts +5 -2
  12. package/dist/cjs/server/server.cjs +19 -42
  13. package/dist/esm/{chunk-MVMDWJTB.js → chunk-2IOILFRG.js} +1 -1
  14. package/dist/esm/{chunk-7GT72IUT.js → chunk-CPJIGVXF.js} +7 -7
  15. package/dist/esm/{chunk-P23ZAK4I.js → chunk-NRXEIWM6.js} +1 -1
  16. package/dist/esm/{chunk-AB35ZHL3.js → chunk-SMLWKWSD.js} +1 -1
  17. package/dist/esm/{chunk-TE6CG2FF.js → chunk-XPACPTVL.js} +1 -1
  18. package/dist/esm/chunk-YRLVAFRQ.js +63 -0
  19. package/dist/esm/{chunk-MRTIZDKN.js → chunk-ZFLDOR4T.js} +6 -17
  20. package/dist/esm/global/model/hub.d.ts +9 -10
  21. package/dist/esm/global/model/hub.js +3 -3
  22. package/dist/esm/global/model/web-socket.d.ts +3 -5
  23. package/dist/esm/global/model/web-socket.js +2 -2
  24. package/dist/esm/global/web-socket.js +3 -3
  25. package/dist/esm/help/help.js +4 -4
  26. package/dist/esm/index.d.ts +1 -1
  27. package/dist/esm/index.js +17 -12
  28. package/dist/esm/interface/interface-logic.js +5 -5
  29. package/dist/esm/plugin/web-socket.d.ts +5 -2
  30. package/dist/esm/plugin/web-socket.js +2 -2
  31. package/dist/esm/server/server.js +4 -4
  32. package/package.json +1 -1
  33. 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\u6301\u6709\u8005: () => \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005
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\u6301\u6709\u8005 = class {
28
- constructor(\u76D1\u542C\u5668) {
29
- this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
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
- let \u7D22\u5F15 = \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
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\u5217\u8868 = [];
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
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u6301\u6709\u8005, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u6301\u6709\u8005);
60
- return \u6301\u6709\u8005;
61
- }
62
- \u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005) {
63
- let \u76D1\u542C\u5668 = this.\u6301\u6709\u8005\u6620\u5C04.get(\u6301\u6709\u8005);
64
- if (\u76D1\u542C\u5668 === void 0) return;
65
- let \u7D22\u5F15 = this.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
66
- if (\u7D22\u5F15 !== -1) this.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
67
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u6301\u6709\u8005);
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\u5217\u8868];
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\u6301\u6709\u8005
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 集线器监听器持有者<T> {
4
- readonly 监听器: 集线器监听器<T>;
5
- constructor(监听器: 集线器监听器<T>);
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>): 集线器监听器持有者<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
- let \u7D22\u5F15 = \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
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\u5217\u8868 = [];
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
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u6301\u6709\u8005, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u6301\u6709\u8005);
65
- return \u6301\u6709\u8005;
66
- }
67
- \u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005) {
68
- let \u76D1\u542C\u5668 = this.\u6301\u6709\u8005\u6620\u5C04.get(\u6301\u6709\u8005);
69
- if (\u76D1\u542C\u5668 === void 0) return;
70
- let \u7D22\u5F15 = this.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
71
- if (\u7D22\u5F15 !== -1) this.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
72
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u6301\u6709\u8005);
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\u5217\u8868];
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 !== null && ws !== void 0) {
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 null;
160
- return \u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570);
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 { 集线器监听器持有者 as _________ } from './hub.cjs';
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): _________<void>;
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>): _________<unknown> | null;
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
- let \u7D22\u5F15 = \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
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\u5217\u8868 = [];
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
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u6301\u6709\u8005, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u6301\u6709\u8005);
65
- return \u6301\u6709\u8005;
66
- }
67
- \u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005) {
68
- let \u76D1\u542C\u5668 = this.\u6301\u6709\u8005\u6620\u5C04.get(\u6301\u6709\u8005);
69
- if (\u76D1\u542C\u5668 === void 0) return;
70
- let \u7D22\u5F15 = this.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
71
- if (\u7D22\u5F15 !== -1) this.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
72
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u6301\u6709\u8005);
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\u5217\u8868];
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 !== null && ws !== void 0) {
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 null;
160
- return \u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570);
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
 
@@ -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
- let \u7D22\u5F15 = \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
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\u5217\u8868 = [];
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
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u6301\u6709\u8005, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u6301\u6709\u8005);
68
- return \u6301\u6709\u8005;
69
- }
70
- \u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005) {
71
- let \u76D1\u542C\u5668 = this.\u6301\u6709\u8005\u6620\u5C04.get(\u6301\u6709\u8005);
72
- if (\u76D1\u542C\u5668 === void 0) return;
73
- let \u7D22\u5F15 = this.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
74
- if (\u7D22\u5F15 !== -1) this.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
75
- _\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u6301\u6709\u8005);
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\u5217\u8868];
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 !== null && ws !== void 0) {
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 null;
163
- return \u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570);
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