moonbridge-ts 0.6.2 → 0.6.4

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 (26) hide show
  1. package/dist/moonbridge/logger/logger.d.ts +0 -2
  2. package/dist/moonbridge/logger/logger.d.ts.map +1 -1
  3. package/dist/moonbridge/logger/logger.js +0 -4
  4. package/dist/moonbridge/logger/logger.js.map +1 -1
  5. package/dist/moonbridge/logger/logger.mjs +0 -4
  6. package/dist/moonbridge/logger/logger.mjs.map +1 -1
  7. package/dist/moonbridge-ipc/client/moonbridge_ipc_client.d.ts +7 -1
  8. package/dist/moonbridge-ipc/client/moonbridge_ipc_client.d.ts.map +1 -1
  9. package/dist/moonbridge-ipc/client/moonbridge_ipc_client.js +13 -2
  10. package/dist/moonbridge-ipc/client/moonbridge_ipc_client.js.map +1 -1
  11. package/dist/moonbridge-ipc/client/moonbridge_ipc_client.mjs +13 -2
  12. package/dist/moonbridge-ipc/client/moonbridge_ipc_client.mjs.map +1 -1
  13. package/dist/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.d.ts.map +1 -1
  14. package/dist/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.js +1 -0
  15. package/dist/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.js.map +1 -1
  16. package/dist/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.mjs +1 -0
  17. package/dist/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.mjs.map +1 -1
  18. package/dist/moonbridge-ipc/server/moonbridge_ipc_server.d.ts +5 -1
  19. package/dist/moonbridge-ipc/server/moonbridge_ipc_server.d.ts.map +1 -1
  20. package/dist/moonbridge-ipc/server/moonbridge_ipc_server.js +11 -2
  21. package/dist/moonbridge-ipc/server/moonbridge_ipc_server.js.map +1 -1
  22. package/dist/moonbridge-ipc/server/moonbridge_ipc_server.mjs +11 -2
  23. package/dist/moonbridge-ipc/server/moonbridge_ipc_server.mjs.map +1 -1
  24. package/package.json +1 -1
  25. package/src/moonbridge-ipc/client/moonbridge_ipc_client.ts +2 -2
  26. package/src/moonbridge-ipc/server/moonbridge_ipc_server.ts +2 -2
@@ -15,7 +15,6 @@ export declare class Logger {
15
15
  private static readonly _loggers;
16
16
  private static _subscribers;
17
17
  readonly tag: string;
18
- private _subscriber?;
19
18
  private constructor();
20
19
  /**
21
20
  * 工厂:按 tag 缓存,同 tag 返回同一实例。
@@ -24,7 +23,6 @@ export declare class Logger {
24
23
  static addSubscriber(callback: LogSubscriber): void;
25
24
  static removeSubscriber(callback: LogSubscriber): void;
26
25
  static enumerate(action: (tag: string, logger: Logger) => void): void;
27
- set subscriber(cb: LogSubscriber);
28
26
  private notify;
29
27
  log(level: LogLevel, message: string, opts?: {
30
28
  file?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/moonbridge/logger/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,IAAI,CAAC;AAEV;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAC7D,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAElD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,WAAW,CAAC,CAAgB;IAEpC,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAS/B,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAInD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrE,IAAI,UAAU,CAAC,EAAE,EAAE,aAAa,EAE/B;IAED,OAAO,CAAC,MAAM;IAYd,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMpF,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIpE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIpE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAGtE"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/moonbridge/logger/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KACpC,IAAI,CAAC;AAEV;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAC7D,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAElD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAS/B,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAInD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrE,OAAO,CAAC,MAAM;IAWd,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMpF,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIpE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIpE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAGtE"}
@@ -24,12 +24,8 @@ const _Logger = class _Logger {
24
24
  static enumerate(action) {
25
25
  _Logger._loggers.forEach((logger, tag) => action(tag, logger));
26
26
  }
27
- set subscriber(cb) {
28
- this._subscriber = cb;
29
- }
30
27
  notify(level, message, opts) {
31
28
  const subs = [..._Logger._subscribers];
32
- if (this._subscriber) subs.push(this._subscriber);
33
29
  for (const cb of subs) {
34
30
  try {
35
31
  cb(this.tag, level, message, opts);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/moonbridge/logger/logger.ts"],"names":[],"mappings":"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","file":"logger.js","sourcesContent":["/**\n * Logger 类,对应 Flutter lib/statistics/logger.dart。\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport type LogSubscriber = (\n tag: string,\n level: LogLevel,\n message: string,\n opts?: { file?: string; func?: string }\n) => void;\n\n/**\n * Logger 类\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\nexport class Logger {\n private static readonly _loggers = new Map<string, Logger>();\n private static _subscribers: LogSubscriber[] = [];\n\n readonly tag: string;\n private _subscriber?: LogSubscriber;\n\n private constructor(tag: string) {\n this.tag = tag;\n }\n\n /** \n * 工厂:按 tag 缓存,同 tag 返回同一实例。 \n */\n static get(tag: string): Logger {\n let logger = Logger._loggers.get(tag);\n if (!logger) {\n logger = new Logger(tag);\n Logger._loggers.set(tag, logger);\n }\n return logger;\n }\n\n static addSubscriber(callback: LogSubscriber): void {\n Logger._subscribers.push(callback);\n }\n\n static removeSubscriber(callback: LogSubscriber): void {\n Logger._subscribers = Logger._subscribers.filter((cb) => cb !== callback);\n }\n\n static enumerate(action: (tag: string, logger: Logger) => void): void {\n Logger._loggers.forEach((logger, tag) => action(tag, logger));\n }\n\n set subscriber(cb: LogSubscriber) {\n this._subscriber = cb;\n }\n\n private notify(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n const subs = [...Logger._subscribers];\n if (this._subscriber) subs.push(this._subscriber);\n for (const cb of subs) {\n try {\n cb(this.tag, level, message, opts);\n } catch {\n // 静默处理,不影响 SDK\n }\n }\n }\n\n log(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n this.notify(level, message, opts);\n const levelUpper = level.toUpperCase();\n console.log(`[${this.tag}|${levelUpper}] ${message}`);\n }\n\n debug(message: string, opts?: { file?: string; func?: string }): void {\n this.log('debug', message, opts);\n }\n\n info(message: string, opts?: { file?: string; func?: string }): void {\n this.log('info', message, opts);\n }\n\n warn(message: string, opts?: { file?: string; func?: string }): void {\n this.log('warn', message, opts);\n }\n\n error(message: string, opts?: { file?: string; func?: string }): void {\n this.log('error', message, opts);\n }\n\n fatal(message: string, opts?: { file?: string; func?: string }): void {\n this.log('fatal', message, opts);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/moonbridge/logger/logger.ts"],"names":[],"mappings":";;AAkBO,MAAM,OAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAMV,YAAY,GAAA,EAAa;AAC/B,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,GAAA,EAAqB;AAC9B,IAAA,IAAI,MAAA,GAAS,OAAA,CAAO,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAA,GAAS,IAAI,QAAO,GAAG,CAAA;AACvB,MAAA,OAAA,CAAO,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,OAAO,cAAc,QAAA,EAA+B;AAClD,IAAA,OAAA,CAAO,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,EACnC;AAAA,EAEA,OAAO,iBAAiB,QAAA,EAA+B;AACrD,IAAA,OAAA,CAAO,eAAe,OAAA,CAAO,YAAA,CAAa,OAAO,CAAC,EAAA,KAAO,OAAO,QAAQ,CAAA;AAAA,EAC1E;AAAA,EAEA,OAAO,UAAU,MAAA,EAAqD;AACpE,IAAA,OAAA,CAAO,QAAA,CAAS,QAAQ,CAAC,MAAA,EAAQ,QAAQ,MAAA,CAAO,GAAA,EAAK,MAAM,CAAC,CAAA;AAAA,EAC9D;AAAA,EAEQ,MAAA,CAAO,KAAA,EAAiB,OAAA,EAAiB,IAAA,EAA+C;AAC9F,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,OAAA,CAAO,YAAY,CAAA;AACpC,IAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAAA,MACnC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEA,GAAA,CAAI,KAAA,EAAiB,OAAA,EAAiB,IAAA,EAA+C;AACnF,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,IAAA,CAAK,GAAG,IAAI,UAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACtD;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAA+C;AACpE,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAA+C;AACnE,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAA+C;AACnE,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAA+C;AACpE,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAA+C;AACpE,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AACF,CAAA;AAtEa,OAAA,CACa,QAAA,uBAAe,GAAA,EAAoB;AADhD,OAAA,CAEI,eAAgC,EAAC;AAF3C,IAAM,MAAA,GAAN","file":"logger.js","sourcesContent":["/**\n * Logger 类,对应 Flutter lib/statistics/logger.dart。\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport type LogSubscriber = (\n tag: string,\n level: LogLevel,\n message: string,\n opts?: { file?: string; func?: string }\n) => void;\n\n/**\n * Logger 类\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\nexport class Logger {\n private static readonly _loggers = new Map<string, Logger>();\n private static _subscribers: LogSubscriber[] = [];\n\n readonly tag: string;\n\n private constructor(tag: string) {\n this.tag = tag;\n }\n\n /** \n * 工厂:按 tag 缓存,同 tag 返回同一实例。 \n */\n static get(tag: string): Logger {\n let logger = Logger._loggers.get(tag);\n if (!logger) {\n logger = new Logger(tag);\n Logger._loggers.set(tag, logger);\n }\n return logger;\n }\n\n static addSubscriber(callback: LogSubscriber): void {\n Logger._subscribers.push(callback);\n }\n\n static removeSubscriber(callback: LogSubscriber): void {\n Logger._subscribers = Logger._subscribers.filter((cb) => cb !== callback);\n }\n\n static enumerate(action: (tag: string, logger: Logger) => void): void {\n Logger._loggers.forEach((logger, tag) => action(tag, logger));\n }\n\n private notify(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n const subs = [...Logger._subscribers];\n for (const cb of subs) {\n try {\n cb(this.tag, level, message, opts);\n } catch {\n // Do nothing...\n }\n }\n }\n\n log(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n this.notify(level, message, opts);\n const levelUpper = level.toUpperCase();\n console.log(`[${this.tag}|${levelUpper}] ${message}`);\n }\n\n debug(message: string, opts?: { file?: string; func?: string }): void {\n this.log('debug', message, opts);\n }\n\n info(message: string, opts?: { file?: string; func?: string }): void {\n this.log('info', message, opts);\n }\n\n warn(message: string, opts?: { file?: string; func?: string }): void {\n this.log('warn', message, opts);\n }\n\n error(message: string, opts?: { file?: string; func?: string }): void {\n this.log('error', message, opts);\n }\n\n fatal(message: string, opts?: { file?: string; func?: string }): void {\n this.log('fatal', message, opts);\n }\n}\n"]}
@@ -22,12 +22,8 @@ const _Logger = class _Logger {
22
22
  static enumerate(action) {
23
23
  _Logger._loggers.forEach((logger, tag) => action(tag, logger));
24
24
  }
25
- set subscriber(cb) {
26
- this._subscriber = cb;
27
- }
28
25
  notify(level, message, opts) {
29
26
  const subs = [..._Logger._subscribers];
30
- if (this._subscriber) subs.push(this._subscriber);
31
27
  for (const cb of subs) {
32
28
  try {
33
29
  cb(this.tag, level, message, opts);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/moonbridge/logger/logger.ts"],"names":[],"mappings":"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","file":"logger.mjs","sourcesContent":["/**\n * Logger 类,对应 Flutter lib/statistics/logger.dart。\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport type LogSubscriber = (\n tag: string,\n level: LogLevel,\n message: string,\n opts?: { file?: string; func?: string }\n) => void;\n\n/**\n * Logger 类\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\nexport class Logger {\n private static readonly _loggers = new Map<string, Logger>();\n private static _subscribers: LogSubscriber[] = [];\n\n readonly tag: string;\n private _subscriber?: LogSubscriber;\n\n private constructor(tag: string) {\n this.tag = tag;\n }\n\n /** \n * 工厂:按 tag 缓存,同 tag 返回同一实例。 \n */\n static get(tag: string): Logger {\n let logger = Logger._loggers.get(tag);\n if (!logger) {\n logger = new Logger(tag);\n Logger._loggers.set(tag, logger);\n }\n return logger;\n }\n\n static addSubscriber(callback: LogSubscriber): void {\n Logger._subscribers.push(callback);\n }\n\n static removeSubscriber(callback: LogSubscriber): void {\n Logger._subscribers = Logger._subscribers.filter((cb) => cb !== callback);\n }\n\n static enumerate(action: (tag: string, logger: Logger) => void): void {\n Logger._loggers.forEach((logger, tag) => action(tag, logger));\n }\n\n set subscriber(cb: LogSubscriber) {\n this._subscriber = cb;\n }\n\n private notify(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n const subs = [...Logger._subscribers];\n if (this._subscriber) subs.push(this._subscriber);\n for (const cb of subs) {\n try {\n cb(this.tag, level, message, opts);\n } catch {\n // 静默处理,不影响 SDK\n }\n }\n }\n\n log(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n this.notify(level, message, opts);\n const levelUpper = level.toUpperCase();\n console.log(`[${this.tag}|${levelUpper}] ${message}`);\n }\n\n debug(message: string, opts?: { file?: string; func?: string }): void {\n this.log('debug', message, opts);\n }\n\n info(message: string, opts?: { file?: string; func?: string }): void {\n this.log('info', message, opts);\n }\n\n warn(message: string, opts?: { file?: string; func?: string }): void {\n this.log('warn', message, opts);\n }\n\n error(message: string, opts?: { file?: string; func?: string }): void {\n this.log('error', message, opts);\n }\n\n fatal(message: string, opts?: { file?: string; func?: string }): void {\n this.log('fatal', message, opts);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/moonbridge/logger/logger.ts"],"names":[],"mappings":"AAkBO,MAAM,OAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAMV,YAAY,GAAA,EAAa;AAC/B,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAI,GAAA,EAAqB;AAC9B,IAAA,IAAI,MAAA,GAAS,OAAA,CAAO,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAA,GAAS,IAAI,QAAO,GAAG,CAAA;AACvB,MAAA,OAAA,CAAO,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,OAAO,cAAc,QAAA,EAA+B;AAClD,IAAA,OAAA,CAAO,YAAA,CAAa,KAAK,QAAQ,CAAA;AAAA,EACnC;AAAA,EAEA,OAAO,iBAAiB,QAAA,EAA+B;AACrD,IAAA,OAAA,CAAO,eAAe,OAAA,CAAO,YAAA,CAAa,OAAO,CAAC,EAAA,KAAO,OAAO,QAAQ,CAAA;AAAA,EAC1E;AAAA,EAEA,OAAO,UAAU,MAAA,EAAqD;AACpE,IAAA,OAAA,CAAO,QAAA,CAAS,QAAQ,CAAC,MAAA,EAAQ,QAAQ,MAAA,CAAO,GAAA,EAAK,MAAM,CAAC,CAAA;AAAA,EAC9D;AAAA,EAEQ,MAAA,CAAO,KAAA,EAAiB,OAAA,EAAiB,IAAA,EAA+C;AAC9F,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,OAAA,CAAO,YAAY,CAAA;AACpC,IAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,MAAA,IAAI;AACF,QAAA,EAAA,CAAG,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAAA,MACnC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEA,GAAA,CAAI,KAAA,EAAiB,OAAA,EAAiB,IAAA,EAA+C;AACnF,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,IAAI,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,MAAM,WAAA,EAAY;AACrC,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,IAAA,CAAK,GAAG,IAAI,UAAU,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACtD;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAA+C;AACpE,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAA+C;AACnE,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,IAAA,CAAK,SAAiB,IAAA,EAA+C;AACnE,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAA+C;AACpE,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,KAAA,CAAM,SAAiB,IAAA,EAA+C;AACpE,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAI,CAAA;AAAA,EACjC;AACF,CAAA;AAtEa,OAAA,CACa,QAAA,uBAAe,GAAA,EAAoB;AADhD,OAAA,CAEI,eAAgC,EAAC;AAF3C,IAAM,MAAA,GAAN","file":"logger.mjs","sourcesContent":["/**\n * Logger 类,对应 Flutter lib/statistics/logger.dart。\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport type LogSubscriber = (\n tag: string,\n level: LogLevel,\n message: string,\n opts?: { file?: string; func?: string }\n) => void;\n\n/**\n * Logger 类\n * 支持 tag 缓存、LogSubscriber 订阅、多级别日志。\n */\nexport class Logger {\n private static readonly _loggers = new Map<string, Logger>();\n private static _subscribers: LogSubscriber[] = [];\n\n readonly tag: string;\n\n private constructor(tag: string) {\n this.tag = tag;\n }\n\n /** \n * 工厂:按 tag 缓存,同 tag 返回同一实例。 \n */\n static get(tag: string): Logger {\n let logger = Logger._loggers.get(tag);\n if (!logger) {\n logger = new Logger(tag);\n Logger._loggers.set(tag, logger);\n }\n return logger;\n }\n\n static addSubscriber(callback: LogSubscriber): void {\n Logger._subscribers.push(callback);\n }\n\n static removeSubscriber(callback: LogSubscriber): void {\n Logger._subscribers = Logger._subscribers.filter((cb) => cb !== callback);\n }\n\n static enumerate(action: (tag: string, logger: Logger) => void): void {\n Logger._loggers.forEach((logger, tag) => action(tag, logger));\n }\n\n private notify(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n const subs = [...Logger._subscribers];\n for (const cb of subs) {\n try {\n cb(this.tag, level, message, opts);\n } catch {\n // Do nothing...\n }\n }\n }\n\n log(level: LogLevel, message: string, opts?: { file?: string; func?: string }): void {\n this.notify(level, message, opts);\n const levelUpper = level.toUpperCase();\n console.log(`[${this.tag}|${levelUpper}] ${message}`);\n }\n\n debug(message: string, opts?: { file?: string; func?: string }): void {\n this.log('debug', message, opts);\n }\n\n info(message: string, opts?: { file?: string; func?: string }): void {\n this.log('info', message, opts);\n }\n\n warn(message: string, opts?: { file?: string; func?: string }): void {\n this.log('warn', message, opts);\n }\n\n error(message: string, opts?: { file?: string; func?: string }): void {\n this.log('error', message, opts);\n }\n\n fatal(message: string, opts?: { file?: string; func?: string }): void {\n this.log('fatal', message, opts);\n }\n}\n"]}
@@ -10,6 +10,7 @@ import { ConnectionObserver, IpcConnectionCompletionHandler, MessageInterceptor
10
10
  import { EventBus } from './types/ipc_event_bus';
11
11
  import { Messenger } from './types/ipc_messenger';
12
12
  import { RpcServiceFactory } from './rpc/rpc_service_factory';
13
+ import { LogSubscriber } from '../../moonbridge/logger/logger';
13
14
  /**
14
15
  * MoonBridge IPC 客户端抽象接口
15
16
  */
@@ -59,6 +60,7 @@ export declare class MoonBridgeIpcClientBuilder {
59
60
  private _messageInterceptor?;
60
61
  private _connectionObserver?;
61
62
  private _appLauncher?;
63
+ private _logSubscriber?;
62
64
  /**
63
65
  * 设置客户端名称
64
66
  */
@@ -66,7 +68,7 @@ export declare class MoonBridgeIpcClientBuilder {
66
68
  /**
67
69
  * 设置 WebSocket 连接配置
68
70
  */
69
- useWebSocketChannel(endpoint: WebSocketServerEndpoint): this;
71
+ onWebSocketChannel(endpoint: WebSocketServerEndpoint): this;
70
72
  /**
71
73
  * 设置服务器应用路径
72
74
  */
@@ -100,6 +102,10 @@ export declare class MoonBridgeIpcClientBuilder {
100
102
  * 用于覆盖默认的唤醒方式(如 wps-addin 通过 URL Scheme 唤起)
101
103
  */
102
104
  appLauncher(launcher: AppLauncher): this;
105
+ /**
106
+ * 添加日志订阅者
107
+ */
108
+ logSubscriber(subscriber: LogSubscriber): this;
103
109
  /**
104
110
  * 构建客户端实例并可选注册为默认客户端。
105
111
  */
@@ -1 +1 @@
1
- {"version":3,"file":"moonbridge_ipc_client.d.ts","sourceRoot":"","sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"moonbridge_ipc_client.d.ts","sourceRoot":"","sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var ipc_client_settings = require('./internal/settings/ipc_client_settings');
4
4
  var moonbridge_ipc_client_internal = require('./internal/moonbridge_ipc_client.internal');
5
+ var logger = require('../../moonbridge/logger/logger');
5
6
 
6
7
  class MoonBridgeIpcClient {
7
8
  /**
@@ -26,7 +27,7 @@ class MoonBridgeIpcClientBuilder {
26
27
  /**
27
28
  * 设置 WebSocket 连接配置
28
29
  */
29
- useWebSocketChannel(endpoint) {
30
+ onWebSocketChannel(endpoint) {
30
31
  this._webSocketServerEndpoint = endpoint;
31
32
  return this;
32
33
  }
@@ -87,6 +88,13 @@ class MoonBridgeIpcClientBuilder {
87
88
  this._appLauncher = launcher;
88
89
  return this;
89
90
  }
91
+ /**
92
+ * 添加日志订阅者
93
+ */
94
+ logSubscriber(subscriber) {
95
+ this._logSubscriber = subscriber;
96
+ return this;
97
+ }
90
98
  /**
91
99
  * 构建客户端实例并可选注册为默认客户端。
92
100
  */
@@ -96,9 +104,12 @@ class MoonBridgeIpcClientBuilder {
96
104
  }
97
105
  if (!this._webSocketServerEndpoint) {
98
106
  throw new Error(
99
- "Call useWebSocketChannel to set the transport configuration."
107
+ "Call onWebSocketChannel to set the transport configuration."
100
108
  );
101
109
  }
110
+ if (this._logSubscriber) {
111
+ logger.Logger.addSubscriber(this._logSubscriber);
112
+ }
102
113
  const settings = new ipc_client_settings.IpcClientSettings({
103
114
  clientName: this._clientName,
104
115
  webSocketServerEndpoint: this._webSocketServerEndpoint,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":["IpcClientSettings","RealMoonBridgeIpcClient"],"mappings":"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","file":"moonbridge_ipc_client.js","sourcesContent":["/**\n * MoonBridge IPC 客户端入口类,对应 Flutter lib/client/moonbridge_ipc_client.dart。\n * 定义连接管理、消息发送、RPC 服务工厂与事件总线等公开 API。\n */\n\nimport { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport { AppInstallationPath, AppLaunchIdentifier } from '../general/app_launch/model/app_info';\nimport { AppLauncher } from '../general/app_launch/app_launcher';\nimport { IpcClientSettings } from './internal/settings/ipc_client_settings';\nimport { IpcMessageStrategy } from './types/ipc_message_strategy';\nimport { ConnectionObserver, IpcConnectionCompletionHandler, MessageInterceptor } from './types/ipc_types';\nimport { EventBus } from './types/ipc_event_bus';\nimport { Messenger } from './types/ipc_messenger';\nimport { RpcServiceFactory } from './rpc/rpc_service_factory';\nimport { RealMoonBridgeIpcClient } from './internal/moonbridge_ipc_client.internal';\n\n/** \n * MoonBridge IPC 客户端抽象接口 \n */\nexport abstract class MoonBridgeIpcClient {\n /**\n * 创建客户端构建器 \n */\n static builder(): MoonBridgeIpcClientBuilder {\n return new MoonBridgeIpcClientBuilder();\n }\n\n /** \n * 客户端名称 \n */\n abstract readonly clientName: string;\n /** \n * 消息发送器 \n */\n abstract readonly messenger: Messenger;\n /** \n * 事件总线 \n */\n abstract readonly eventBus: EventBus;\n /**\n * RPC 服务工厂\n */\n abstract readonly rpcServiceFactory: RpcServiceFactory;\n\n /** \n * 连接到 IPC 服务器 \n */\n abstract connect(onResult?: IpcConnectionCompletionHandler): void;\n /** \n * 断开与 IPC 服务器的连接 \n */\n abstract disconnect(): Promise<void>;\n /** \n * 检查是否已连接到 IPC 服务器 \n */\n abstract isConnected(): boolean;\n}\n\n// PUBLIC CLASS\n\n/** 构造器,用于链式配置并构建客户端实例 */\nexport class MoonBridgeIpcClientBuilder {\n private _clientName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _serverInstallationPath?: AppInstallationPath;\n private _serverLaunchIdentifier?: AppLaunchIdentifier;\n private _enableHeartbeat?: boolean;\n private _heartbeatIntervalMs?: number;\n private _messageStrategy?: IpcMessageStrategy;\n private _messageInterceptor?: MessageInterceptor;\n private _connectionObserver?: ConnectionObserver;\n private _appLauncher?: AppLauncher;\n\n // PUBLIC METHODS\n\n /**\n * 设置客户端名称 \n */\n clientName(name: string): this {\n this._clientName = name;\n return this;\n }\n\n /**\n * 设置 WebSocket 连接配置 \n */\n useWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /**\n * 设置服务器应用路径 \n */\n serverInstallationPath(path: AppInstallationPath): this {\n this._serverInstallationPath = path;\n return this;\n }\n\n /**\n * 设置服务器应用标识符 \n */\n serverLaunchIdentifier(identifier: AppLaunchIdentifier): this {\n this._serverLaunchIdentifier = identifier;\n return this;\n }\n\n /**\n * 设置是否启用心跳检测 \n */\n enableHeartbeat(enable: boolean): this {\n this._enableHeartbeat = enable;\n return this;\n }\n\n /**\n * 设置心跳检测间隔时间 \n */\n heartbeatIntervalMs(ms: number): this {\n this._heartbeatIntervalMs = ms;\n return this;\n }\n\n /**\n * 设置消息策略 \n */\n messageStrategy(strategy: IpcMessageStrategy): this {\n this._messageStrategy = strategy;\n return this;\n }\n\n /**\n * 设置消息拦截器 \n */\n messageInterceptor(interceptor: MessageInterceptor): this {\n this._messageInterceptor = interceptor;\n return this;\n }\n\n /**\n * 设置连接状态观察者 \n */\n connectionObserver(observer: ConnectionObserver): this {\n this._connectionObserver = observer;\n return this;\n }\n\n /** \n * 注入应用启动器\n * 用于覆盖默认的唤醒方式(如 wps-addin 通过 URL Scheme 唤起) \n */\n appLauncher(launcher: AppLauncher): this {\n this._appLauncher = launcher;\n return this;\n }\n\n /**\n * 构建客户端实例并可选注册为默认客户端。\n */\n build(makeDefault = false): MoonBridgeIpcClient {\n if (!this._clientName || this._clientName.trim() === '') {\n throw new Error('clientName must be non-empty.');\n }\n if (!this._webSocketServerEndpoint) {\n throw new Error(\n 'Call useWebSocketChannel to set the transport configuration.',\n );\n }\n\n const settings = new IpcClientSettings({\n clientName: this._clientName,\n webSocketServerEndpoint: this._webSocketServerEndpoint,\n serverInstallationPath: this._serverInstallationPath,\n serverLaunchIdentifier: this._serverLaunchIdentifier,\n enableHeartbeat: this._enableHeartbeat,\n heartbeatIntervalMs: this._heartbeatIntervalMs,\n messageStrategy: this._messageStrategy,\n messageInterceptor: this._messageInterceptor,\n connectionObserver: this._connectionObserver,\n appLauncher: this._appLauncher,\n });\n\n const client = new RealMoonBridgeIpcClient(settings);\n MoonBridgeIpcClientRegistry.getInstance().register(client);\n if (makeDefault) {\n MoonBridgeIpcClientRegistry.getInstance().setDefault(client);\n }\n return client;\n }\n}\n\n\n/** \n * 客户端注册表单例 \n */\nexport class MoonBridgeIpcClientRegistry {\n private static _instance: MoonBridgeIpcClientRegistry;\n private readonly _clientMap = new Map<string, MoonBridgeIpcClient>();\n\n /**\n * 获取客户端注册表单例 \n */\n static getInstance(): MoonBridgeIpcClientRegistry {\n if (!MoonBridgeIpcClientRegistry._instance) {\n MoonBridgeIpcClientRegistry._instance = new MoonBridgeIpcClientRegistry();\n }\n return MoonBridgeIpcClientRegistry._instance;\n }\n\n /**\n * 设置默认客户端 \n */\n setDefault(client: MoonBridgeIpcClient): void {\n this._clientMap.set('__default__', client);\n }\n\n /**\n * 注册客户端 \n */\n register(client: MoonBridgeIpcClient): void {\n this._clientMap.set(client.clientName, client);\n }\n\n /**\n * 获取客户端 \n */\n get(clientName?: string): MoonBridgeIpcClient | undefined {\n return this._clientMap.get(clientName ?? '__default__');\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":["Logger","IpcClientSettings","RealMoonBridgeIpcClient"],"mappings":"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","file":"moonbridge_ipc_client.js","sourcesContent":["/**\n * MoonBridge IPC 客户端入口类,对应 Flutter lib/client/moonbridge_ipc_client.dart。\n * 定义连接管理、消息发送、RPC 服务工厂与事件总线等公开 API。\n */\n\nimport { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport { AppInstallationPath, AppLaunchIdentifier } from '../general/app_launch/model/app_info';\nimport { AppLauncher } from '../general/app_launch/app_launcher';\nimport { IpcClientSettings } from './internal/settings/ipc_client_settings';\nimport { IpcMessageStrategy } from './types/ipc_message_strategy';\nimport { ConnectionObserver, IpcConnectionCompletionHandler, MessageInterceptor } from './types/ipc_types';\nimport { EventBus } from './types/ipc_event_bus';\nimport { Messenger } from './types/ipc_messenger';\nimport { RpcServiceFactory } from './rpc/rpc_service_factory';\nimport { RealMoonBridgeIpcClient } from './internal/moonbridge_ipc_client.internal';\nimport { Logger, LogSubscriber } from '../../moonbridge/logger/logger';\n\n/** \n * MoonBridge IPC 客户端抽象接口 \n */\nexport abstract class MoonBridgeIpcClient {\n /**\n * 创建客户端构建器 \n */\n static builder(): MoonBridgeIpcClientBuilder {\n return new MoonBridgeIpcClientBuilder();\n }\n\n /** \n * 客户端名称 \n */\n abstract readonly clientName: string;\n /** \n * 消息发送器 \n */\n abstract readonly messenger: Messenger;\n /** \n * 事件总线 \n */\n abstract readonly eventBus: EventBus;\n /**\n * RPC 服务工厂\n */\n abstract readonly rpcServiceFactory: RpcServiceFactory;\n\n /** \n * 连接到 IPC 服务器 \n */\n abstract connect(onResult?: IpcConnectionCompletionHandler): void;\n /** \n * 断开与 IPC 服务器的连接 \n */\n abstract disconnect(): Promise<void>;\n /** \n * 检查是否已连接到 IPC 服务器 \n */\n abstract isConnected(): boolean;\n}\n\n// PUBLIC CLASS\n\n/** 构造器,用于链式配置并构建客户端实例 */\nexport class MoonBridgeIpcClientBuilder {\n private _clientName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _serverInstallationPath?: AppInstallationPath;\n private _serverLaunchIdentifier?: AppLaunchIdentifier;\n private _enableHeartbeat?: boolean;\n private _heartbeatIntervalMs?: number;\n private _messageStrategy?: IpcMessageStrategy;\n private _messageInterceptor?: MessageInterceptor;\n private _connectionObserver?: ConnectionObserver;\n private _appLauncher?: AppLauncher;\n private _logSubscriber?: LogSubscriber;\n\n // PUBLIC METHODS\n\n /**\n * 设置客户端名称 \n */\n clientName(name: string): this {\n this._clientName = name;\n return this;\n }\n\n /**\n * 设置 WebSocket 连接配置 \n */\n onWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /**\n * 设置服务器应用路径 \n */\n serverInstallationPath(path: AppInstallationPath): this {\n this._serverInstallationPath = path;\n return this;\n }\n\n /**\n * 设置服务器应用标识符 \n */\n serverLaunchIdentifier(identifier: AppLaunchIdentifier): this {\n this._serverLaunchIdentifier = identifier;\n return this;\n }\n\n /**\n * 设置是否启用心跳检测 \n */\n enableHeartbeat(enable: boolean): this {\n this._enableHeartbeat = enable;\n return this;\n }\n\n /**\n * 设置心跳检测间隔时间 \n */\n heartbeatIntervalMs(ms: number): this {\n this._heartbeatIntervalMs = ms;\n return this;\n }\n\n /**\n * 设置消息策略 \n */\n messageStrategy(strategy: IpcMessageStrategy): this {\n this._messageStrategy = strategy;\n return this;\n }\n\n /**\n * 设置消息拦截器 \n */\n messageInterceptor(interceptor: MessageInterceptor): this {\n this._messageInterceptor = interceptor;\n return this;\n }\n\n /**\n * 设置连接状态观察者 \n */\n connectionObserver(observer: ConnectionObserver): this {\n this._connectionObserver = observer;\n return this;\n }\n\n /** \n * 注入应用启动器\n * 用于覆盖默认的唤醒方式(如 wps-addin 通过 URL Scheme 唤起) \n */\n appLauncher(launcher: AppLauncher): this {\n this._appLauncher = launcher;\n return this;\n }\n\n /**\n * 添加日志订阅者\n */\n logSubscriber(subscriber: LogSubscriber): this {\n this._logSubscriber = subscriber;\n return this;\n }\n\n /**\n * 构建客户端实例并可选注册为默认客户端。\n */\n build(makeDefault = false): MoonBridgeIpcClient {\n if (!this._clientName || this._clientName.trim() === '') {\n throw new Error('clientName must be non-empty.');\n }\n if (!this._webSocketServerEndpoint) {\n throw new Error(\n 'Call onWebSocketChannel to set the transport configuration.',\n );\n }\n\n // 添加日志订阅者\n if (this._logSubscriber) {\n Logger.addSubscriber(this._logSubscriber);\n }\n\n // 创建客户端设置\n const settings = new IpcClientSettings({\n clientName: this._clientName,\n webSocketServerEndpoint: this._webSocketServerEndpoint,\n serverInstallationPath: this._serverInstallationPath,\n serverLaunchIdentifier: this._serverLaunchIdentifier,\n enableHeartbeat: this._enableHeartbeat,\n heartbeatIntervalMs: this._heartbeatIntervalMs,\n messageStrategy: this._messageStrategy,\n messageInterceptor: this._messageInterceptor,\n connectionObserver: this._connectionObserver,\n appLauncher: this._appLauncher,\n });\n\n const client = new RealMoonBridgeIpcClient(settings);\n MoonBridgeIpcClientRegistry.getInstance().register(client);\n if (makeDefault) {\n MoonBridgeIpcClientRegistry.getInstance().setDefault(client);\n }\n return client;\n }\n}\n\n\n/** \n * 客户端注册表单例 \n */\nexport class MoonBridgeIpcClientRegistry {\n private static _instance: MoonBridgeIpcClientRegistry;\n private readonly _clientMap = new Map<string, MoonBridgeIpcClient>();\n\n /**\n * 获取客户端注册表单例 \n */\n static getInstance(): MoonBridgeIpcClientRegistry {\n if (!MoonBridgeIpcClientRegistry._instance) {\n MoonBridgeIpcClientRegistry._instance = new MoonBridgeIpcClientRegistry();\n }\n return MoonBridgeIpcClientRegistry._instance;\n }\n\n /**\n * 设置默认客户端 \n */\n setDefault(client: MoonBridgeIpcClient): void {\n this._clientMap.set('__default__', client);\n }\n\n /**\n * 注册客户端 \n */\n register(client: MoonBridgeIpcClient): void {\n this._clientMap.set(client.clientName, client);\n }\n\n /**\n * 获取客户端 \n */\n get(clientName?: string): MoonBridgeIpcClient | undefined {\n return this._clientMap.get(clientName ?? '__default__');\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { IpcClientSettings } from './internal/settings/ipc_client_settings';
2
2
  import { RealMoonBridgeIpcClient } from './internal/moonbridge_ipc_client.internal';
3
+ import { Logger } from '../../moonbridge/logger/logger';
3
4
 
4
5
  class MoonBridgeIpcClient {
5
6
  /**
@@ -24,7 +25,7 @@ class MoonBridgeIpcClientBuilder {
24
25
  /**
25
26
  * 设置 WebSocket 连接配置
26
27
  */
27
- useWebSocketChannel(endpoint) {
28
+ onWebSocketChannel(endpoint) {
28
29
  this._webSocketServerEndpoint = endpoint;
29
30
  return this;
30
31
  }
@@ -85,6 +86,13 @@ class MoonBridgeIpcClientBuilder {
85
86
  this._appLauncher = launcher;
86
87
  return this;
87
88
  }
89
+ /**
90
+ * 添加日志订阅者
91
+ */
92
+ logSubscriber(subscriber) {
93
+ this._logSubscriber = subscriber;
94
+ return this;
95
+ }
88
96
  /**
89
97
  * 构建客户端实例并可选注册为默认客户端。
90
98
  */
@@ -94,9 +102,12 @@ class MoonBridgeIpcClientBuilder {
94
102
  }
95
103
  if (!this._webSocketServerEndpoint) {
96
104
  throw new Error(
97
- "Call useWebSocketChannel to set the transport configuration."
105
+ "Call onWebSocketChannel to set the transport configuration."
98
106
  );
99
107
  }
108
+ if (this._logSubscriber) {
109
+ Logger.addSubscriber(this._logSubscriber);
110
+ }
100
111
  const settings = new IpcClientSettings({
101
112
  clientName: this._clientName,
102
113
  webSocketServerEndpoint: this._webSocketServerEndpoint,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":[],"mappings":"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","file":"moonbridge_ipc_client.mjs","sourcesContent":["/**\n * MoonBridge IPC 客户端入口类,对应 Flutter lib/client/moonbridge_ipc_client.dart。\n * 定义连接管理、消息发送、RPC 服务工厂与事件总线等公开 API。\n */\n\nimport { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport { AppInstallationPath, AppLaunchIdentifier } from '../general/app_launch/model/app_info';\nimport { AppLauncher } from '../general/app_launch/app_launcher';\nimport { IpcClientSettings } from './internal/settings/ipc_client_settings';\nimport { IpcMessageStrategy } from './types/ipc_message_strategy';\nimport { ConnectionObserver, IpcConnectionCompletionHandler, MessageInterceptor } from './types/ipc_types';\nimport { EventBus } from './types/ipc_event_bus';\nimport { Messenger } from './types/ipc_messenger';\nimport { RpcServiceFactory } from './rpc/rpc_service_factory';\nimport { RealMoonBridgeIpcClient } from './internal/moonbridge_ipc_client.internal';\n\n/** \n * MoonBridge IPC 客户端抽象接口 \n */\nexport abstract class MoonBridgeIpcClient {\n /**\n * 创建客户端构建器 \n */\n static builder(): MoonBridgeIpcClientBuilder {\n return new MoonBridgeIpcClientBuilder();\n }\n\n /** \n * 客户端名称 \n */\n abstract readonly clientName: string;\n /** \n * 消息发送器 \n */\n abstract readonly messenger: Messenger;\n /** \n * 事件总线 \n */\n abstract readonly eventBus: EventBus;\n /**\n * RPC 服务工厂\n */\n abstract readonly rpcServiceFactory: RpcServiceFactory;\n\n /** \n * 连接到 IPC 服务器 \n */\n abstract connect(onResult?: IpcConnectionCompletionHandler): void;\n /** \n * 断开与 IPC 服务器的连接 \n */\n abstract disconnect(): Promise<void>;\n /** \n * 检查是否已连接到 IPC 服务器 \n */\n abstract isConnected(): boolean;\n}\n\n// PUBLIC CLASS\n\n/** 构造器,用于链式配置并构建客户端实例 */\nexport class MoonBridgeIpcClientBuilder {\n private _clientName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _serverInstallationPath?: AppInstallationPath;\n private _serverLaunchIdentifier?: AppLaunchIdentifier;\n private _enableHeartbeat?: boolean;\n private _heartbeatIntervalMs?: number;\n private _messageStrategy?: IpcMessageStrategy;\n private _messageInterceptor?: MessageInterceptor;\n private _connectionObserver?: ConnectionObserver;\n private _appLauncher?: AppLauncher;\n\n // PUBLIC METHODS\n\n /**\n * 设置客户端名称 \n */\n clientName(name: string): this {\n this._clientName = name;\n return this;\n }\n\n /**\n * 设置 WebSocket 连接配置 \n */\n useWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /**\n * 设置服务器应用路径 \n */\n serverInstallationPath(path: AppInstallationPath): this {\n this._serverInstallationPath = path;\n return this;\n }\n\n /**\n * 设置服务器应用标识符 \n */\n serverLaunchIdentifier(identifier: AppLaunchIdentifier): this {\n this._serverLaunchIdentifier = identifier;\n return this;\n }\n\n /**\n * 设置是否启用心跳检测 \n */\n enableHeartbeat(enable: boolean): this {\n this._enableHeartbeat = enable;\n return this;\n }\n\n /**\n * 设置心跳检测间隔时间 \n */\n heartbeatIntervalMs(ms: number): this {\n this._heartbeatIntervalMs = ms;\n return this;\n }\n\n /**\n * 设置消息策略 \n */\n messageStrategy(strategy: IpcMessageStrategy): this {\n this._messageStrategy = strategy;\n return this;\n }\n\n /**\n * 设置消息拦截器 \n */\n messageInterceptor(interceptor: MessageInterceptor): this {\n this._messageInterceptor = interceptor;\n return this;\n }\n\n /**\n * 设置连接状态观察者 \n */\n connectionObserver(observer: ConnectionObserver): this {\n this._connectionObserver = observer;\n return this;\n }\n\n /** \n * 注入应用启动器\n * 用于覆盖默认的唤醒方式(如 wps-addin 通过 URL Scheme 唤起) \n */\n appLauncher(launcher: AppLauncher): this {\n this._appLauncher = launcher;\n return this;\n }\n\n /**\n * 构建客户端实例并可选注册为默认客户端。\n */\n build(makeDefault = false): MoonBridgeIpcClient {\n if (!this._clientName || this._clientName.trim() === '') {\n throw new Error('clientName must be non-empty.');\n }\n if (!this._webSocketServerEndpoint) {\n throw new Error(\n 'Call useWebSocketChannel to set the transport configuration.',\n );\n }\n\n const settings = new IpcClientSettings({\n clientName: this._clientName,\n webSocketServerEndpoint: this._webSocketServerEndpoint,\n serverInstallationPath: this._serverInstallationPath,\n serverLaunchIdentifier: this._serverLaunchIdentifier,\n enableHeartbeat: this._enableHeartbeat,\n heartbeatIntervalMs: this._heartbeatIntervalMs,\n messageStrategy: this._messageStrategy,\n messageInterceptor: this._messageInterceptor,\n connectionObserver: this._connectionObserver,\n appLauncher: this._appLauncher,\n });\n\n const client = new RealMoonBridgeIpcClient(settings);\n MoonBridgeIpcClientRegistry.getInstance().register(client);\n if (makeDefault) {\n MoonBridgeIpcClientRegistry.getInstance().setDefault(client);\n }\n return client;\n }\n}\n\n\n/** \n * 客户端注册表单例 \n */\nexport class MoonBridgeIpcClientRegistry {\n private static _instance: MoonBridgeIpcClientRegistry;\n private readonly _clientMap = new Map<string, MoonBridgeIpcClient>();\n\n /**\n * 获取客户端注册表单例 \n */\n static getInstance(): MoonBridgeIpcClientRegistry {\n if (!MoonBridgeIpcClientRegistry._instance) {\n MoonBridgeIpcClientRegistry._instance = new MoonBridgeIpcClientRegistry();\n }\n return MoonBridgeIpcClientRegistry._instance;\n }\n\n /**\n * 设置默认客户端 \n */\n setDefault(client: MoonBridgeIpcClient): void {\n this._clientMap.set('__default__', client);\n }\n\n /**\n * 注册客户端 \n */\n register(client: MoonBridgeIpcClient): void {\n this._clientMap.set(client.clientName, client);\n }\n\n /**\n * 获取客户端 \n */\n get(clientName?: string): MoonBridgeIpcClient | undefined {\n return this._clientMap.get(clientName ?? '__default__');\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":[],"mappings":"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","file":"moonbridge_ipc_client.mjs","sourcesContent":["/**\n * MoonBridge IPC 客户端入口类,对应 Flutter lib/client/moonbridge_ipc_client.dart。\n * 定义连接管理、消息发送、RPC 服务工厂与事件总线等公开 API。\n */\n\nimport { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport { AppInstallationPath, AppLaunchIdentifier } from '../general/app_launch/model/app_info';\nimport { AppLauncher } from '../general/app_launch/app_launcher';\nimport { IpcClientSettings } from './internal/settings/ipc_client_settings';\nimport { IpcMessageStrategy } from './types/ipc_message_strategy';\nimport { ConnectionObserver, IpcConnectionCompletionHandler, MessageInterceptor } from './types/ipc_types';\nimport { EventBus } from './types/ipc_event_bus';\nimport { Messenger } from './types/ipc_messenger';\nimport { RpcServiceFactory } from './rpc/rpc_service_factory';\nimport { RealMoonBridgeIpcClient } from './internal/moonbridge_ipc_client.internal';\nimport { Logger, LogSubscriber } from '../../moonbridge/logger/logger';\n\n/** \n * MoonBridge IPC 客户端抽象接口 \n */\nexport abstract class MoonBridgeIpcClient {\n /**\n * 创建客户端构建器 \n */\n static builder(): MoonBridgeIpcClientBuilder {\n return new MoonBridgeIpcClientBuilder();\n }\n\n /** \n * 客户端名称 \n */\n abstract readonly clientName: string;\n /** \n * 消息发送器 \n */\n abstract readonly messenger: Messenger;\n /** \n * 事件总线 \n */\n abstract readonly eventBus: EventBus;\n /**\n * RPC 服务工厂\n */\n abstract readonly rpcServiceFactory: RpcServiceFactory;\n\n /** \n * 连接到 IPC 服务器 \n */\n abstract connect(onResult?: IpcConnectionCompletionHandler): void;\n /** \n * 断开与 IPC 服务器的连接 \n */\n abstract disconnect(): Promise<void>;\n /** \n * 检查是否已连接到 IPC 服务器 \n */\n abstract isConnected(): boolean;\n}\n\n// PUBLIC CLASS\n\n/** 构造器,用于链式配置并构建客户端实例 */\nexport class MoonBridgeIpcClientBuilder {\n private _clientName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _serverInstallationPath?: AppInstallationPath;\n private _serverLaunchIdentifier?: AppLaunchIdentifier;\n private _enableHeartbeat?: boolean;\n private _heartbeatIntervalMs?: number;\n private _messageStrategy?: IpcMessageStrategy;\n private _messageInterceptor?: MessageInterceptor;\n private _connectionObserver?: ConnectionObserver;\n private _appLauncher?: AppLauncher;\n private _logSubscriber?: LogSubscriber;\n\n // PUBLIC METHODS\n\n /**\n * 设置客户端名称 \n */\n clientName(name: string): this {\n this._clientName = name;\n return this;\n }\n\n /**\n * 设置 WebSocket 连接配置 \n */\n onWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /**\n * 设置服务器应用路径 \n */\n serverInstallationPath(path: AppInstallationPath): this {\n this._serverInstallationPath = path;\n return this;\n }\n\n /**\n * 设置服务器应用标识符 \n */\n serverLaunchIdentifier(identifier: AppLaunchIdentifier): this {\n this._serverLaunchIdentifier = identifier;\n return this;\n }\n\n /**\n * 设置是否启用心跳检测 \n */\n enableHeartbeat(enable: boolean): this {\n this._enableHeartbeat = enable;\n return this;\n }\n\n /**\n * 设置心跳检测间隔时间 \n */\n heartbeatIntervalMs(ms: number): this {\n this._heartbeatIntervalMs = ms;\n return this;\n }\n\n /**\n * 设置消息策略 \n */\n messageStrategy(strategy: IpcMessageStrategy): this {\n this._messageStrategy = strategy;\n return this;\n }\n\n /**\n * 设置消息拦截器 \n */\n messageInterceptor(interceptor: MessageInterceptor): this {\n this._messageInterceptor = interceptor;\n return this;\n }\n\n /**\n * 设置连接状态观察者 \n */\n connectionObserver(observer: ConnectionObserver): this {\n this._connectionObserver = observer;\n return this;\n }\n\n /** \n * 注入应用启动器\n * 用于覆盖默认的唤醒方式(如 wps-addin 通过 URL Scheme 唤起) \n */\n appLauncher(launcher: AppLauncher): this {\n this._appLauncher = launcher;\n return this;\n }\n\n /**\n * 添加日志订阅者\n */\n logSubscriber(subscriber: LogSubscriber): this {\n this._logSubscriber = subscriber;\n return this;\n }\n\n /**\n * 构建客户端实例并可选注册为默认客户端。\n */\n build(makeDefault = false): MoonBridgeIpcClient {\n if (!this._clientName || this._clientName.trim() === '') {\n throw new Error('clientName must be non-empty.');\n }\n if (!this._webSocketServerEndpoint) {\n throw new Error(\n 'Call onWebSocketChannel to set the transport configuration.',\n );\n }\n\n // 添加日志订阅者\n if (this._logSubscriber) {\n Logger.addSubscriber(this._logSubscriber);\n }\n\n // 创建客户端设置\n const settings = new IpcClientSettings({\n clientName: this._clientName,\n webSocketServerEndpoint: this._webSocketServerEndpoint,\n serverInstallationPath: this._serverInstallationPath,\n serverLaunchIdentifier: this._serverLaunchIdentifier,\n enableHeartbeat: this._enableHeartbeat,\n heartbeatIntervalMs: this._heartbeatIntervalMs,\n messageStrategy: this._messageStrategy,\n messageInterceptor: this._messageInterceptor,\n connectionObserver: this._connectionObserver,\n appLauncher: this._appLauncher,\n });\n\n const client = new RealMoonBridgeIpcClient(settings);\n MoonBridgeIpcClientRegistry.getInstance().register(client);\n if (makeDefault) {\n MoonBridgeIpcClientRegistry.getInstance().setDefault(client);\n }\n return client;\n }\n}\n\n\n/** \n * 客户端注册表单例 \n */\nexport class MoonBridgeIpcClientRegistry {\n private static _instance: MoonBridgeIpcClientRegistry;\n private readonly _clientMap = new Map<string, MoonBridgeIpcClient>();\n\n /**\n * 获取客户端注册表单例 \n */\n static getInstance(): MoonBridgeIpcClientRegistry {\n if (!MoonBridgeIpcClientRegistry._instance) {\n MoonBridgeIpcClientRegistry._instance = new MoonBridgeIpcClientRegistry();\n }\n return MoonBridgeIpcClientRegistry._instance;\n }\n\n /**\n * 设置默认客户端 \n */\n setDefault(client: MoonBridgeIpcClient): void {\n this._clientMap.set('__default__', client);\n }\n\n /**\n * 注册客户端 \n */\n register(client: MoonBridgeIpcClient): void {\n this._clientMap.set(client.clientName, client);\n }\n\n /**\n * 获取客户端 \n */\n get(clientName?: string): MoonBridgeIpcClient | undefined {\n return this._clientMap.get(clientName ?? '__default__');\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"moonbridge_ipc_server.internal.d.ts","sourceRoot":"","sources":["../../../../src/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAkB,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAW5F,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAuB;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAA0B;IAEpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2C;IAC5E,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA6B;IACrE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA+B;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAC9E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IAErF,OAAO,CAAC,gBAAgB,CAAC,CAAkB;gBAGzC,UAAU,EAAE,MAAM,EAClB,uBAAuB,CAAC,EAAE,uBAAuB,EACjD,kBAAkB,CAAC,EAAE,kBAAkB,EACvC,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,EAClD,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,iBAAiB,CAAC,EAAE,iBAAiB;IAevC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA4CzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,UAAU;IAmDlB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,sBAAsB;IA+B9B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,2BAA2B;YAcrB,mBAAmB;IA4CjC,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,4BAA4B;CAuBrC"}
1
+ {"version":3,"file":"moonbridge_ipc_server.internal.d.ts","sourceRoot":"","sources":["../../../../src/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAkB,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAW5F,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAuB;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAA0B;IAEpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2C;IAC5E,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA6B;IACrE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA+B;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoD;IAC9E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IAErF,OAAO,CAAC,gBAAgB,CAAC,CAAkB;gBAGzC,UAAU,EAAE,MAAM,EAClB,uBAAuB,CAAC,EAAE,uBAAuB,EACjD,kBAAkB,CAAC,EAAE,kBAAkB,EACvC,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,EAClD,oBAAoB,CAAC,EAAE,oBAAoB,EAC3C,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,iBAAiB,CAAC,EAAE,iBAAiB;IAevC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAEK,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IA4CzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAID,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,UAAU;IAmDlB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,sBAAsB;IA+B9B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,2BAA2B;YAcrB,mBAAmB;IA4CjC,OAAO,CAAC,yBAAyB;IAkBjC,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,4BAA4B;CAuBrC"}
@@ -86,6 +86,7 @@ class RealMoonBridgeIpcServer {
86
86
  var _a, _b, _c;
87
87
  return (_c = (_b = (_a = this._webSocketServer) == null ? void 0 : _a.serverAddressInfo) == null ? void 0 : _b.port) != null ? _c : void 0;
88
88
  }
89
+ // PRIVATE METHODS
89
90
  _addClient(clientIdentity, client) {
90
91
  const clientName = clientIdentity.clientName;
91
92
  const clientAddress = this._getClientAddress(client);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.ts"],"names":["ClientIdentityManager","_a","logger","WebSocketServer","MessageType","IpcMessageDecoder","sendEvent","sendError","sendRequest","sendResponse","IpcSessionSetupResponse","handshake","Handshake","sendHandshake","sendPing","Ping","PlatformAppLauncherFactory","sendSessionSetupResponse"],"mappings":"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","file":"moonbridge_ipc_server.internal.js","sourcesContent":["/**\n * MoonBridge IPC 服务器实现类\n *\n * 该类用于管理 IPC 服务器,包括启动服务器、处理客户端连接和消息等功能。\n */\n\nimport type { SerialMessageChannel } from '../../general/transport/interface/serial_message_channel';\nimport {\n sendResponse,\n sendRequest,\n sendEvent,\n sendError,\n sendPing,\n sendHandshake,\n sendSessionSetupResponse,\n} from '../../general/transport/interface/serial_message_channel_extension';\nimport { WebSocketServer } from '../../general/transport/websocket/websocket_server';\nimport { IpcMessageDecoder } from '../../general/encode/ipc_message_decoder';\nimport { MessageType } from '../../general/message/constants/message_types';\nimport { Handshake } from '../../general/message/handshake';\nimport { IpcSessionSetupRequest, IpcSessionSetupResponse } from '../../general/message/session_setup';\nimport { PlatformAppLauncherFactory } from '../../general/app_launch/platform_app_launcher';\nimport type { WebSocketServerEndpoint } from '../../general/config/websocket_server_endpoint';\nimport type {\n MoonBridgeIpcServer,\n WakeAppInterceptor,\n DisconnectedCallback,\n MessagePreprocessor,\n OnMessageReceived,\n} from '../moonbridge_ipc_server';\nimport type { ClientIdentity, ClientIdentityProvider } from '../credential/client_identity';\nimport { ClientIdentityManager } from './identity/client_identity_manager';\nimport type { Registration } from '../../general/message/registration';\nimport type { Unregistration } from '../../general/message/unregistration';\nimport type { Event } from '../../general/message/event';\nimport type { Error } from '../../general/message/error';\nimport type { Request } from '../../general/message/request';\nimport type { Response } from '../../general/message/response';\nimport { Ping } from '../../general/message/ping';\nimport { logger } from '../../utils/logger';\n\nexport class RealMoonBridgeIpcServer implements MoonBridgeIpcServer {\n private readonly _serverName: string;\n private readonly _wakeAppInterceptor?: WakeAppInterceptor;\n private readonly _onClientDisconnected?: DisconnectedCallback;\n private readonly _messagePreprocessor?: MessagePreprocessor;\n private readonly _onMessageReceived?: OnMessageReceived;\n private readonly _webSocketServerEndpoint?: WebSocketServerEndpoint;\n\n private readonly _clientSocketMap = new Map<string, SerialMessageChannel>();\n private readonly _addressToClientNameMap = new Map<string, string>();\n private readonly _clientIdentityManager = new ClientIdentityManager();\n private readonly _timerMap = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly _sessionSetupRequests = new Map<string, IpcSessionSetupRequest[]>();\n\n private _webSocketServer?: WebSocketServer;\n\n constructor(\n serverName: string,\n webSocketServerEndpoint?: WebSocketServerEndpoint,\n wakeAppInterceptor?: WakeAppInterceptor,\n clientIdentityProviders?: ClientIdentityProvider[],\n onClientDisconnected?: DisconnectedCallback,\n messagePreprocessor?: MessagePreprocessor,\n onMessageReceived?: OnMessageReceived,\n ) {\n this._serverName = serverName;\n this._webSocketServerEndpoint = webSocketServerEndpoint;\n this._wakeAppInterceptor = wakeAppInterceptor;\n this._onClientDisconnected = onClientDisconnected;\n this._messagePreprocessor = messagePreprocessor;\n this._onMessageReceived = onMessageReceived;\n\n const providers = clientIdentityProviders ?? [];\n for (const p of providers) {\n this._clientIdentityManager.addClientIdentityProvider(p);\n }\n }\n\n get serverName(): string {\n return this._serverName;\n }\n\n async start(): Promise<boolean> {\n const onClientConnected = (client: SerialMessageChannel) => {\n let clientName = this._getClientName(client) ?? '';\n client.subscribe(\n (message: string) => {\n this._onMessage(client, message);\n if (clientName === '') {\n clientName = this._getClientName(client) ?? '';\n }\n },\n {\n onError: (err) => {\n logger.error(`客户端错误: ${String(err)}`);\n },\n onDone: () => {\n logger.error(`客户端 ${clientName} 断开连接`);\n this._removeClient(client);\n this._onClientDisconnected?.(clientName);\n },\n cancelOnError: false,\n },\n );\n };\n\n if (this._webSocketServerEndpoint != null) {\n const ep = this._webSocketServerEndpoint;\n const portList =\n ep.portCandidateRule != null\n ? ep.portCandidateRule.toOrderedPortList()\n : [ep.port];\n\n for (const port of portList) {\n const server = new WebSocketServer(ep.address, port, { path: ep.path });\n if (await server.startServer(onClientConnected)) {\n this._webSocketServer = server;\n return true;\n }\n }\n }\n\n this._webSocketServer = undefined;\n return false;\n }\n\n async stop(): Promise<void> {\n if (this._webSocketServer != undefined) {\n await this._webSocketServer.close();\n this._webSocketServer = undefined;\n }\n }\n\n get serverAddress(): string | undefined {\n return this._webSocketServer?.serverAddressInfo?.ip ?? undefined;\n }\n\n get serverPort(): number | undefined {\n return this._webSocketServer?.serverAddressInfo?.port ?? undefined;\n }\n\n private _addClient(clientIdentity: ClientIdentity, client: SerialMessageChannel): void {\n const clientName = clientIdentity.clientName;\n const clientAddress = this._getClientAddress(client);\n this._clientSocketMap.set(clientName, client);\n this._addressToClientNameMap.set(clientAddress, clientName);\n logger.info(`客户端已连接: ${clientName}`);\n }\n\n private _removeClient(client: SerialMessageChannel): void {\n const clientAddress = this._getClientAddress(client);\n const clientName = this._addressToClientNameMap.get(clientAddress);\n this._addressToClientNameMap.delete(clientAddress);\n if (clientName != null) {\n this._clientSocketMap.delete(clientName);\n }\n logger.info(`客户端已断开: ${clientName}`);\n }\n\n private _getClientName(client: SerialMessageChannel): string | undefined {\n const clientAddress = this._getClientAddress(client);\n return this._addressToClientNameMap.get(clientAddress);\n }\n\n private _getClientAddress(client: SerialMessageChannel): string {\n return `${client.remoteAddress}:${client.remotePort}`;\n }\n\n private _onMessage(client: SerialMessageChannel, message: string): void {\n logger.info(`服务端接收到消息,message: ${message}`);\n\n const reply: (msg: string) => Promise<boolean> = (msg) => client.sendMessage(msg);\n if (this._messagePreprocessor?.(reply, message) === true) {\n return;\n }\n\n let messageType = MessageType.UNKNOWN;\n\n const messageTypeMatch = message.match(/\"type\"\\s*:\\s*\"([^\"]+)\"/);\n const actualType = messageTypeMatch ? messageTypeMatch[1] : null;\n\n if (actualType === MessageType.REGISTRATION) {\n messageType = MessageType.REGISTRATION;\n this._onRegistration(client, IpcMessageDecoder.decodeRegistration(message));\n } else if (actualType === MessageType.UNREGISTRATION) {\n messageType = MessageType.UNREGISTRATION;\n this._onUnregistration(IpcMessageDecoder.decodeUnregistration(message));\n } else if (actualType === MessageType.EVENT) {\n messageType = MessageType.EVENT;\n this._onEvent(IpcMessageDecoder.decodeEvent(message));\n } else if (actualType === MessageType.ERROR) {\n messageType = MessageType.ERROR;\n this._onError(IpcMessageDecoder.decodeError(message));\n } else if (actualType === MessageType.REQUEST) {\n messageType = MessageType.REQUEST;\n this._onRequest(IpcMessageDecoder.decodeRequest(message));\n } else if (actualType === MessageType.RESPONSE) {\n messageType = MessageType.RESPONSE;\n this._onResponse(IpcMessageDecoder.decodeResponse(message));\n } else if (actualType === MessageType.SESSION_SETUP_REQUEST) {\n messageType = MessageType.SESSION_SETUP_REQUEST;\n this._onSessionSetupRequest(IpcMessageDecoder.decodeSessionSetupRequest(message));\n } else if (actualType === MessageType.SESSION_SETUP_RESPONSE) {\n // SESSION_SETUP_RESPONSE 单独处理,不设置 messageType 以避免重复处理\n // 这里可以添加相关处理逻辑,如果需要的话\n } else if (actualType === MessageType.HANDSHAKE) {\n messageType = MessageType.HANDSHAKE;\n this._onHandshake(IpcMessageDecoder.decodeHandshake(message), client);\n } else if (actualType === MessageType.PING) {\n messageType = MessageType.PING;\n this._onPing(IpcMessageDecoder.decodePing(message));\n } else {\n logger.error(`无法识别的消息类型: ${message}`);\n }\n\n const clientName = this._getClientName(client) ?? '';\n this._onMessageReceived?.(clientName, messageType, message);\n }\n\n private _onRegistration(client: SerialMessageChannel, registration: Registration): void {\n const clientName = registration.clientName;\n if (!this._validateClientIdentity(clientName)) {\n logger.error(`客户端(${clientName})不在白名单中,注册失败.`);\n return;\n }\n const identity = this._clientIdentityManager.getClientIdentity(clientName)!;\n this._addClient(identity, client);\n this._cancelClientTimer(clientName);\n this._processSessionSetupRequests(clientName);\n logger.info(`客户端(${clientName})注册成功.`);\n }\n\n private _onUnregistration(unregistration: Unregistration): void {\n const clientName = unregistration.clientName;\n this._clientSocketMap.delete(clientName);\n this._sessionSetupRequests.delete(clientName);\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n logger.info(`客户端(${clientName})注销.`);\n }\n\n private _onEvent(event: Event): void {\n const allClients = [...this._clientSocketMap.values()];\n for (const client of allClients) {\n sendEvent(client, event);\n }\n logger.info(`接收到 EventBus 事件,并转发给处于连接状态的所有客户端,event: ${event}.`);\n }\n\n private _onError(error: Error): void {\n logger.info(`接收到错误消息,并转发给请求客户端,error: ${error}.`);\n const fromClient = this._clientSocketMap.get(error.fromClient);\n if (fromClient != null) {\n sendError(fromClient, error);\n }\n }\n\n private _onRequest(request: Request): void {\n logger.info(`接收到请求消息,并转发给目标客户端,request: ${request}.`);\n const toClient = this._clientSocketMap.get(request.toClient);\n if (toClient != null) {\n sendRequest(toClient, request);\n }\n }\n\n private _onResponse(response: Response): void {\n logger.info(`接收到响应消息,并转发给请求客户端,response: ${response}.`);\n const fromClient = this._clientSocketMap.get(response.fromClient);\n if (fromClient != null) {\n sendResponse(fromClient, response);\n }\n }\n\n private _onSessionSetupRequest(request: IpcSessionSetupRequest): void {\n const targetClient = request.targetClient;\n if (!this._validateClientIdentity(targetClient)) {\n logger.error(`目标客户端(${targetClient})不在白名单内!`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Match target client(${targetClient}) failed!`);\n return;\n }\n if (this._handleExistingTargetClient(request, targetClient)) {\n logger.info(`与目标客户端(${targetClient})会话连接中.`);\n return;\n }\n let queue = this._sessionSetupRequests.get(targetClient);\n if (queue == null) {\n queue = [];\n this._sessionSetupRequests.set(targetClient, queue);\n }\n queue.push(request);\n logger.info(`缓存目标客户端(${targetClient})唤醒动作至队列.`);\n if (queue.length > 1) {\n logger.info(`正在尝试唤醒目标客户端进程,追加回调至队列中,targetClient: ${targetClient}.`);\n return;\n }\n if (request.autoLaunch) {\n logger.info(`尝试唤醒目标客户端(${targetClient}).`);\n this._wakeUpTargetClient(targetClient);\n } else {\n logger.info(`不尝试唤醒目标客户端(${targetClient}),直接返回失败.`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Target client(${targetClient}) was dead, and wake up is disabled!`);\n }\n }\n\n private _onPing(_ping: Ping): void {\n logger.info('接收到 Ping 消息');\n }\n\n private _onHandshake(handshake: Handshake, client: SerialMessageChannel): void {\n if (handshake.magic !== Handshake.ipcMagic) {\n logger.warn(`收到未知握手魔数(${handshake.magic}),忽略本次握手请求,可能是其他服务误连.`);\n return;\n }\n if (handshake.role !== Handshake.clientRole) {\n logger.warn(`收到非 client 角色的握手(${handshake.role}),忽略本次握手请求.`);\n return;\n }\n const ack = new Handshake(\n handshake.clientName,\n Handshake.ipcMagic,\n Handshake.serverRole,\n Handshake.ipcVersion,\n );\n sendHandshake(client, ack);\n logger.info(`完成与客户端的握手确认,clientName: ${ack.clientName}, magic: ${ack.magic}, version: ${ack.version}`);\n }\n\n private _validateClientIdentity(clientName: string): boolean {\n const isValid = this._clientIdentityManager.getClientIdentity(clientName) != null;\n if (!isValid) {\n logger.fatal(`客户端(${clientName})不在白名单中,可能存在非法访问!`);\n }\n return isValid;\n }\n\n private _handleExistingTargetClient(request: IpcSessionSetupRequest, targetClient: string): boolean {\n const targetSocket = this._clientSocketMap.get(targetClient);\n if (targetSocket != null) {\n try {\n sendPing(targetSocket, new Ping(request.sourceClient));\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.success, `Connecting with target client(${targetClient})!`);\n return true;\n } catch (e) {\n logger.error(`Ping target client(${targetClient}) 失败!`);\n }\n }\n return false;\n }\n\n private async _wakeUpTargetClient(targetClient: string): Promise<void> {\n const clientIdentity = this._clientIdentityManager.getClientIdentity(targetClient);\n if (clientIdentity == null) {\n logger.fatal('唤醒目标客户端,白名单校验失败!');\n return;\n }\n if (this._wakeAppInterceptor != null && this._wakeAppInterceptor(clientIdentity) === true) {\n logger.info(`自定义方式唤醒目标客户端(${targetClient}).`);\n } else {\n logger.info(`默认方式唤醒目标客户端(${targetClient}).`);\n try {\n const appLauncher = PlatformAppLauncherFactory.create({\n appIdentifier: clientIdentity.appLaunchIdentifier,\n appInstallationPath: clientIdentity.appInstallationPath,\n });\n if (await appLauncher.isAppRunning()) {\n logger.warn(`目标客户端(${targetClient})处于存活态,等待注册!`);\n } else {\n logger.info(`尝试唤醒目标客户端(${targetClient})!`);\n await appLauncher.launchApp();\n }\n } catch (e) {\n logger.fatal(`唤醒目标客户端发生异常:${String(e)}!`);\n }\n }\n let timer = this._timerMap.get(targetClient);\n if (timer == null) {\n timer = setTimeout(() => {\n logger.error(`唤醒目标客户端(${targetClient})超时`);\n const queue = this._sessionSetupRequests.get(targetClient);\n this._sessionSetupRequests.delete(targetClient);\n this._timerMap.delete(targetClient);\n if (queue != null) {\n for (const req of queue) {\n this._sendSessionSetupResponse(req, IpcSessionSetupResponse.failure, `Target client(${targetClient}) register time out!`);\n }\n } else {\n logger.error('需要与目标客户端建立会话的发起端队列为空!');\n }\n }, 20_000);\n this._timerMap.set(targetClient, timer);\n }\n }\n\n private _sendSessionSetupResponse(request: IpcSessionSetupRequest, result: number, message: string): void {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n result,\n message,\n undefined,\n );\n const sourceSocket = this._clientSocketMap.get(request.sourceClient);\n if (sourceSocket != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建结果${result === IpcSessionSetupResponse.success ? '成功.' : '失败!'}`);\n sendSessionSetupResponse(sourceSocket, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n\n private _cancelClientTimer(clientName: string): void {\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n }\n\n private _processSessionSetupRequests(clientName: string): void {\n const queue = this._sessionSetupRequests.get(clientName);\n this._sessionSetupRequests.delete(clientName);\n if (queue != null) {\n for (const request of queue) {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n IpcSessionSetupResponse.success,\n 'Target client register success!',\n undefined,\n );\n const sourceClient = this._clientSocketMap.get(request.sourceClient);\n if (sourceClient != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建成功.`);\n sendSessionSetupResponse(sourceClient, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.ts"],"names":["ClientIdentityManager","_a","logger","WebSocketServer","MessageType","IpcMessageDecoder","sendEvent","sendError","sendRequest","sendResponse","IpcSessionSetupResponse","handshake","Handshake","sendHandshake","sendPing","Ping","PlatformAppLauncherFactory","sendSessionSetupResponse"],"mappings":"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","file":"moonbridge_ipc_server.internal.js","sourcesContent":["/**\n * MoonBridge IPC 服务器实现类\n *\n * 该类用于管理 IPC 服务器,包括启动服务器、处理客户端连接和消息等功能。\n */\n\nimport type { SerialMessageChannel } from '../../general/transport/interface/serial_message_channel';\nimport {\n sendResponse,\n sendRequest,\n sendEvent,\n sendError,\n sendPing,\n sendHandshake,\n sendSessionSetupResponse,\n} from '../../general/transport/interface/serial_message_channel_extension';\nimport { WebSocketServer } from '../../general/transport/websocket/websocket_server';\nimport { IpcMessageDecoder } from '../../general/encode/ipc_message_decoder';\nimport { MessageType } from '../../general/message/constants/message_types';\nimport { Handshake } from '../../general/message/handshake';\nimport { IpcSessionSetupRequest, IpcSessionSetupResponse } from '../../general/message/session_setup';\nimport { PlatformAppLauncherFactory } from '../../general/app_launch/platform_app_launcher';\nimport type { WebSocketServerEndpoint } from '../../general/config/websocket_server_endpoint';\nimport type {\n MoonBridgeIpcServer,\n WakeAppInterceptor,\n DisconnectedCallback,\n MessagePreprocessor,\n OnMessageReceived,\n} from '../moonbridge_ipc_server';\nimport type { ClientIdentity, ClientIdentityProvider } from '../credential/client_identity';\nimport { ClientIdentityManager } from './identity/client_identity_manager';\nimport type { Registration } from '../../general/message/registration';\nimport type { Unregistration } from '../../general/message/unregistration';\nimport type { Event } from '../../general/message/event';\nimport type { Error } from '../../general/message/error';\nimport type { Request } from '../../general/message/request';\nimport type { Response } from '../../general/message/response';\nimport { Ping } from '../../general/message/ping';\nimport { logger } from '../../utils/logger';\n\nexport class RealMoonBridgeIpcServer implements MoonBridgeIpcServer {\n private readonly _serverName: string;\n private readonly _wakeAppInterceptor?: WakeAppInterceptor;\n private readonly _onClientDisconnected?: DisconnectedCallback;\n private readonly _messagePreprocessor?: MessagePreprocessor;\n private readonly _onMessageReceived?: OnMessageReceived;\n private readonly _webSocketServerEndpoint?: WebSocketServerEndpoint;\n\n private readonly _clientSocketMap = new Map<string, SerialMessageChannel>();\n private readonly _addressToClientNameMap = new Map<string, string>();\n private readonly _clientIdentityManager = new ClientIdentityManager();\n private readonly _timerMap = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly _sessionSetupRequests = new Map<string, IpcSessionSetupRequest[]>();\n\n private _webSocketServer?: WebSocketServer;\n\n constructor(\n serverName: string,\n webSocketServerEndpoint?: WebSocketServerEndpoint,\n wakeAppInterceptor?: WakeAppInterceptor,\n clientIdentityProviders?: ClientIdentityProvider[],\n onClientDisconnected?: DisconnectedCallback,\n messagePreprocessor?: MessagePreprocessor,\n onMessageReceived?: OnMessageReceived,\n ) {\n this._serverName = serverName;\n this._webSocketServerEndpoint = webSocketServerEndpoint;\n this._wakeAppInterceptor = wakeAppInterceptor;\n this._onClientDisconnected = onClientDisconnected;\n this._messagePreprocessor = messagePreprocessor;\n this._onMessageReceived = onMessageReceived;\n\n const providers = clientIdentityProviders ?? [];\n for (const p of providers) {\n this._clientIdentityManager.addClientIdentityProvider(p);\n }\n }\n\n get serverName(): string {\n return this._serverName;\n }\n\n async start(): Promise<boolean> {\n const onClientConnected = (client: SerialMessageChannel) => {\n let clientName = this._getClientName(client) ?? '';\n client.subscribe(\n (message: string) => {\n this._onMessage(client, message);\n if (clientName === '') {\n clientName = this._getClientName(client) ?? '';\n }\n },\n {\n onError: (err) => {\n logger.error(`客户端错误: ${String(err)}`);\n },\n onDone: () => {\n logger.error(`客户端 ${clientName} 断开连接`);\n this._removeClient(client);\n this._onClientDisconnected?.(clientName);\n },\n cancelOnError: false,\n },\n );\n };\n\n if (this._webSocketServerEndpoint != null) {\n const ep = this._webSocketServerEndpoint;\n const portList =\n ep.portCandidateRule != null\n ? ep.portCandidateRule.toOrderedPortList()\n : [ep.port];\n\n for (const port of portList) {\n const server = new WebSocketServer(ep.address, port, { path: ep.path });\n if (await server.startServer(onClientConnected)) {\n this._webSocketServer = server;\n return true;\n }\n }\n }\n\n this._webSocketServer = undefined;\n return false;\n }\n\n async stop(): Promise<void> {\n if (this._webSocketServer != undefined) {\n await this._webSocketServer.close();\n this._webSocketServer = undefined;\n }\n }\n\n get serverAddress(): string | undefined {\n return this._webSocketServer?.serverAddressInfo?.ip ?? undefined;\n }\n\n get serverPort(): number | undefined {\n return this._webSocketServer?.serverAddressInfo?.port ?? undefined;\n }\n\n // PRIVATE METHODS\n\n private _addClient(clientIdentity: ClientIdentity, client: SerialMessageChannel): void {\n const clientName = clientIdentity.clientName;\n const clientAddress = this._getClientAddress(client);\n this._clientSocketMap.set(clientName, client);\n this._addressToClientNameMap.set(clientAddress, clientName);\n logger.info(`客户端已连接: ${clientName}`);\n }\n\n private _removeClient(client: SerialMessageChannel): void {\n const clientAddress = this._getClientAddress(client);\n const clientName = this._addressToClientNameMap.get(clientAddress);\n this._addressToClientNameMap.delete(clientAddress);\n if (clientName != null) {\n this._clientSocketMap.delete(clientName);\n }\n logger.info(`客户端已断开: ${clientName}`);\n }\n\n private _getClientName(client: SerialMessageChannel): string | undefined {\n const clientAddress = this._getClientAddress(client);\n return this._addressToClientNameMap.get(clientAddress);\n }\n\n private _getClientAddress(client: SerialMessageChannel): string {\n return `${client.remoteAddress}:${client.remotePort}`;\n }\n\n private _onMessage(client: SerialMessageChannel, message: string): void {\n logger.info(`服务端接收到消息,message: ${message}`);\n\n const reply: (msg: string) => Promise<boolean> = (msg) => client.sendMessage(msg);\n if (this._messagePreprocessor?.(reply, message) === true) {\n return;\n }\n\n let messageType = MessageType.UNKNOWN;\n\n const messageTypeMatch = message.match(/\"type\"\\s*:\\s*\"([^\"]+)\"/);\n const actualType = messageTypeMatch ? messageTypeMatch[1] : null;\n\n if (actualType === MessageType.REGISTRATION) {\n messageType = MessageType.REGISTRATION;\n this._onRegistration(client, IpcMessageDecoder.decodeRegistration(message));\n } else if (actualType === MessageType.UNREGISTRATION) {\n messageType = MessageType.UNREGISTRATION;\n this._onUnregistration(IpcMessageDecoder.decodeUnregistration(message));\n } else if (actualType === MessageType.EVENT) {\n messageType = MessageType.EVENT;\n this._onEvent(IpcMessageDecoder.decodeEvent(message));\n } else if (actualType === MessageType.ERROR) {\n messageType = MessageType.ERROR;\n this._onError(IpcMessageDecoder.decodeError(message));\n } else if (actualType === MessageType.REQUEST) {\n messageType = MessageType.REQUEST;\n this._onRequest(IpcMessageDecoder.decodeRequest(message));\n } else if (actualType === MessageType.RESPONSE) {\n messageType = MessageType.RESPONSE;\n this._onResponse(IpcMessageDecoder.decodeResponse(message));\n } else if (actualType === MessageType.SESSION_SETUP_REQUEST) {\n messageType = MessageType.SESSION_SETUP_REQUEST;\n this._onSessionSetupRequest(IpcMessageDecoder.decodeSessionSetupRequest(message));\n } else if (actualType === MessageType.SESSION_SETUP_RESPONSE) {\n // SESSION_SETUP_RESPONSE 单独处理,不设置 messageType 以避免重复处理\n // 这里可以添加相关处理逻辑,如果需要的话\n } else if (actualType === MessageType.HANDSHAKE) {\n messageType = MessageType.HANDSHAKE;\n this._onHandshake(IpcMessageDecoder.decodeHandshake(message), client);\n } else if (actualType === MessageType.PING) {\n messageType = MessageType.PING;\n this._onPing(IpcMessageDecoder.decodePing(message));\n } else {\n logger.error(`无法识别的消息类型: ${message}`);\n }\n\n const clientName = this._getClientName(client) ?? '';\n this._onMessageReceived?.(clientName, messageType, message);\n }\n\n private _onRegistration(client: SerialMessageChannel, registration: Registration): void {\n const clientName = registration.clientName;\n if (!this._validateClientIdentity(clientName)) {\n logger.error(`客户端(${clientName})不在白名单中,注册失败.`);\n return;\n }\n const identity = this._clientIdentityManager.getClientIdentity(clientName)!;\n this._addClient(identity, client);\n this._cancelClientTimer(clientName);\n this._processSessionSetupRequests(clientName);\n logger.info(`客户端(${clientName})注册成功.`);\n }\n\n private _onUnregistration(unregistration: Unregistration): void {\n const clientName = unregistration.clientName;\n this._clientSocketMap.delete(clientName);\n this._sessionSetupRequests.delete(clientName);\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n logger.info(`客户端(${clientName})注销.`);\n }\n\n private _onEvent(event: Event): void {\n const allClients = [...this._clientSocketMap.values()];\n for (const client of allClients) {\n sendEvent(client, event);\n }\n logger.info(`接收到 EventBus 事件,并转发给处于连接状态的所有客户端,event: ${event}.`);\n }\n\n private _onError(error: Error): void {\n logger.info(`接收到错误消息,并转发给请求客户端,error: ${error}.`);\n const fromClient = this._clientSocketMap.get(error.fromClient);\n if (fromClient != null) {\n sendError(fromClient, error);\n }\n }\n\n private _onRequest(request: Request): void {\n logger.info(`接收到请求消息,并转发给目标客户端,request: ${request}.`);\n const toClient = this._clientSocketMap.get(request.toClient);\n if (toClient != null) {\n sendRequest(toClient, request);\n }\n }\n\n private _onResponse(response: Response): void {\n logger.info(`接收到响应消息,并转发给请求客户端,response: ${response}.`);\n const fromClient = this._clientSocketMap.get(response.fromClient);\n if (fromClient != null) {\n sendResponse(fromClient, response);\n }\n }\n\n private _onSessionSetupRequest(request: IpcSessionSetupRequest): void {\n const targetClient = request.targetClient;\n if (!this._validateClientIdentity(targetClient)) {\n logger.error(`目标客户端(${targetClient})不在白名单内!`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Match target client(${targetClient}) failed!`);\n return;\n }\n if (this._handleExistingTargetClient(request, targetClient)) {\n logger.info(`与目标客户端(${targetClient})会话连接中.`);\n return;\n }\n let queue = this._sessionSetupRequests.get(targetClient);\n if (queue == null) {\n queue = [];\n this._sessionSetupRequests.set(targetClient, queue);\n }\n queue.push(request);\n logger.info(`缓存目标客户端(${targetClient})唤醒动作至队列.`);\n if (queue.length > 1) {\n logger.info(`正在尝试唤醒目标客户端进程,追加回调至队列中,targetClient: ${targetClient}.`);\n return;\n }\n if (request.autoLaunch) {\n logger.info(`尝试唤醒目标客户端(${targetClient}).`);\n this._wakeUpTargetClient(targetClient);\n } else {\n logger.info(`不尝试唤醒目标客户端(${targetClient}),直接返回失败.`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Target client(${targetClient}) was dead, and wake up is disabled!`);\n }\n }\n\n private _onPing(_ping: Ping): void {\n logger.info('接收到 Ping 消息');\n }\n\n private _onHandshake(handshake: Handshake, client: SerialMessageChannel): void {\n if (handshake.magic !== Handshake.ipcMagic) {\n logger.warn(`收到未知握手魔数(${handshake.magic}),忽略本次握手请求,可能是其他服务误连.`);\n return;\n }\n if (handshake.role !== Handshake.clientRole) {\n logger.warn(`收到非 client 角色的握手(${handshake.role}),忽略本次握手请求.`);\n return;\n }\n const ack = new Handshake(\n handshake.clientName,\n Handshake.ipcMagic,\n Handshake.serverRole,\n Handshake.ipcVersion,\n );\n sendHandshake(client, ack);\n logger.info(`完成与客户端的握手确认,clientName: ${ack.clientName}, magic: ${ack.magic}, version: ${ack.version}`);\n }\n\n private _validateClientIdentity(clientName: string): boolean {\n const isValid = this._clientIdentityManager.getClientIdentity(clientName) != null;\n if (!isValid) {\n logger.fatal(`客户端(${clientName})不在白名单中,可能存在非法访问!`);\n }\n return isValid;\n }\n\n private _handleExistingTargetClient(request: IpcSessionSetupRequest, targetClient: string): boolean {\n const targetSocket = this._clientSocketMap.get(targetClient);\n if (targetSocket != null) {\n try {\n sendPing(targetSocket, new Ping(request.sourceClient));\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.success, `Connecting with target client(${targetClient})!`);\n return true;\n } catch (e) {\n logger.error(`Ping target client(${targetClient}) 失败!`);\n }\n }\n return false;\n }\n\n private async _wakeUpTargetClient(targetClient: string): Promise<void> {\n const clientIdentity = this._clientIdentityManager.getClientIdentity(targetClient);\n if (clientIdentity == null) {\n logger.fatal('唤醒目标客户端,白名单校验失败!');\n return;\n }\n if (this._wakeAppInterceptor != null && this._wakeAppInterceptor(clientIdentity) === true) {\n logger.info(`自定义方式唤醒目标客户端(${targetClient}).`);\n } else {\n logger.info(`默认方式唤醒目标客户端(${targetClient}).`);\n try {\n const appLauncher = PlatformAppLauncherFactory.create({\n appIdentifier: clientIdentity.appLaunchIdentifier,\n appInstallationPath: clientIdentity.appInstallationPath,\n });\n if (await appLauncher.isAppRunning()) {\n logger.warn(`目标客户端(${targetClient})处于存活态,等待注册!`);\n } else {\n logger.info(`尝试唤醒目标客户端(${targetClient})!`);\n await appLauncher.launchApp();\n }\n } catch (e) {\n logger.fatal(`唤醒目标客户端发生异常:${String(e)}!`);\n }\n }\n let timer = this._timerMap.get(targetClient);\n if (timer == null) {\n timer = setTimeout(() => {\n logger.error(`唤醒目标客户端(${targetClient})超时`);\n const queue = this._sessionSetupRequests.get(targetClient);\n this._sessionSetupRequests.delete(targetClient);\n this._timerMap.delete(targetClient);\n if (queue != null) {\n for (const req of queue) {\n this._sendSessionSetupResponse(req, IpcSessionSetupResponse.failure, `Target client(${targetClient}) register time out!`);\n }\n } else {\n logger.error('需要与目标客户端建立会话的发起端队列为空!');\n }\n }, 20_000);\n this._timerMap.set(targetClient, timer);\n }\n }\n\n private _sendSessionSetupResponse(request: IpcSessionSetupRequest, result: number, message: string): void {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n result,\n message,\n undefined,\n );\n const sourceSocket = this._clientSocketMap.get(request.sourceClient);\n if (sourceSocket != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建结果${result === IpcSessionSetupResponse.success ? '成功.' : '失败!'}`);\n sendSessionSetupResponse(sourceSocket, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n\n private _cancelClientTimer(clientName: string): void {\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n }\n\n private _processSessionSetupRequests(clientName: string): void {\n const queue = this._sessionSetupRequests.get(clientName);\n this._sessionSetupRequests.delete(clientName);\n if (queue != null) {\n for (const request of queue) {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n IpcSessionSetupResponse.success,\n 'Target client register success!',\n undefined,\n );\n const sourceClient = this._clientSocketMap.get(request.sourceClient);\n if (sourceClient != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建成功.`);\n sendSessionSetupResponse(sourceClient, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n }\n }\n}\n"]}
@@ -84,6 +84,7 @@ class RealMoonBridgeIpcServer {
84
84
  var _a, _b, _c;
85
85
  return (_c = (_b = (_a = this._webSocketServer) == null ? void 0 : _a.serverAddressInfo) == null ? void 0 : _b.port) != null ? _c : void 0;
86
86
  }
87
+ // PRIVATE METHODS
87
88
  _addClient(clientIdentity, client) {
88
89
  const clientName = clientIdentity.clientName;
89
90
  const clientAddress = this._getClientAddress(client);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.ts"],"names":["_a"],"mappings":"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","file":"moonbridge_ipc_server.internal.mjs","sourcesContent":["/**\n * MoonBridge IPC 服务器实现类\n *\n * 该类用于管理 IPC 服务器,包括启动服务器、处理客户端连接和消息等功能。\n */\n\nimport type { SerialMessageChannel } from '../../general/transport/interface/serial_message_channel';\nimport {\n sendResponse,\n sendRequest,\n sendEvent,\n sendError,\n sendPing,\n sendHandshake,\n sendSessionSetupResponse,\n} from '../../general/transport/interface/serial_message_channel_extension';\nimport { WebSocketServer } from '../../general/transport/websocket/websocket_server';\nimport { IpcMessageDecoder } from '../../general/encode/ipc_message_decoder';\nimport { MessageType } from '../../general/message/constants/message_types';\nimport { Handshake } from '../../general/message/handshake';\nimport { IpcSessionSetupRequest, IpcSessionSetupResponse } from '../../general/message/session_setup';\nimport { PlatformAppLauncherFactory } from '../../general/app_launch/platform_app_launcher';\nimport type { WebSocketServerEndpoint } from '../../general/config/websocket_server_endpoint';\nimport type {\n MoonBridgeIpcServer,\n WakeAppInterceptor,\n DisconnectedCallback,\n MessagePreprocessor,\n OnMessageReceived,\n} from '../moonbridge_ipc_server';\nimport type { ClientIdentity, ClientIdentityProvider } from '../credential/client_identity';\nimport { ClientIdentityManager } from './identity/client_identity_manager';\nimport type { Registration } from '../../general/message/registration';\nimport type { Unregistration } from '../../general/message/unregistration';\nimport type { Event } from '../../general/message/event';\nimport type { Error } from '../../general/message/error';\nimport type { Request } from '../../general/message/request';\nimport type { Response } from '../../general/message/response';\nimport { Ping } from '../../general/message/ping';\nimport { logger } from '../../utils/logger';\n\nexport class RealMoonBridgeIpcServer implements MoonBridgeIpcServer {\n private readonly _serverName: string;\n private readonly _wakeAppInterceptor?: WakeAppInterceptor;\n private readonly _onClientDisconnected?: DisconnectedCallback;\n private readonly _messagePreprocessor?: MessagePreprocessor;\n private readonly _onMessageReceived?: OnMessageReceived;\n private readonly _webSocketServerEndpoint?: WebSocketServerEndpoint;\n\n private readonly _clientSocketMap = new Map<string, SerialMessageChannel>();\n private readonly _addressToClientNameMap = new Map<string, string>();\n private readonly _clientIdentityManager = new ClientIdentityManager();\n private readonly _timerMap = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly _sessionSetupRequests = new Map<string, IpcSessionSetupRequest[]>();\n\n private _webSocketServer?: WebSocketServer;\n\n constructor(\n serverName: string,\n webSocketServerEndpoint?: WebSocketServerEndpoint,\n wakeAppInterceptor?: WakeAppInterceptor,\n clientIdentityProviders?: ClientIdentityProvider[],\n onClientDisconnected?: DisconnectedCallback,\n messagePreprocessor?: MessagePreprocessor,\n onMessageReceived?: OnMessageReceived,\n ) {\n this._serverName = serverName;\n this._webSocketServerEndpoint = webSocketServerEndpoint;\n this._wakeAppInterceptor = wakeAppInterceptor;\n this._onClientDisconnected = onClientDisconnected;\n this._messagePreprocessor = messagePreprocessor;\n this._onMessageReceived = onMessageReceived;\n\n const providers = clientIdentityProviders ?? [];\n for (const p of providers) {\n this._clientIdentityManager.addClientIdentityProvider(p);\n }\n }\n\n get serverName(): string {\n return this._serverName;\n }\n\n async start(): Promise<boolean> {\n const onClientConnected = (client: SerialMessageChannel) => {\n let clientName = this._getClientName(client) ?? '';\n client.subscribe(\n (message: string) => {\n this._onMessage(client, message);\n if (clientName === '') {\n clientName = this._getClientName(client) ?? '';\n }\n },\n {\n onError: (err) => {\n logger.error(`客户端错误: ${String(err)}`);\n },\n onDone: () => {\n logger.error(`客户端 ${clientName} 断开连接`);\n this._removeClient(client);\n this._onClientDisconnected?.(clientName);\n },\n cancelOnError: false,\n },\n );\n };\n\n if (this._webSocketServerEndpoint != null) {\n const ep = this._webSocketServerEndpoint;\n const portList =\n ep.portCandidateRule != null\n ? ep.portCandidateRule.toOrderedPortList()\n : [ep.port];\n\n for (const port of portList) {\n const server = new WebSocketServer(ep.address, port, { path: ep.path });\n if (await server.startServer(onClientConnected)) {\n this._webSocketServer = server;\n return true;\n }\n }\n }\n\n this._webSocketServer = undefined;\n return false;\n }\n\n async stop(): Promise<void> {\n if (this._webSocketServer != undefined) {\n await this._webSocketServer.close();\n this._webSocketServer = undefined;\n }\n }\n\n get serverAddress(): string | undefined {\n return this._webSocketServer?.serverAddressInfo?.ip ?? undefined;\n }\n\n get serverPort(): number | undefined {\n return this._webSocketServer?.serverAddressInfo?.port ?? undefined;\n }\n\n private _addClient(clientIdentity: ClientIdentity, client: SerialMessageChannel): void {\n const clientName = clientIdentity.clientName;\n const clientAddress = this._getClientAddress(client);\n this._clientSocketMap.set(clientName, client);\n this._addressToClientNameMap.set(clientAddress, clientName);\n logger.info(`客户端已连接: ${clientName}`);\n }\n\n private _removeClient(client: SerialMessageChannel): void {\n const clientAddress = this._getClientAddress(client);\n const clientName = this._addressToClientNameMap.get(clientAddress);\n this._addressToClientNameMap.delete(clientAddress);\n if (clientName != null) {\n this._clientSocketMap.delete(clientName);\n }\n logger.info(`客户端已断开: ${clientName}`);\n }\n\n private _getClientName(client: SerialMessageChannel): string | undefined {\n const clientAddress = this._getClientAddress(client);\n return this._addressToClientNameMap.get(clientAddress);\n }\n\n private _getClientAddress(client: SerialMessageChannel): string {\n return `${client.remoteAddress}:${client.remotePort}`;\n }\n\n private _onMessage(client: SerialMessageChannel, message: string): void {\n logger.info(`服务端接收到消息,message: ${message}`);\n\n const reply: (msg: string) => Promise<boolean> = (msg) => client.sendMessage(msg);\n if (this._messagePreprocessor?.(reply, message) === true) {\n return;\n }\n\n let messageType = MessageType.UNKNOWN;\n\n const messageTypeMatch = message.match(/\"type\"\\s*:\\s*\"([^\"]+)\"/);\n const actualType = messageTypeMatch ? messageTypeMatch[1] : null;\n\n if (actualType === MessageType.REGISTRATION) {\n messageType = MessageType.REGISTRATION;\n this._onRegistration(client, IpcMessageDecoder.decodeRegistration(message));\n } else if (actualType === MessageType.UNREGISTRATION) {\n messageType = MessageType.UNREGISTRATION;\n this._onUnregistration(IpcMessageDecoder.decodeUnregistration(message));\n } else if (actualType === MessageType.EVENT) {\n messageType = MessageType.EVENT;\n this._onEvent(IpcMessageDecoder.decodeEvent(message));\n } else if (actualType === MessageType.ERROR) {\n messageType = MessageType.ERROR;\n this._onError(IpcMessageDecoder.decodeError(message));\n } else if (actualType === MessageType.REQUEST) {\n messageType = MessageType.REQUEST;\n this._onRequest(IpcMessageDecoder.decodeRequest(message));\n } else if (actualType === MessageType.RESPONSE) {\n messageType = MessageType.RESPONSE;\n this._onResponse(IpcMessageDecoder.decodeResponse(message));\n } else if (actualType === MessageType.SESSION_SETUP_REQUEST) {\n messageType = MessageType.SESSION_SETUP_REQUEST;\n this._onSessionSetupRequest(IpcMessageDecoder.decodeSessionSetupRequest(message));\n } else if (actualType === MessageType.SESSION_SETUP_RESPONSE) {\n // SESSION_SETUP_RESPONSE 单独处理,不设置 messageType 以避免重复处理\n // 这里可以添加相关处理逻辑,如果需要的话\n } else if (actualType === MessageType.HANDSHAKE) {\n messageType = MessageType.HANDSHAKE;\n this._onHandshake(IpcMessageDecoder.decodeHandshake(message), client);\n } else if (actualType === MessageType.PING) {\n messageType = MessageType.PING;\n this._onPing(IpcMessageDecoder.decodePing(message));\n } else {\n logger.error(`无法识别的消息类型: ${message}`);\n }\n\n const clientName = this._getClientName(client) ?? '';\n this._onMessageReceived?.(clientName, messageType, message);\n }\n\n private _onRegistration(client: SerialMessageChannel, registration: Registration): void {\n const clientName = registration.clientName;\n if (!this._validateClientIdentity(clientName)) {\n logger.error(`客户端(${clientName})不在白名单中,注册失败.`);\n return;\n }\n const identity = this._clientIdentityManager.getClientIdentity(clientName)!;\n this._addClient(identity, client);\n this._cancelClientTimer(clientName);\n this._processSessionSetupRequests(clientName);\n logger.info(`客户端(${clientName})注册成功.`);\n }\n\n private _onUnregistration(unregistration: Unregistration): void {\n const clientName = unregistration.clientName;\n this._clientSocketMap.delete(clientName);\n this._sessionSetupRequests.delete(clientName);\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n logger.info(`客户端(${clientName})注销.`);\n }\n\n private _onEvent(event: Event): void {\n const allClients = [...this._clientSocketMap.values()];\n for (const client of allClients) {\n sendEvent(client, event);\n }\n logger.info(`接收到 EventBus 事件,并转发给处于连接状态的所有客户端,event: ${event}.`);\n }\n\n private _onError(error: Error): void {\n logger.info(`接收到错误消息,并转发给请求客户端,error: ${error}.`);\n const fromClient = this._clientSocketMap.get(error.fromClient);\n if (fromClient != null) {\n sendError(fromClient, error);\n }\n }\n\n private _onRequest(request: Request): void {\n logger.info(`接收到请求消息,并转发给目标客户端,request: ${request}.`);\n const toClient = this._clientSocketMap.get(request.toClient);\n if (toClient != null) {\n sendRequest(toClient, request);\n }\n }\n\n private _onResponse(response: Response): void {\n logger.info(`接收到响应消息,并转发给请求客户端,response: ${response}.`);\n const fromClient = this._clientSocketMap.get(response.fromClient);\n if (fromClient != null) {\n sendResponse(fromClient, response);\n }\n }\n\n private _onSessionSetupRequest(request: IpcSessionSetupRequest): void {\n const targetClient = request.targetClient;\n if (!this._validateClientIdentity(targetClient)) {\n logger.error(`目标客户端(${targetClient})不在白名单内!`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Match target client(${targetClient}) failed!`);\n return;\n }\n if (this._handleExistingTargetClient(request, targetClient)) {\n logger.info(`与目标客户端(${targetClient})会话连接中.`);\n return;\n }\n let queue = this._sessionSetupRequests.get(targetClient);\n if (queue == null) {\n queue = [];\n this._sessionSetupRequests.set(targetClient, queue);\n }\n queue.push(request);\n logger.info(`缓存目标客户端(${targetClient})唤醒动作至队列.`);\n if (queue.length > 1) {\n logger.info(`正在尝试唤醒目标客户端进程,追加回调至队列中,targetClient: ${targetClient}.`);\n return;\n }\n if (request.autoLaunch) {\n logger.info(`尝试唤醒目标客户端(${targetClient}).`);\n this._wakeUpTargetClient(targetClient);\n } else {\n logger.info(`不尝试唤醒目标客户端(${targetClient}),直接返回失败.`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Target client(${targetClient}) was dead, and wake up is disabled!`);\n }\n }\n\n private _onPing(_ping: Ping): void {\n logger.info('接收到 Ping 消息');\n }\n\n private _onHandshake(handshake: Handshake, client: SerialMessageChannel): void {\n if (handshake.magic !== Handshake.ipcMagic) {\n logger.warn(`收到未知握手魔数(${handshake.magic}),忽略本次握手请求,可能是其他服务误连.`);\n return;\n }\n if (handshake.role !== Handshake.clientRole) {\n logger.warn(`收到非 client 角色的握手(${handshake.role}),忽略本次握手请求.`);\n return;\n }\n const ack = new Handshake(\n handshake.clientName,\n Handshake.ipcMagic,\n Handshake.serverRole,\n Handshake.ipcVersion,\n );\n sendHandshake(client, ack);\n logger.info(`完成与客户端的握手确认,clientName: ${ack.clientName}, magic: ${ack.magic}, version: ${ack.version}`);\n }\n\n private _validateClientIdentity(clientName: string): boolean {\n const isValid = this._clientIdentityManager.getClientIdentity(clientName) != null;\n if (!isValid) {\n logger.fatal(`客户端(${clientName})不在白名单中,可能存在非法访问!`);\n }\n return isValid;\n }\n\n private _handleExistingTargetClient(request: IpcSessionSetupRequest, targetClient: string): boolean {\n const targetSocket = this._clientSocketMap.get(targetClient);\n if (targetSocket != null) {\n try {\n sendPing(targetSocket, new Ping(request.sourceClient));\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.success, `Connecting with target client(${targetClient})!`);\n return true;\n } catch (e) {\n logger.error(`Ping target client(${targetClient}) 失败!`);\n }\n }\n return false;\n }\n\n private async _wakeUpTargetClient(targetClient: string): Promise<void> {\n const clientIdentity = this._clientIdentityManager.getClientIdentity(targetClient);\n if (clientIdentity == null) {\n logger.fatal('唤醒目标客户端,白名单校验失败!');\n return;\n }\n if (this._wakeAppInterceptor != null && this._wakeAppInterceptor(clientIdentity) === true) {\n logger.info(`自定义方式唤醒目标客户端(${targetClient}).`);\n } else {\n logger.info(`默认方式唤醒目标客户端(${targetClient}).`);\n try {\n const appLauncher = PlatformAppLauncherFactory.create({\n appIdentifier: clientIdentity.appLaunchIdentifier,\n appInstallationPath: clientIdentity.appInstallationPath,\n });\n if (await appLauncher.isAppRunning()) {\n logger.warn(`目标客户端(${targetClient})处于存活态,等待注册!`);\n } else {\n logger.info(`尝试唤醒目标客户端(${targetClient})!`);\n await appLauncher.launchApp();\n }\n } catch (e) {\n logger.fatal(`唤醒目标客户端发生异常:${String(e)}!`);\n }\n }\n let timer = this._timerMap.get(targetClient);\n if (timer == null) {\n timer = setTimeout(() => {\n logger.error(`唤醒目标客户端(${targetClient})超时`);\n const queue = this._sessionSetupRequests.get(targetClient);\n this._sessionSetupRequests.delete(targetClient);\n this._timerMap.delete(targetClient);\n if (queue != null) {\n for (const req of queue) {\n this._sendSessionSetupResponse(req, IpcSessionSetupResponse.failure, `Target client(${targetClient}) register time out!`);\n }\n } else {\n logger.error('需要与目标客户端建立会话的发起端队列为空!');\n }\n }, 20_000);\n this._timerMap.set(targetClient, timer);\n }\n }\n\n private _sendSessionSetupResponse(request: IpcSessionSetupRequest, result: number, message: string): void {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n result,\n message,\n undefined,\n );\n const sourceSocket = this._clientSocketMap.get(request.sourceClient);\n if (sourceSocket != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建结果${result === IpcSessionSetupResponse.success ? '成功.' : '失败!'}`);\n sendSessionSetupResponse(sourceSocket, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n\n private _cancelClientTimer(clientName: string): void {\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n }\n\n private _processSessionSetupRequests(clientName: string): void {\n const queue = this._sessionSetupRequests.get(clientName);\n this._sessionSetupRequests.delete(clientName);\n if (queue != null) {\n for (const request of queue) {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n IpcSessionSetupResponse.success,\n 'Target client register success!',\n undefined,\n );\n const sourceClient = this._clientSocketMap.get(request.sourceClient);\n if (sourceClient != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建成功.`);\n sendSessionSetupResponse(sourceClient, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/moonbridge-ipc/server/internal/moonbridge_ipc_server.internal.ts"],"names":["_a"],"mappings":";;;;;;;;;;;AAyCO,MAAM,uBAAA,CAAuD;AAAA,EAgBlE,YACE,UAAA,EACA,uBAAA,EACA,oBACA,uBAAA,EACA,oBAAA,EACA,qBACA,iBAAA,EACA;AAhBF,IAAA,IAAA,CAAiB,gBAAA,uBAAuB,GAAA,EAAkC;AAC1E,IAAA,IAAA,CAAiB,uBAAA,uBAA8B,GAAA,EAAoB;AACnE,IAAA,IAAA,CAAiB,sBAAA,GAAyB,IAAI,qBAAA,EAAsB;AACpE,IAAA,IAAA,CAAiB,SAAA,uBAAgB,GAAA,EAA2C;AAC5E,IAAA,IAAA,CAAiB,qBAAA,uBAA4B,GAAA,EAAsC;AAajF,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,wBAAA,GAA2B,uBAAA;AAChC,IAAA,IAAA,CAAK,mBAAA,GAAsB,kBAAA;AAC3B,IAAA,IAAA,CAAK,qBAAA,GAAwB,oBAAA;AAC7B,IAAA,IAAA,CAAK,oBAAA,GAAuB,mBAAA;AAC5B,IAAA,IAAA,CAAK,kBAAA,GAAqB,iBAAA;AAE1B,IAAA,MAAM,SAAA,GAAY,4DAA2B,EAAC;AAC9C,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,IAAA,CAAK,sBAAA,CAAuB,0BAA0B,CAAC,CAAA;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,IAAI,UAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAM,KAAA,GAA0B;AAC9B,IAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,KAAiC;AApFhE,MAAA,IAAA,EAAA;AAqFM,MAAA,IAAI,UAAA,GAAA,CAAa,EAAA,GAAA,IAAA,CAAK,cAAA,CAAe,MAAM,MAA1B,IAAA,GAAA,EAAA,GAA+B,EAAA;AAChD,MAAA,MAAA,CAAO,SAAA;AAAA,QACL,CAAC,OAAA,KAAoB;AAvF7B,UAAA,IAAAA,GAAAA;AAwFU,UAAA,IAAA,CAAK,UAAA,CAAW,QAAQ,OAAO,CAAA;AAC/B,UAAA,IAAI,eAAe,EAAA,EAAI;AACrB,YAAA,UAAA,GAAA,CAAaA,MAAA,IAAA,CAAK,cAAA,CAAe,MAAM,CAAA,KAA1B,OAAAA,GAAAA,GAA+B,EAAA;AAAA,UAC9C;AAAA,QACF,CAAA;AAAA,QACA;AAAA,UACE,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,YAAA,MAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,UACtC,CAAA;AAAA,UACA,QAAQ,MAAM;AAjGxB,YAAA,IAAAA,GAAAA;AAkGY,YAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mBAAA,EAAO,UAAU,CAAA,yBAAA,CAAO,CAAA;AACrC,YAAA,IAAA,CAAK,cAAc,MAAM,CAAA;AACzB,YAAA,CAAAA,GAAAA,GAAA,IAAA,CAAK,qBAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,IAAA,IAAA,CAAA,IAAA,EAA6B,UAAA,CAAA;AAAA,UAC/B,CAAA;AAAA,UACA,aAAA,EAAe;AAAA;AACjB,OACF;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,4BAA4B,IAAA,EAAM;AACzC,MAAA,MAAM,KAAK,IAAA,CAAK,wBAAA;AAChB,MAAA,MAAM,QAAA,GACJ,EAAA,CAAG,iBAAA,IAAqB,IAAA,GACpB,EAAA,CAAG,kBAAkB,iBAAA,EAAkB,GACvC,CAAC,EAAA,CAAG,IAAI,CAAA;AAEd,MAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC3B,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,EAAA,CAAG,OAAA,EAAS,MAAM,EAAE,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,CAAA;AACtE,QAAA,IAAI,MAAM,MAAA,CAAO,WAAA,CAAY,iBAAiB,CAAA,EAAG;AAC/C,UAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA;AACxB,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI,IAAA,CAAK,oBAAoB,MAAA,EAAW;AACtC,MAAA,MAAM,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAClC,MAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,IAAI,aAAA,GAAoC;AAtI1C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuII,IAAA,OAAA,CAAO,sBAAK,gBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,iBAAA,KAAvB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0C,OAA1C,IAAA,GAAA,EAAA,GAAgD,MAAA;AAAA,EACzD;AAAA,EAEA,IAAI,UAAA,GAAiC;AA1IvC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2II,IAAA,OAAA,CAAO,sBAAK,gBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,iBAAA,KAAvB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0C,SAA1C,IAAA,GAAA,EAAA,GAAkD,MAAA;AAAA,EAC3D;AAAA;AAAA,EAIQ,UAAA,CAAW,gBAAgC,MAAA,EAAoC;AACrF,IAAA,MAAM,aAAa,cAAA,CAAe,UAAA;AAClC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,MAAM,CAAA;AACnD,IAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,UAAA,EAAY,MAAM,CAAA;AAC5C,IAAA,IAAA,CAAK,uBAAA,CAAwB,GAAA,CAAI,aAAA,EAAe,UAAU,CAAA;AAC1D,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,sCAAA,EAAW,UAAU,CAAA,CAAE,CAAA;AAAA,EACrC;AAAA,EAEQ,cAAc,MAAA,EAAoC;AACxD,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,MAAM,CAAA;AACnD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,uBAAA,CAAwB,GAAA,CAAI,aAAa,CAAA;AACjE,IAAA,IAAA,CAAK,uBAAA,CAAwB,OAAO,aAAa,CAAA;AACjD,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAAA,IACzC;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,sCAAA,EAAW,UAAU,CAAA,CAAE,CAAA;AAAA,EACrC;AAAA,EAEQ,eAAe,MAAA,EAAkD;AACvE,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,iBAAA,CAAkB,MAAM,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,GAAA,CAAI,aAAa,CAAA;AAAA,EACvD;AAAA,EAEQ,kBAAkB,MAAA,EAAsC;AAC9D,IAAA,OAAO,CAAA,EAAG,MAAA,CAAO,aAAa,CAAA,CAAA,EAAI,OAAO,UAAU,CAAA,CAAA;AAAA,EACrD;AAAA,EAEQ,UAAA,CAAW,QAA8B,OAAA,EAAuB;AA3K1E,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA4KI,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,+DAAA,EAAqB,OAAO,CAAA,CAAE,CAAA;AAE1C,IAAA,MAAM,KAAA,GAA2C,CAAC,GAAA,KAAQ,MAAA,CAAO,YAAY,GAAG,CAAA;AAChF,IAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,oBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAA4B,KAAA,EAAO,cAAa,IAAA,EAAM;AACxD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,cAAc,WAAA,CAAY,OAAA;AAE9B,IAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,KAAA,CAAM,wBAAwB,CAAA;AAC/D,IAAA,MAAM,UAAA,GAAa,gBAAA,GAAmB,gBAAA,CAAiB,CAAC,CAAA,GAAI,IAAA;AAE5D,IAAA,IAAI,UAAA,KAAe,YAAY,YAAA,EAAc;AAC3C,MAAA,WAAA,GAAc,WAAA,CAAY,YAAA;AAC1B,MAAA,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAQ,iBAAA,CAAkB,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC5E,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,cAAA,EAAgB;AACpD,MAAA,WAAA,GAAc,WAAA,CAAY,cAAA;AAC1B,MAAA,IAAA,CAAK,iBAAA,CAAkB,iBAAA,CAAkB,oBAAA,CAAqB,OAAO,CAAC,CAAA;AAAA,IACxE,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,KAAA,EAAO;AAC3C,MAAA,WAAA,GAAc,WAAA,CAAY,KAAA;AAC1B,MAAA,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,IACtD,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,KAAA,EAAO;AAC3C,MAAA,WAAA,GAAc,WAAA,CAAY,KAAA;AAC1B,MAAA,IAAA,CAAK,QAAA,CAAS,iBAAA,CAAkB,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,IACtD,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,OAAA,EAAS;AAC7C,MAAA,WAAA,GAAc,WAAA,CAAY,OAAA;AAC1B,MAAA,IAAA,CAAK,UAAA,CAAW,iBAAA,CAAkB,aAAA,CAAc,OAAO,CAAC,CAAA;AAAA,IAC1D,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,QAAA,EAAU;AAC9C,MAAA,WAAA,GAAc,WAAA,CAAY,QAAA;AAC1B,MAAA,IAAA,CAAK,WAAA,CAAY,iBAAA,CAAkB,cAAA,CAAe,OAAO,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,qBAAA,EAAuB;AAC3D,MAAA,WAAA,GAAc,WAAA,CAAY,qBAAA;AAC1B,MAAA,IAAA,CAAK,sBAAA,CAAuB,iBAAA,CAAkB,yBAAA,CAA0B,OAAO,CAAC,CAAA;AAAA,IAClF,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,sBAAA,EAAwB,CAG9D,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,SAAA,EAAW;AAC/C,MAAA,WAAA,GAAc,WAAA,CAAY,SAAA;AAC1B,MAAA,IAAA,CAAK,YAAA,CAAa,iBAAA,CAAkB,eAAA,CAAgB,OAAO,GAAG,MAAM,CAAA;AAAA,IACtE,CAAA,MAAA,IAAW,UAAA,KAAe,WAAA,CAAY,IAAA,EAAM;AAC1C,MAAA,WAAA,GAAc,WAAA,CAAY,IAAA;AAC1B,MAAA,IAAA,CAAK,OAAA,CAAQ,iBAAA,CAAkB,UAAA,CAAW,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,wDAAA,EAAc,OAAO,CAAA,CAAE,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,UAAA,GAAA,CAAa,EAAA,GAAA,IAAA,CAAK,cAAA,CAAe,MAAM,MAA1B,IAAA,GAAA,EAAA,GAA+B,EAAA;AAClD,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,kBAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAA0B,UAAA,EAAY,WAAA,EAAa,OAAA,CAAA;AAAA,EACrD;AAAA,EAEQ,eAAA,CAAgB,QAA8B,YAAA,EAAkC;AACtF,IAAA,MAAM,aAAa,YAAA,CAAa,UAAA;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,uBAAA,CAAwB,UAAU,CAAA,EAAG;AAC7C,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,wBAAA,EAAO,UAAU,CAAA,yEAAA,CAAe,CAAA;AAC7C,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,sBAAA,CAAuB,iBAAA,CAAkB,UAAU,CAAA;AACzE,IAAA,IAAA,CAAK,UAAA,CAAW,UAAU,MAAM,CAAA;AAChC,IAAA,IAAA,CAAK,mBAAmB,UAAU,CAAA;AAClC,IAAA,IAAA,CAAK,6BAA6B,UAAU,CAAA;AAC5C,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,wBAAA,EAAO,UAAU,CAAA,+BAAA,CAAQ,CAAA;AAAA,EACvC;AAAA,EAEQ,kBAAkB,cAAA,EAAsC;AAC9D,IAAA,MAAM,aAAa,cAAA,CAAe,UAAA;AAClC,IAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,UAAU,CAAA;AACvC,IAAA,IAAA,CAAK,qBAAA,CAAsB,OAAO,UAAU,CAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AAC3C,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,UAAU,CAAA;AAAA,IAClC;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,wBAAA,EAAO,UAAU,CAAA,mBAAA,CAAM,CAAA;AAAA,EACrC;AAAA,EAEQ,SAAS,KAAA,EAAoB;AACnC,IAAA,MAAM,aAAa,CAAC,GAAG,IAAA,CAAK,gBAAA,CAAiB,QAAQ,CAAA;AACrD,IAAA,KAAA,MAAW,UAAU,UAAA,EAAY;AAC/B,MAAA,SAAA,CAAU,QAAQ,KAAK,CAAA;AAAA,IACzB;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,2JAAA,EAA2C,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACjE;AAAA,EAEQ,SAAS,KAAA,EAAoB;AACnC,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,mHAAA,EAA4B,KAAK,CAAA,CAAA,CAAG,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAM,UAAU,CAAA;AAC7D,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,SAAA,CAAU,YAAY,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF;AAAA,EAEQ,WAAW,OAAA,EAAwB;AACzC,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,qHAAA,EAA8B,OAAO,CAAA,CAAA,CAAG,CAAA;AACpD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAC3D,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,WAAA,CAAY,UAAU,OAAO,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,YAAY,QAAA,EAA0B;AAC5C,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,sHAAA,EAA+B,QAAQ,CAAA,CAAA,CAAG,CAAA;AACtD,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,SAAS,UAAU,CAAA;AAChE,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,YAAA,CAAa,YAAY,QAAQ,CAAA;AAAA,IACnC;AAAA,EACF;AAAA,EAEQ,uBAAuB,OAAA,EAAuC;AACpE,IAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAC7B,IAAA,IAAI,CAAC,IAAA,CAAK,uBAAA,CAAwB,YAAY,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,+BAAA,EAAS,YAAY,CAAA,sCAAA,CAAU,CAAA;AAC5C,MAAA,IAAA,CAAK,0BAA0B,OAAA,EAAS,uBAAA,CAAwB,OAAA,EAAS,CAAA,oBAAA,EAAuB,YAAY,CAAA,SAAA,CAAW,CAAA;AACvH,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,2BAAA,CAA4B,OAAA,EAAS,YAAY,CAAA,EAAG;AAC3D,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,qCAAA,EAAU,YAAY,CAAA,gCAAA,CAAS,CAAA;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,YAAY,CAAA;AACvD,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,KAAA,GAAQ,EAAC;AACT,MAAA,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA;AAAA,IACpD;AACA,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,2CAAA,EAAW,YAAY,CAAA,4CAAA,CAAW,CAAA;AAC9C,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,wJAAA,EAAwC,YAAY,CAAA,CAAA,CAAG,CAAA;AACnE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,uDAAA,EAAa,YAAY,CAAA,EAAA,CAAI,CAAA;AACzC,MAAA,IAAA,CAAK,oBAAoB,YAAY,CAAA;AAAA,IACvC,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,6DAAA,EAAc,YAAY,CAAA,4CAAA,CAAW,CAAA;AACjD,MAAA,IAAA,CAAK,0BAA0B,OAAA,EAAS,uBAAA,CAAwB,OAAA,EAAS,CAAA,cAAA,EAAiB,YAAY,CAAA,oCAAA,CAAsC,CAAA;AAAA,IAC9I;AAAA,EACF;AAAA,EAEQ,QAAQ,KAAA,EAAmB;AACjC,IAAA,MAAA,CAAO,KAAK,sCAAa,CAAA;AAAA,EAC3B;AAAA,EAEQ,YAAA,CAAa,WAAsB,MAAA,EAAoC;AAC7E,IAAA,IAAI,SAAA,CAAU,KAAA,KAAU,SAAA,CAAU,QAAA,EAAU;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,iDAAA,EAAY,SAAA,CAAU,KAAK,CAAA,oHAAA,CAAuB,CAAA;AAC9D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,IAAA,KAAS,SAAA,CAAU,UAAA,EAAY;AAC3C,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,yDAAA,EAAoB,SAAA,CAAU,IAAI,CAAA,wDAAA,CAAa,CAAA;AAC3D,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,IAAI,SAAA;AAAA,MACd,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU,QAAA;AAAA,MACV,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AACA,IAAA,aAAA,CAAc,QAAQ,GAAG,CAAA;AACzB,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,oFAAA,EAA2B,GAAA,CAAI,UAAU,CAAA,SAAA,EAAY,IAAI,KAAK,CAAA,WAAA,EAAc,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,EACvG;AAAA,EAEQ,wBAAwB,UAAA,EAA6B;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,sBAAA,CAAuB,iBAAA,CAAkB,UAAU,CAAA,IAAK,IAAA;AAC7E,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mBAAA,EAAO,UAAU,CAAA,4FAAA,CAAmB,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,2BAAA,CAA4B,SAAiC,YAAA,EAA+B;AAClG,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,YAAY,CAAA;AAC3D,IAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,YAAA,EAAc,IAAI,IAAA,CAAK,OAAA,CAAQ,YAAY,CAAC,CAAA;AACrD,QAAA,IAAA,CAAK,0BAA0B,OAAA,EAAS,uBAAA,CAAwB,OAAA,EAAS,CAAA,8BAAA,EAAiC,YAAY,CAAA,EAAA,CAAI,CAAA;AAC1H,QAAA,OAAO,IAAA;AAAA,MACT,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,YAAY,CAAA,eAAA,CAAO,CAAA;AAAA,MACxD;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAc,oBAAoB,YAAA,EAAqC;AACrE,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,sBAAA,CAAuB,iBAAA,CAAkB,YAAY,CAAA;AACjF,IAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,MAAA,MAAA,CAAO,MAAM,6FAAkB,CAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,mBAAA,IAAuB,IAAA,IAAQ,KAAK,mBAAA,CAAoB,cAAc,MAAM,IAAA,EAAM;AACzF,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,yEAAA,EAAgB,YAAY,CAAA,EAAA,CAAI,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,mEAAA,EAAe,YAAY,CAAA,EAAA,CAAI,CAAA;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,2BAA2B,MAAA,CAAO;AAAA,UACpD,eAAe,cAAA,CAAe,mBAAA;AAAA,UAC9B,qBAAqB,cAAA,CAAe;AAAA,SACrC,CAAA;AACD,QAAA,IAAI,MAAM,WAAA,CAAY,YAAA,EAAa,EAAG;AACpC,UAAA,MAAA,CAAO,IAAA,CAAK,CAAA,+BAAA,EAAS,YAAY,CAAA,8DAAA,CAAc,CAAA;AAAA,QACjD,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,IAAA,CAAK,CAAA,uDAAA,EAAa,YAAY,CAAA,EAAA,CAAI,CAAA;AACzC,UAAA,MAAM,YAAY,SAAA,EAAU;AAAA,QAC9B;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,wEAAA,EAAe,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,MAC1C;AAAA,IACF;AACA,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,YAAY,CAAA;AAC3C,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,KAAA,GAAQ,WAAW,MAAM;AACvB,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,2CAAA,EAAW,YAAY,CAAA,aAAA,CAAK,CAAA;AACzC,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,YAAY,CAAA;AACzD,QAAA,IAAA,CAAK,qBAAA,CAAsB,OAAO,YAAY,CAAA;AAC9C,QAAA,IAAA,CAAK,SAAA,CAAU,OAAO,YAAY,CAAA;AAClC,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,YAAA,IAAA,CAAK,0BAA0B,GAAA,EAAK,uBAAA,CAAwB,OAAA,EAAS,CAAA,cAAA,EAAiB,YAAY,CAAA,oBAAA,CAAsB,CAAA;AAAA,UAC1H;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,MAAM,2HAAuB,CAAA;AAAA,QACtC;AAAA,MACF,GAAG,GAAM,CAAA;AACT,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA;AAAA,IACxC;AAAA,EACF;AAAA,EAEQ,yBAAA,CAA0B,OAAA,EAAiC,MAAA,EAAgB,OAAA,EAAuB;AACxG,IAAA,MAAM,WAAW,IAAI,uBAAA;AAAA,MACnB,OAAA,CAAQ,YAAA;AAAA,MACR,OAAA,CAAQ,YAAA;AAAA,MACR,OAAA,CAAQ,UAAA;AAAA,MACR,MAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,QAAQ,YAAY,CAAA;AACnE,IAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,2CAAA,EAAW,OAAA,CAAQ,YAAY,CAAA,qCAAA,EAAU,WAAW,uBAAA,CAAwB,OAAA,GAAU,eAAA,GAAQ,eAAK,CAAA,CAAE,CAAA;AACjH,MAAA,wBAAA,CAAyB,cAAc,QAAQ,CAAA;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAA,CAAM,CAAA,4DAAA,EAAa,OAAA,CAAQ,YAAY,CAAA,6DAAA,CAAa,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA,EAEQ,mBAAmB,UAAA,EAA0B;AACnD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA;AAC3C,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,UAAU,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,6BAA6B,UAAA,EAA0B;AAC7D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,UAAU,CAAA;AACvD,IAAA,IAAA,CAAK,qBAAA,CAAsB,OAAO,UAAU,CAAA;AAC5C,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,QAAA,MAAM,WAAW,IAAI,uBAAA;AAAA,UACnB,OAAA,CAAQ,YAAA;AAAA,UACR,OAAA,CAAQ,YAAA;AAAA,UACR,OAAA,CAAQ,UAAA;AAAA,UACR,uBAAA,CAAwB,OAAA;AAAA,UACxB,iCAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,QAAQ,YAAY,CAAA;AACnE,QAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,UAAA,MAAA,CAAO,IAAA,CAAK,CAAA,2CAAA,EAAW,OAAA,CAAQ,YAAY,CAAA,sCAAA,CAAU,CAAA;AACrD,UAAA,wBAAA,CAAyB,cAAc,QAAQ,CAAA;AAAA,QACjD,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,KAAA,CAAM,CAAA,4DAAA,EAAa,OAAA,CAAQ,YAAY,CAAA,6DAAA,CAAa,CAAA;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF","file":"moonbridge_ipc_server.internal.mjs","sourcesContent":["/**\n * MoonBridge IPC 服务器实现类\n *\n * 该类用于管理 IPC 服务器,包括启动服务器、处理客户端连接和消息等功能。\n */\n\nimport type { SerialMessageChannel } from '../../general/transport/interface/serial_message_channel';\nimport {\n sendResponse,\n sendRequest,\n sendEvent,\n sendError,\n sendPing,\n sendHandshake,\n sendSessionSetupResponse,\n} from '../../general/transport/interface/serial_message_channel_extension';\nimport { WebSocketServer } from '../../general/transport/websocket/websocket_server';\nimport { IpcMessageDecoder } from '../../general/encode/ipc_message_decoder';\nimport { MessageType } from '../../general/message/constants/message_types';\nimport { Handshake } from '../../general/message/handshake';\nimport { IpcSessionSetupRequest, IpcSessionSetupResponse } from '../../general/message/session_setup';\nimport { PlatformAppLauncherFactory } from '../../general/app_launch/platform_app_launcher';\nimport type { WebSocketServerEndpoint } from '../../general/config/websocket_server_endpoint';\nimport type {\n MoonBridgeIpcServer,\n WakeAppInterceptor,\n DisconnectedCallback,\n MessagePreprocessor,\n OnMessageReceived,\n} from '../moonbridge_ipc_server';\nimport type { ClientIdentity, ClientIdentityProvider } from '../credential/client_identity';\nimport { ClientIdentityManager } from './identity/client_identity_manager';\nimport type { Registration } from '../../general/message/registration';\nimport type { Unregistration } from '../../general/message/unregistration';\nimport type { Event } from '../../general/message/event';\nimport type { Error } from '../../general/message/error';\nimport type { Request } from '../../general/message/request';\nimport type { Response } from '../../general/message/response';\nimport { Ping } from '../../general/message/ping';\nimport { logger } from '../../utils/logger';\n\nexport class RealMoonBridgeIpcServer implements MoonBridgeIpcServer {\n private readonly _serverName: string;\n private readonly _wakeAppInterceptor?: WakeAppInterceptor;\n private readonly _onClientDisconnected?: DisconnectedCallback;\n private readonly _messagePreprocessor?: MessagePreprocessor;\n private readonly _onMessageReceived?: OnMessageReceived;\n private readonly _webSocketServerEndpoint?: WebSocketServerEndpoint;\n\n private readonly _clientSocketMap = new Map<string, SerialMessageChannel>();\n private readonly _addressToClientNameMap = new Map<string, string>();\n private readonly _clientIdentityManager = new ClientIdentityManager();\n private readonly _timerMap = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly _sessionSetupRequests = new Map<string, IpcSessionSetupRequest[]>();\n\n private _webSocketServer?: WebSocketServer;\n\n constructor(\n serverName: string,\n webSocketServerEndpoint?: WebSocketServerEndpoint,\n wakeAppInterceptor?: WakeAppInterceptor,\n clientIdentityProviders?: ClientIdentityProvider[],\n onClientDisconnected?: DisconnectedCallback,\n messagePreprocessor?: MessagePreprocessor,\n onMessageReceived?: OnMessageReceived,\n ) {\n this._serverName = serverName;\n this._webSocketServerEndpoint = webSocketServerEndpoint;\n this._wakeAppInterceptor = wakeAppInterceptor;\n this._onClientDisconnected = onClientDisconnected;\n this._messagePreprocessor = messagePreprocessor;\n this._onMessageReceived = onMessageReceived;\n\n const providers = clientIdentityProviders ?? [];\n for (const p of providers) {\n this._clientIdentityManager.addClientIdentityProvider(p);\n }\n }\n\n get serverName(): string {\n return this._serverName;\n }\n\n async start(): Promise<boolean> {\n const onClientConnected = (client: SerialMessageChannel) => {\n let clientName = this._getClientName(client) ?? '';\n client.subscribe(\n (message: string) => {\n this._onMessage(client, message);\n if (clientName === '') {\n clientName = this._getClientName(client) ?? '';\n }\n },\n {\n onError: (err) => {\n logger.error(`客户端错误: ${String(err)}`);\n },\n onDone: () => {\n logger.error(`客户端 ${clientName} 断开连接`);\n this._removeClient(client);\n this._onClientDisconnected?.(clientName);\n },\n cancelOnError: false,\n },\n );\n };\n\n if (this._webSocketServerEndpoint != null) {\n const ep = this._webSocketServerEndpoint;\n const portList =\n ep.portCandidateRule != null\n ? ep.portCandidateRule.toOrderedPortList()\n : [ep.port];\n\n for (const port of portList) {\n const server = new WebSocketServer(ep.address, port, { path: ep.path });\n if (await server.startServer(onClientConnected)) {\n this._webSocketServer = server;\n return true;\n }\n }\n }\n\n this._webSocketServer = undefined;\n return false;\n }\n\n async stop(): Promise<void> {\n if (this._webSocketServer != undefined) {\n await this._webSocketServer.close();\n this._webSocketServer = undefined;\n }\n }\n\n get serverAddress(): string | undefined {\n return this._webSocketServer?.serverAddressInfo?.ip ?? undefined;\n }\n\n get serverPort(): number | undefined {\n return this._webSocketServer?.serverAddressInfo?.port ?? undefined;\n }\n\n // PRIVATE METHODS\n\n private _addClient(clientIdentity: ClientIdentity, client: SerialMessageChannel): void {\n const clientName = clientIdentity.clientName;\n const clientAddress = this._getClientAddress(client);\n this._clientSocketMap.set(clientName, client);\n this._addressToClientNameMap.set(clientAddress, clientName);\n logger.info(`客户端已连接: ${clientName}`);\n }\n\n private _removeClient(client: SerialMessageChannel): void {\n const clientAddress = this._getClientAddress(client);\n const clientName = this._addressToClientNameMap.get(clientAddress);\n this._addressToClientNameMap.delete(clientAddress);\n if (clientName != null) {\n this._clientSocketMap.delete(clientName);\n }\n logger.info(`客户端已断开: ${clientName}`);\n }\n\n private _getClientName(client: SerialMessageChannel): string | undefined {\n const clientAddress = this._getClientAddress(client);\n return this._addressToClientNameMap.get(clientAddress);\n }\n\n private _getClientAddress(client: SerialMessageChannel): string {\n return `${client.remoteAddress}:${client.remotePort}`;\n }\n\n private _onMessage(client: SerialMessageChannel, message: string): void {\n logger.info(`服务端接收到消息,message: ${message}`);\n\n const reply: (msg: string) => Promise<boolean> = (msg) => client.sendMessage(msg);\n if (this._messagePreprocessor?.(reply, message) === true) {\n return;\n }\n\n let messageType = MessageType.UNKNOWN;\n\n const messageTypeMatch = message.match(/\"type\"\\s*:\\s*\"([^\"]+)\"/);\n const actualType = messageTypeMatch ? messageTypeMatch[1] : null;\n\n if (actualType === MessageType.REGISTRATION) {\n messageType = MessageType.REGISTRATION;\n this._onRegistration(client, IpcMessageDecoder.decodeRegistration(message));\n } else if (actualType === MessageType.UNREGISTRATION) {\n messageType = MessageType.UNREGISTRATION;\n this._onUnregistration(IpcMessageDecoder.decodeUnregistration(message));\n } else if (actualType === MessageType.EVENT) {\n messageType = MessageType.EVENT;\n this._onEvent(IpcMessageDecoder.decodeEvent(message));\n } else if (actualType === MessageType.ERROR) {\n messageType = MessageType.ERROR;\n this._onError(IpcMessageDecoder.decodeError(message));\n } else if (actualType === MessageType.REQUEST) {\n messageType = MessageType.REQUEST;\n this._onRequest(IpcMessageDecoder.decodeRequest(message));\n } else if (actualType === MessageType.RESPONSE) {\n messageType = MessageType.RESPONSE;\n this._onResponse(IpcMessageDecoder.decodeResponse(message));\n } else if (actualType === MessageType.SESSION_SETUP_REQUEST) {\n messageType = MessageType.SESSION_SETUP_REQUEST;\n this._onSessionSetupRequest(IpcMessageDecoder.decodeSessionSetupRequest(message));\n } else if (actualType === MessageType.SESSION_SETUP_RESPONSE) {\n // SESSION_SETUP_RESPONSE 单独处理,不设置 messageType 以避免重复处理\n // 这里可以添加相关处理逻辑,如果需要的话\n } else if (actualType === MessageType.HANDSHAKE) {\n messageType = MessageType.HANDSHAKE;\n this._onHandshake(IpcMessageDecoder.decodeHandshake(message), client);\n } else if (actualType === MessageType.PING) {\n messageType = MessageType.PING;\n this._onPing(IpcMessageDecoder.decodePing(message));\n } else {\n logger.error(`无法识别的消息类型: ${message}`);\n }\n\n const clientName = this._getClientName(client) ?? '';\n this._onMessageReceived?.(clientName, messageType, message);\n }\n\n private _onRegistration(client: SerialMessageChannel, registration: Registration): void {\n const clientName = registration.clientName;\n if (!this._validateClientIdentity(clientName)) {\n logger.error(`客户端(${clientName})不在白名单中,注册失败.`);\n return;\n }\n const identity = this._clientIdentityManager.getClientIdentity(clientName)!;\n this._addClient(identity, client);\n this._cancelClientTimer(clientName);\n this._processSessionSetupRequests(clientName);\n logger.info(`客户端(${clientName})注册成功.`);\n }\n\n private _onUnregistration(unregistration: Unregistration): void {\n const clientName = unregistration.clientName;\n this._clientSocketMap.delete(clientName);\n this._sessionSetupRequests.delete(clientName);\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n logger.info(`客户端(${clientName})注销.`);\n }\n\n private _onEvent(event: Event): void {\n const allClients = [...this._clientSocketMap.values()];\n for (const client of allClients) {\n sendEvent(client, event);\n }\n logger.info(`接收到 EventBus 事件,并转发给处于连接状态的所有客户端,event: ${event}.`);\n }\n\n private _onError(error: Error): void {\n logger.info(`接收到错误消息,并转发给请求客户端,error: ${error}.`);\n const fromClient = this._clientSocketMap.get(error.fromClient);\n if (fromClient != null) {\n sendError(fromClient, error);\n }\n }\n\n private _onRequest(request: Request): void {\n logger.info(`接收到请求消息,并转发给目标客户端,request: ${request}.`);\n const toClient = this._clientSocketMap.get(request.toClient);\n if (toClient != null) {\n sendRequest(toClient, request);\n }\n }\n\n private _onResponse(response: Response): void {\n logger.info(`接收到响应消息,并转发给请求客户端,response: ${response}.`);\n const fromClient = this._clientSocketMap.get(response.fromClient);\n if (fromClient != null) {\n sendResponse(fromClient, response);\n }\n }\n\n private _onSessionSetupRequest(request: IpcSessionSetupRequest): void {\n const targetClient = request.targetClient;\n if (!this._validateClientIdentity(targetClient)) {\n logger.error(`目标客户端(${targetClient})不在白名单内!`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Match target client(${targetClient}) failed!`);\n return;\n }\n if (this._handleExistingTargetClient(request, targetClient)) {\n logger.info(`与目标客户端(${targetClient})会话连接中.`);\n return;\n }\n let queue = this._sessionSetupRequests.get(targetClient);\n if (queue == null) {\n queue = [];\n this._sessionSetupRequests.set(targetClient, queue);\n }\n queue.push(request);\n logger.info(`缓存目标客户端(${targetClient})唤醒动作至队列.`);\n if (queue.length > 1) {\n logger.info(`正在尝试唤醒目标客户端进程,追加回调至队列中,targetClient: ${targetClient}.`);\n return;\n }\n if (request.autoLaunch) {\n logger.info(`尝试唤醒目标客户端(${targetClient}).`);\n this._wakeUpTargetClient(targetClient);\n } else {\n logger.info(`不尝试唤醒目标客户端(${targetClient}),直接返回失败.`);\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.failure, `Target client(${targetClient}) was dead, and wake up is disabled!`);\n }\n }\n\n private _onPing(_ping: Ping): void {\n logger.info('接收到 Ping 消息');\n }\n\n private _onHandshake(handshake: Handshake, client: SerialMessageChannel): void {\n if (handshake.magic !== Handshake.ipcMagic) {\n logger.warn(`收到未知握手魔数(${handshake.magic}),忽略本次握手请求,可能是其他服务误连.`);\n return;\n }\n if (handshake.role !== Handshake.clientRole) {\n logger.warn(`收到非 client 角色的握手(${handshake.role}),忽略本次握手请求.`);\n return;\n }\n const ack = new Handshake(\n handshake.clientName,\n Handshake.ipcMagic,\n Handshake.serverRole,\n Handshake.ipcVersion,\n );\n sendHandshake(client, ack);\n logger.info(`完成与客户端的握手确认,clientName: ${ack.clientName}, magic: ${ack.magic}, version: ${ack.version}`);\n }\n\n private _validateClientIdentity(clientName: string): boolean {\n const isValid = this._clientIdentityManager.getClientIdentity(clientName) != null;\n if (!isValid) {\n logger.fatal(`客户端(${clientName})不在白名单中,可能存在非法访问!`);\n }\n return isValid;\n }\n\n private _handleExistingTargetClient(request: IpcSessionSetupRequest, targetClient: string): boolean {\n const targetSocket = this._clientSocketMap.get(targetClient);\n if (targetSocket != null) {\n try {\n sendPing(targetSocket, new Ping(request.sourceClient));\n this._sendSessionSetupResponse(request, IpcSessionSetupResponse.success, `Connecting with target client(${targetClient})!`);\n return true;\n } catch (e) {\n logger.error(`Ping target client(${targetClient}) 失败!`);\n }\n }\n return false;\n }\n\n private async _wakeUpTargetClient(targetClient: string): Promise<void> {\n const clientIdentity = this._clientIdentityManager.getClientIdentity(targetClient);\n if (clientIdentity == null) {\n logger.fatal('唤醒目标客户端,白名单校验失败!');\n return;\n }\n if (this._wakeAppInterceptor != null && this._wakeAppInterceptor(clientIdentity) === true) {\n logger.info(`自定义方式唤醒目标客户端(${targetClient}).`);\n } else {\n logger.info(`默认方式唤醒目标客户端(${targetClient}).`);\n try {\n const appLauncher = PlatformAppLauncherFactory.create({\n appIdentifier: clientIdentity.appLaunchIdentifier,\n appInstallationPath: clientIdentity.appInstallationPath,\n });\n if (await appLauncher.isAppRunning()) {\n logger.warn(`目标客户端(${targetClient})处于存活态,等待注册!`);\n } else {\n logger.info(`尝试唤醒目标客户端(${targetClient})!`);\n await appLauncher.launchApp();\n }\n } catch (e) {\n logger.fatal(`唤醒目标客户端发生异常:${String(e)}!`);\n }\n }\n let timer = this._timerMap.get(targetClient);\n if (timer == null) {\n timer = setTimeout(() => {\n logger.error(`唤醒目标客户端(${targetClient})超时`);\n const queue = this._sessionSetupRequests.get(targetClient);\n this._sessionSetupRequests.delete(targetClient);\n this._timerMap.delete(targetClient);\n if (queue != null) {\n for (const req of queue) {\n this._sendSessionSetupResponse(req, IpcSessionSetupResponse.failure, `Target client(${targetClient}) register time out!`);\n }\n } else {\n logger.error('需要与目标客户端建立会话的发起端队列为空!');\n }\n }, 20_000);\n this._timerMap.set(targetClient, timer);\n }\n }\n\n private _sendSessionSetupResponse(request: IpcSessionSetupRequest, result: number, message: string): void {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n result,\n message,\n undefined,\n );\n const sourceSocket = this._clientSocketMap.get(request.sourceClient);\n if (sourceSocket != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建结果${result === IpcSessionSetupResponse.success ? '成功.' : '失败!'}`);\n sendSessionSetupResponse(sourceSocket, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n\n private _cancelClientTimer(clientName: string): void {\n const timer = this._timerMap.get(clientName);\n if (timer != null) {\n clearTimeout(timer);\n this._timerMap.delete(clientName);\n }\n }\n\n private _processSessionSetupRequests(clientName: string): void {\n const queue = this._sessionSetupRequests.get(clientName);\n this._sessionSetupRequests.delete(clientName);\n if (queue != null) {\n for (const request of queue) {\n const response = new IpcSessionSetupResponse(\n request.sourceClient,\n request.targetClient,\n request.callbackId,\n IpcSessionSetupResponse.success,\n 'Target client register success!',\n undefined,\n );\n const sourceClient = this._clientSocketMap.get(request.sourceClient);\n if (sourceClient != null) {\n logger.info(`通知请求发起端(${request.sourceClient})会话构建成功.`);\n sendSessionSetupResponse(sourceClient, response);\n } else {\n logger.error(`未匹配到通信发起端(${request.sourceClient}),检查是否已经关闭!`);\n }\n }\n }\n }\n}\n"]}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import type { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';
5
5
  import type { ClientIdentity, ClientIdentityProvider } from './credential/client_identity';
6
+ import { LogSubscriber } from '../../moonbridge/logger/logger';
6
7
  /** 消息回复函数,用于向客户端发送响应消息 */
7
8
  export type IpcMessageReply = (message: string) => Promise<boolean>;
8
9
  /** 唤醒客户端应用拦截器 */
@@ -56,10 +57,11 @@ export declare class MoonBridgeIpcServerBuilder {
56
57
  private _onClientDisconnected?;
57
58
  private _messagePreprocessor?;
58
59
  private _onMessageReceived?;
60
+ private _logSubscriber?;
59
61
  /** 设置服务器名称 */
60
62
  serverName(name: string): this;
61
63
  /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */
62
- useWebSocketChannel(endpoint: WebSocketServerEndpoint): this;
64
+ onWebSocketChannel(endpoint: WebSocketServerEndpoint): this;
63
65
  /** 设置客户端身份信息提供者列表 */
64
66
  clientIdentityProviders(providers: ClientIdentityProvider[]): this;
65
67
  /** 设置唤醒客户端应用的拦截器 */
@@ -70,6 +72,8 @@ export declare class MoonBridgeIpcServerBuilder {
70
72
  messagePreprocessor(preprocessor: MessagePreprocessor): this;
71
73
  /** 设置消息接收回调 */
72
74
  onMessageReceived(callback: OnMessageReceived): this;
75
+ /** 设置日志订阅者 */
76
+ logSubscriber(subscriber: LogSubscriber): this;
73
77
  /**
74
78
  * 构建并返回配置完成的服务器实例
75
79
  * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false
@@ -1 +1 @@
1
- {"version":3,"file":"moonbridge_ipc_server.d.ts","sourceRoot":"","sources":["../../../src/moonbridge-ipc/server/moonbridge_ipc_server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"moonbridge_ipc_server.d.ts","sourceRoot":"","sources":["../../../src/moonbridge-ipc/server/moonbridge_ipc_server.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var websocket_server = require('../general/transport/websocket/websocket_server');
4
4
  var moonbridge_ipc_server_internal = require('./internal/moonbridge_ipc_server.internal');
5
+ var logger = require('../../moonbridge/logger/logger');
5
6
 
6
7
  class MoonBridgeIpcServer {
7
8
  /**
@@ -26,7 +27,7 @@ class MoonBridgeIpcServerBuilder {
26
27
  return this;
27
28
  }
28
29
  /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */
29
- useWebSocketChannel(endpoint) {
30
+ onWebSocketChannel(endpoint) {
30
31
  this._webSocketServerEndpoint = endpoint;
31
32
  return this;
32
33
  }
@@ -55,13 +56,21 @@ class MoonBridgeIpcServerBuilder {
55
56
  this._onMessageReceived = callback;
56
57
  return this;
57
58
  }
59
+ /** 设置日志订阅者 */
60
+ logSubscriber(subscriber) {
61
+ this._logSubscriber = subscriber;
62
+ return this;
63
+ }
58
64
  /**
59
65
  * 构建并返回配置完成的服务器实例
60
66
  * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false
61
67
  */
62
68
  build(makeDefault = false) {
63
69
  if (this._webSocketServerEndpoint == null) {
64
- throw new Error("\u8BF7\u4F7F\u7528 useWebSocketChannel \u8BBE\u7F6E\u4F20\u8F93\u914D\u7F6E\u3002");
70
+ throw new Error("\u8BF7\u4F7F\u7528 onWebSocketChannel \u8BBE\u7F6E\u4F20\u8F93\u914D\u7F6E\u3002");
71
+ }
72
+ if (this._logSubscriber) {
73
+ logger.Logger.addSubscriber(this._logSubscriber);
65
74
  }
66
75
  const server = new moonbridge_ipc_server_internal.RealMoonBridgeIpcServer(
67
76
  this._serverName,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/moonbridge-ipc/server/moonbridge_ipc_server.ts"],"names":["SocketServer","RealMoonBridgeIpcServer"],"mappings":"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","file":"moonbridge_ipc_server.js","sourcesContent":["/**\n * MoonBridge IPC 服务器入口类\n */\n\nimport { SocketServer } from '../general/transport/websocket/websocket_server';\nimport type { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport type { ClientIdentity, ClientIdentityProvider } from './credential/client_identity';\nimport { RealMoonBridgeIpcServer } from './internal/moonbridge_ipc_server.internal';\n\n/** 消息回复函数,用于向客户端发送响应消息 */\nexport type IpcMessageReply = (message: string) => Promise<boolean>;\n\n/** 唤醒客户端应用拦截器 */\nexport type WakeAppInterceptor = (clientIdentity: ClientIdentity) => boolean;\n\n/** 客户端断开连接的回调函数 */\nexport type DisconnectedCallback = (clientName: string) => void;\n\n/** 消息预处理器 */\nexport type MessagePreprocessor = (reply: IpcMessageReply, message: string) => boolean;\n\n/** 消息接收回调 */\nexport type OnMessageReceived = (clientName: string, type: string, message: string) => void;\n\n/**\n * MoonBridge IPC 服务器抽象类\n */\nexport abstract class MoonBridgeIpcServer {\n /** 任意 IPv4 地址 */\n static readonly anyIPv4 = SocketServer.anyIPv4;\n /** 任意 IPv6 地址 */\n static readonly anyIPv6 = SocketServer.anyIPv6;\n\n /** \n * 构建 MoonBridgeIpcServerBuilder 实例\n * @returns MoonBridgeIpcServerBuilder 实例\n */\n static builder(): MoonBridgeIpcServerBuilder {\n return new MoonBridgeIpcServerBuilder();\n }\n\n /**\n * 服务器名称 \n */\n abstract readonly serverName: string;\n\n /** \n * 启动服务器\n * @returns 是否成功启动\n */\n abstract start(): Promise<boolean>;\n\n /* \n * 停止服务器\n * @returns 是否成功停止\n */\n abstract stop(): Promise<void>;\n\n /** \n * 服务器地址 \n */\n abstract get serverAddress(): string | undefined;\n\n /** \n * 服务器端口 \n */\n abstract get serverPort(): number | undefined;\n}\n\n/**\n * MoonBridge IPC 服务器构造器\n */\nexport class MoonBridgeIpcServerBuilder {\n private _serverName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _clientIdentityProviders?: ClientIdentityProvider[];\n private _wakeAppInterceptor?: WakeAppInterceptor;\n private _onClientDisconnected?: DisconnectedCallback;\n private _messagePreprocessor?: MessagePreprocessor;\n private _onMessageReceived?: OnMessageReceived;\n\n /** 设置服务器名称 */\n serverName(name: string): this {\n this._serverName = name;\n return this;\n }\n\n /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */\n useWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /** 设置客户端身份信息提供者列表 */\n clientIdentityProviders(providers: ClientIdentityProvider[]): this {\n this._clientIdentityProviders = providers;\n return this;\n }\n\n /** 设置唤醒客户端应用的拦截器 */\n wakeAppInterceptor(interceptor: WakeAppInterceptor): this {\n this._wakeAppInterceptor = interceptor;\n return this;\n }\n\n /** 设置客户端断开连接的回调函数 */\n onClientDisconnected(callback: DisconnectedCallback): this {\n this._onClientDisconnected = callback;\n return this;\n }\n\n /** 设置消息预处理器 */\n messagePreprocessor(preprocessor: MessagePreprocessor): this {\n this._messagePreprocessor = preprocessor;\n return this;\n }\n\n /** 设置消息接收回调 */\n onMessageReceived(callback: OnMessageReceived): this {\n this._onMessageReceived = callback;\n return this;\n }\n\n /**\n * 构建并返回配置完成的服务器实例\n * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false\n */\n build(makeDefault = false): MoonBridgeIpcServer {\n if (this._webSocketServerEndpoint == null) {\n throw new Error('请使用 useWebSocketChannel 设置传输配置。',);\n }\n\n const server = new RealMoonBridgeIpcServer(\n this._serverName,\n this._webSocketServerEndpoint,\n this._wakeAppInterceptor,\n this._clientIdentityProviders,\n this._onClientDisconnected,\n this._messagePreprocessor,\n this._onMessageReceived,\n );\n\n MoonBridgeIpcServerRegistry.instance.register(server);\n\n if (makeDefault) {\n MoonBridgeIpcServerRegistry.instance.setDefault(server);\n }\n return server;\n }\n}\n\n/**\n * MoonBridge IPC 服务端注册器\n */\nexport class MoonBridgeIpcServerRegistry {\n private static _instance?: MoonBridgeIpcServerRegistry;\n private readonly _serverMap = new Map<string, MoonBridgeIpcServer>();\n\n static get instance(): MoonBridgeIpcServerRegistry {\n return MoonBridgeIpcServerRegistry._instance ??= new MoonBridgeIpcServerRegistry();\n }\n\n setDefault(server: MoonBridgeIpcServer): void {\n this._serverMap.set('__default__', server);\n }\n\n register(server: MoonBridgeIpcServer): void {\n this._serverMap.set(server.serverName, server);\n }\n\n get(serverName?: string): MoonBridgeIpcServer | undefined {\n return this._serverMap.get(serverName ?? '__default__');\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/moonbridge-ipc/server/moonbridge_ipc_server.ts"],"names":["SocketServer","Logger","RealMoonBridgeIpcServer"],"mappings":"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","file":"moonbridge_ipc_server.js","sourcesContent":["/**\n * MoonBridge IPC 服务器入口类\n */\n\nimport { SocketServer } from '../general/transport/websocket/websocket_server';\nimport type { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport type { ClientIdentity, ClientIdentityProvider } from './credential/client_identity';\nimport { RealMoonBridgeIpcServer } from './internal/moonbridge_ipc_server.internal';\nimport { Logger, LogSubscriber } from '../../moonbridge/logger/logger';\n\n/** 消息回复函数,用于向客户端发送响应消息 */\nexport type IpcMessageReply = (message: string) => Promise<boolean>;\n\n/** 唤醒客户端应用拦截器 */\nexport type WakeAppInterceptor = (clientIdentity: ClientIdentity) => boolean;\n\n/** 客户端断开连接的回调函数 */\nexport type DisconnectedCallback = (clientName: string) => void;\n\n/** 消息预处理器 */\nexport type MessagePreprocessor = (reply: IpcMessageReply, message: string) => boolean;\n\n/** 消息接收回调 */\nexport type OnMessageReceived = (clientName: string, type: string, message: string) => void;\n\n/**\n * MoonBridge IPC 服务器抽象类\n */\nexport abstract class MoonBridgeIpcServer {\n /** 任意 IPv4 地址 */\n static readonly anyIPv4 = SocketServer.anyIPv4;\n /** 任意 IPv6 地址 */\n static readonly anyIPv6 = SocketServer.anyIPv6;\n\n /** \n * 构建 MoonBridgeIpcServerBuilder 实例\n * @returns MoonBridgeIpcServerBuilder 实例\n */\n static builder(): MoonBridgeIpcServerBuilder {\n return new MoonBridgeIpcServerBuilder();\n }\n\n /**\n * 服务器名称 \n */\n abstract readonly serverName: string;\n\n /** \n * 启动服务器\n * @returns 是否成功启动\n */\n abstract start(): Promise<boolean>;\n\n /* \n * 停止服务器\n * @returns 是否成功停止\n */\n abstract stop(): Promise<void>;\n\n /** \n * 服务器地址 \n */\n abstract get serverAddress(): string | undefined;\n\n /** \n * 服务器端口 \n */\n abstract get serverPort(): number | undefined;\n}\n\n/**\n * MoonBridge IPC 服务器构造器\n */\nexport class MoonBridgeIpcServerBuilder {\n private _serverName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _clientIdentityProviders?: ClientIdentityProvider[];\n private _wakeAppInterceptor?: WakeAppInterceptor;\n private _onClientDisconnected?: DisconnectedCallback;\n private _messagePreprocessor?: MessagePreprocessor;\n private _onMessageReceived?: OnMessageReceived;\n private _logSubscriber?: LogSubscriber;\n\n /** 设置服务器名称 */\n serverName(name: string): this {\n this._serverName = name;\n return this;\n }\n\n /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */\n onWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /** 设置客户端身份信息提供者列表 */\n clientIdentityProviders(providers: ClientIdentityProvider[]): this {\n this._clientIdentityProviders = providers;\n return this;\n }\n\n /** 设置唤醒客户端应用的拦截器 */\n wakeAppInterceptor(interceptor: WakeAppInterceptor): this {\n this._wakeAppInterceptor = interceptor;\n return this;\n }\n\n /** 设置客户端断开连接的回调函数 */\n onClientDisconnected(callback: DisconnectedCallback): this {\n this._onClientDisconnected = callback;\n return this;\n }\n\n /** 设置消息预处理器 */\n messagePreprocessor(preprocessor: MessagePreprocessor): this {\n this._messagePreprocessor = preprocessor;\n return this;\n }\n\n /** 设置消息接收回调 */\n onMessageReceived(callback: OnMessageReceived): this {\n this._onMessageReceived = callback;\n return this;\n }\n\n /** 设置日志订阅者 */\n logSubscriber(subscriber: LogSubscriber): this {\n this._logSubscriber = subscriber;\n return this;\n }\n\n /**\n * 构建并返回配置完成的服务器实例\n * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false\n */\n build(makeDefault = false): MoonBridgeIpcServer {\n if (this._webSocketServerEndpoint == null) {\n throw new Error('请使用 onWebSocketChannel 设置传输配置。',);\n }\n\n // 添加日志订阅者\n if (this._logSubscriber) {\n Logger.addSubscriber(this._logSubscriber);\n }\n\n // 创建服务器实例\n const server = new RealMoonBridgeIpcServer(\n this._serverName,\n this._webSocketServerEndpoint,\n this._wakeAppInterceptor,\n this._clientIdentityProviders,\n this._onClientDisconnected,\n this._messagePreprocessor,\n this._onMessageReceived,\n );\n\n MoonBridgeIpcServerRegistry.instance.register(server);\n if (makeDefault) {\n MoonBridgeIpcServerRegistry.instance.setDefault(server);\n }\n return server;\n }\n}\n\n/**\n * MoonBridge IPC 服务端注册器\n */\nexport class MoonBridgeIpcServerRegistry {\n private static _instance?: MoonBridgeIpcServerRegistry;\n private readonly _serverMap = new Map<string, MoonBridgeIpcServer>();\n\n static get instance(): MoonBridgeIpcServerRegistry {\n return MoonBridgeIpcServerRegistry._instance ??= new MoonBridgeIpcServerRegistry();\n }\n\n setDefault(server: MoonBridgeIpcServer): void {\n this._serverMap.set('__default__', server);\n }\n\n register(server: MoonBridgeIpcServer): void {\n this._serverMap.set(server.serverName, server);\n }\n\n get(serverName?: string): MoonBridgeIpcServer | undefined {\n return this._serverMap.get(serverName ?? '__default__');\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { SocketServer } from '../general/transport/websocket/websocket_server';
2
2
  import { RealMoonBridgeIpcServer } from './internal/moonbridge_ipc_server.internal';
3
+ import { Logger } from '../../moonbridge/logger/logger';
3
4
 
4
5
  class MoonBridgeIpcServer {
5
6
  /**
@@ -24,7 +25,7 @@ class MoonBridgeIpcServerBuilder {
24
25
  return this;
25
26
  }
26
27
  /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */
27
- useWebSocketChannel(endpoint) {
28
+ onWebSocketChannel(endpoint) {
28
29
  this._webSocketServerEndpoint = endpoint;
29
30
  return this;
30
31
  }
@@ -53,13 +54,21 @@ class MoonBridgeIpcServerBuilder {
53
54
  this._onMessageReceived = callback;
54
55
  return this;
55
56
  }
57
+ /** 设置日志订阅者 */
58
+ logSubscriber(subscriber) {
59
+ this._logSubscriber = subscriber;
60
+ return this;
61
+ }
56
62
  /**
57
63
  * 构建并返回配置完成的服务器实例
58
64
  * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false
59
65
  */
60
66
  build(makeDefault = false) {
61
67
  if (this._webSocketServerEndpoint == null) {
62
- throw new Error("\u8BF7\u4F7F\u7528 useWebSocketChannel \u8BBE\u7F6E\u4F20\u8F93\u914D\u7F6E\u3002");
68
+ throw new Error("\u8BF7\u4F7F\u7528 onWebSocketChannel \u8BBE\u7F6E\u4F20\u8F93\u914D\u7F6E\u3002");
69
+ }
70
+ if (this._logSubscriber) {
71
+ Logger.addSubscriber(this._logSubscriber);
63
72
  }
64
73
  const server = new RealMoonBridgeIpcServer(
65
74
  this._serverName,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/moonbridge-ipc/server/moonbridge_ipc_server.ts"],"names":[],"mappings":"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","file":"moonbridge_ipc_server.mjs","sourcesContent":["/**\n * MoonBridge IPC 服务器入口类\n */\n\nimport { SocketServer } from '../general/transport/websocket/websocket_server';\nimport type { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport type { ClientIdentity, ClientIdentityProvider } from './credential/client_identity';\nimport { RealMoonBridgeIpcServer } from './internal/moonbridge_ipc_server.internal';\n\n/** 消息回复函数,用于向客户端发送响应消息 */\nexport type IpcMessageReply = (message: string) => Promise<boolean>;\n\n/** 唤醒客户端应用拦截器 */\nexport type WakeAppInterceptor = (clientIdentity: ClientIdentity) => boolean;\n\n/** 客户端断开连接的回调函数 */\nexport type DisconnectedCallback = (clientName: string) => void;\n\n/** 消息预处理器 */\nexport type MessagePreprocessor = (reply: IpcMessageReply, message: string) => boolean;\n\n/** 消息接收回调 */\nexport type OnMessageReceived = (clientName: string, type: string, message: string) => void;\n\n/**\n * MoonBridge IPC 服务器抽象类\n */\nexport abstract class MoonBridgeIpcServer {\n /** 任意 IPv4 地址 */\n static readonly anyIPv4 = SocketServer.anyIPv4;\n /** 任意 IPv6 地址 */\n static readonly anyIPv6 = SocketServer.anyIPv6;\n\n /** \n * 构建 MoonBridgeIpcServerBuilder 实例\n * @returns MoonBridgeIpcServerBuilder 实例\n */\n static builder(): MoonBridgeIpcServerBuilder {\n return new MoonBridgeIpcServerBuilder();\n }\n\n /**\n * 服务器名称 \n */\n abstract readonly serverName: string;\n\n /** \n * 启动服务器\n * @returns 是否成功启动\n */\n abstract start(): Promise<boolean>;\n\n /* \n * 停止服务器\n * @returns 是否成功停止\n */\n abstract stop(): Promise<void>;\n\n /** \n * 服务器地址 \n */\n abstract get serverAddress(): string | undefined;\n\n /** \n * 服务器端口 \n */\n abstract get serverPort(): number | undefined;\n}\n\n/**\n * MoonBridge IPC 服务器构造器\n */\nexport class MoonBridgeIpcServerBuilder {\n private _serverName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _clientIdentityProviders?: ClientIdentityProvider[];\n private _wakeAppInterceptor?: WakeAppInterceptor;\n private _onClientDisconnected?: DisconnectedCallback;\n private _messagePreprocessor?: MessagePreprocessor;\n private _onMessageReceived?: OnMessageReceived;\n\n /** 设置服务器名称 */\n serverName(name: string): this {\n this._serverName = name;\n return this;\n }\n\n /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */\n useWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /** 设置客户端身份信息提供者列表 */\n clientIdentityProviders(providers: ClientIdentityProvider[]): this {\n this._clientIdentityProviders = providers;\n return this;\n }\n\n /** 设置唤醒客户端应用的拦截器 */\n wakeAppInterceptor(interceptor: WakeAppInterceptor): this {\n this._wakeAppInterceptor = interceptor;\n return this;\n }\n\n /** 设置客户端断开连接的回调函数 */\n onClientDisconnected(callback: DisconnectedCallback): this {\n this._onClientDisconnected = callback;\n return this;\n }\n\n /** 设置消息预处理器 */\n messagePreprocessor(preprocessor: MessagePreprocessor): this {\n this._messagePreprocessor = preprocessor;\n return this;\n }\n\n /** 设置消息接收回调 */\n onMessageReceived(callback: OnMessageReceived): this {\n this._onMessageReceived = callback;\n return this;\n }\n\n /**\n * 构建并返回配置完成的服务器实例\n * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false\n */\n build(makeDefault = false): MoonBridgeIpcServer {\n if (this._webSocketServerEndpoint == null) {\n throw new Error('请使用 useWebSocketChannel 设置传输配置。',);\n }\n\n const server = new RealMoonBridgeIpcServer(\n this._serverName,\n this._webSocketServerEndpoint,\n this._wakeAppInterceptor,\n this._clientIdentityProviders,\n this._onClientDisconnected,\n this._messagePreprocessor,\n this._onMessageReceived,\n );\n\n MoonBridgeIpcServerRegistry.instance.register(server);\n\n if (makeDefault) {\n MoonBridgeIpcServerRegistry.instance.setDefault(server);\n }\n return server;\n }\n}\n\n/**\n * MoonBridge IPC 服务端注册器\n */\nexport class MoonBridgeIpcServerRegistry {\n private static _instance?: MoonBridgeIpcServerRegistry;\n private readonly _serverMap = new Map<string, MoonBridgeIpcServer>();\n\n static get instance(): MoonBridgeIpcServerRegistry {\n return MoonBridgeIpcServerRegistry._instance ??= new MoonBridgeIpcServerRegistry();\n }\n\n setDefault(server: MoonBridgeIpcServer): void {\n this._serverMap.set('__default__', server);\n }\n\n register(server: MoonBridgeIpcServer): void {\n this._serverMap.set(server.serverName, server);\n }\n\n get(serverName?: string): MoonBridgeIpcServer | undefined {\n return this._serverMap.get(serverName ?? '__default__');\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/moonbridge-ipc/server/moonbridge_ipc_server.ts"],"names":[],"mappings":";;;;AA4BO,MAAe,mBAAA,CAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAUxC,OAAO,OAAA,GAAsC;AAC3C,IAAA,OAAO,IAAI,0BAAA,EAA2B;AAAA,EACxC;AA4BF;AAAA;AAxCsB,mBAAA,CAEJ,UAAU,YAAA,CAAa,OAAA;AAAA;AAFnB,mBAAA,CAIJ,UAAU,YAAA,CAAa,OAAA;AAyClC,MAAM,0BAAA,CAA2B;AAAA,EAAjC,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,WAAA,GAAc,EAAA;AAAA,EAAA;AAAA;AAAA,EAUtB,WAAW,IAAA,EAAoB;AAC7B,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,QAAA,EAAyC;AAC1D,IAAA,IAAA,CAAK,wBAAA,GAA2B,QAAA;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,wBAAwB,SAAA,EAA2C;AACjE,IAAA,IAAA,CAAK,wBAAA,GAA2B,SAAA;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,WAAA,EAAuC;AACxD,IAAA,IAAA,CAAK,mBAAA,GAAsB,WAAA;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB,QAAA,EAAsC;AACzD,IAAA,IAAA,CAAK,qBAAA,GAAwB,QAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,oBAAoB,YAAA,EAAyC;AAC3D,IAAA,IAAA,CAAK,oBAAA,GAAuB,YAAA;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,kBAAkB,QAAA,EAAmC;AACnD,IAAA,IAAA,CAAK,kBAAA,GAAqB,QAAA;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,cAAc,UAAA,EAAiC;AAC7C,IAAA,IAAA,CAAK,cAAA,GAAiB,UAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,CAAM,cAAc,KAAA,EAA4B;AAC9C,IAAA,IAAI,IAAA,CAAK,4BAA4B,IAAA,EAAM;AACzC,MAAA,MAAM,IAAI,MAAM,kFAAiC,CAAA;AAAA,IACnD;AAGA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,aAAA,CAAc,KAAK,cAAc,CAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,SAAS,IAAI,uBAAA;AAAA,MACjB,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK,wBAAA;AAAA,MACL,IAAA,CAAK,mBAAA;AAAA,MACL,IAAA,CAAK,wBAAA;AAAA,MACL,IAAA,CAAK,qBAAA;AAAA,MACL,IAAA,CAAK,oBAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,2BAAA,CAA4B,QAAA,CAAS,SAAS,MAAM,CAAA;AACpD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,2BAAA,CAA4B,QAAA,CAAS,WAAW,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAKO,MAAM,2BAAA,CAA4B;AAAA,EAAlC,WAAA,GAAA;AAEL,IAAA,IAAA,CAAiB,UAAA,uBAAiB,GAAA,EAAiC;AAAA,EAAA;AAAA,EAEnE,WAAW,QAAA,GAAwC;AA3KrD,IAAA,IAAA,EAAA;AA4KI,IAAA,OAAA,CAAO,EAAA,GAAA,2BAAA,CAA4B,SAAA,KAA5B,IAAA,GAAA,EAAA,GAAA,2BAAA,CAA4B,SAAA,GAAc,IAAI,2BAAA,EAA4B;AAAA,EACnF;AAAA,EAEA,WAAW,MAAA,EAAmC;AAC5C,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,aAAA,EAAe,MAAM,CAAA;AAAA,EAC3C;AAAA,EAEA,SAAS,MAAA,EAAmC;AAC1C,IAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,MAAM,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,UAAA,EAAsD;AACxD,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,aAAa,CAAA;AAAA,EACxD;AACF","file":"moonbridge_ipc_server.mjs","sourcesContent":["/**\n * MoonBridge IPC 服务器入口类\n */\n\nimport { SocketServer } from '../general/transport/websocket/websocket_server';\nimport type { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';\nimport type { ClientIdentity, ClientIdentityProvider } from './credential/client_identity';\nimport { RealMoonBridgeIpcServer } from './internal/moonbridge_ipc_server.internal';\nimport { Logger, LogSubscriber } from '../../moonbridge/logger/logger';\n\n/** 消息回复函数,用于向客户端发送响应消息 */\nexport type IpcMessageReply = (message: string) => Promise<boolean>;\n\n/** 唤醒客户端应用拦截器 */\nexport type WakeAppInterceptor = (clientIdentity: ClientIdentity) => boolean;\n\n/** 客户端断开连接的回调函数 */\nexport type DisconnectedCallback = (clientName: string) => void;\n\n/** 消息预处理器 */\nexport type MessagePreprocessor = (reply: IpcMessageReply, message: string) => boolean;\n\n/** 消息接收回调 */\nexport type OnMessageReceived = (clientName: string, type: string, message: string) => void;\n\n/**\n * MoonBridge IPC 服务器抽象类\n */\nexport abstract class MoonBridgeIpcServer {\n /** 任意 IPv4 地址 */\n static readonly anyIPv4 = SocketServer.anyIPv4;\n /** 任意 IPv6 地址 */\n static readonly anyIPv6 = SocketServer.anyIPv6;\n\n /** \n * 构建 MoonBridgeIpcServerBuilder 实例\n * @returns MoonBridgeIpcServerBuilder 实例\n */\n static builder(): MoonBridgeIpcServerBuilder {\n return new MoonBridgeIpcServerBuilder();\n }\n\n /**\n * 服务器名称 \n */\n abstract readonly serverName: string;\n\n /** \n * 启动服务器\n * @returns 是否成功启动\n */\n abstract start(): Promise<boolean>;\n\n /* \n * 停止服务器\n * @returns 是否成功停止\n */\n abstract stop(): Promise<void>;\n\n /** \n * 服务器地址 \n */\n abstract get serverAddress(): string | undefined;\n\n /** \n * 服务器端口 \n */\n abstract get serverPort(): number | undefined;\n}\n\n/**\n * MoonBridge IPC 服务器构造器\n */\nexport class MoonBridgeIpcServerBuilder {\n private _serverName = '';\n private _webSocketServerEndpoint?: WebSocketServerEndpoint;\n private _clientIdentityProviders?: ClientIdentityProvider[];\n private _wakeAppInterceptor?: WakeAppInterceptor;\n private _onClientDisconnected?: DisconnectedCallback;\n private _messagePreprocessor?: MessagePreprocessor;\n private _onMessageReceived?: OnMessageReceived;\n private _logSubscriber?: LogSubscriber;\n\n /** 设置服务器名称 */\n serverName(name: string): this {\n this._serverName = name;\n return this;\n }\n\n /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */\n onWebSocketChannel(endpoint: WebSocketServerEndpoint): this {\n this._webSocketServerEndpoint = endpoint;\n return this;\n }\n\n /** 设置客户端身份信息提供者列表 */\n clientIdentityProviders(providers: ClientIdentityProvider[]): this {\n this._clientIdentityProviders = providers;\n return this;\n }\n\n /** 设置唤醒客户端应用的拦截器 */\n wakeAppInterceptor(interceptor: WakeAppInterceptor): this {\n this._wakeAppInterceptor = interceptor;\n return this;\n }\n\n /** 设置客户端断开连接的回调函数 */\n onClientDisconnected(callback: DisconnectedCallback): this {\n this._onClientDisconnected = callback;\n return this;\n }\n\n /** 设置消息预处理器 */\n messagePreprocessor(preprocessor: MessagePreprocessor): this {\n this._messagePreprocessor = preprocessor;\n return this;\n }\n\n /** 设置消息接收回调 */\n onMessageReceived(callback: OnMessageReceived): this {\n this._onMessageReceived = callback;\n return this;\n }\n\n /** 设置日志订阅者 */\n logSubscriber(subscriber: LogSubscriber): this {\n this._logSubscriber = subscriber;\n return this;\n }\n\n /**\n * 构建并返回配置完成的服务器实例\n * @param makeDefault 是否将该服务器实例设置为默认服务器,默认为 false\n */\n build(makeDefault = false): MoonBridgeIpcServer {\n if (this._webSocketServerEndpoint == null) {\n throw new Error('请使用 onWebSocketChannel 设置传输配置。',);\n }\n\n // 添加日志订阅者\n if (this._logSubscriber) {\n Logger.addSubscriber(this._logSubscriber);\n }\n\n // 创建服务器实例\n const server = new RealMoonBridgeIpcServer(\n this._serverName,\n this._webSocketServerEndpoint,\n this._wakeAppInterceptor,\n this._clientIdentityProviders,\n this._onClientDisconnected,\n this._messagePreprocessor,\n this._onMessageReceived,\n );\n\n MoonBridgeIpcServerRegistry.instance.register(server);\n if (makeDefault) {\n MoonBridgeIpcServerRegistry.instance.setDefault(server);\n }\n return server;\n }\n}\n\n/**\n * MoonBridge IPC 服务端注册器\n */\nexport class MoonBridgeIpcServerRegistry {\n private static _instance?: MoonBridgeIpcServerRegistry;\n private readonly _serverMap = new Map<string, MoonBridgeIpcServer>();\n\n static get instance(): MoonBridgeIpcServerRegistry {\n return MoonBridgeIpcServerRegistry._instance ??= new MoonBridgeIpcServerRegistry();\n }\n\n setDefault(server: MoonBridgeIpcServer): void {\n this._serverMap.set('__default__', server);\n }\n\n register(server: MoonBridgeIpcServer): void {\n this._serverMap.set(server.serverName, server);\n }\n\n get(serverName?: string): MoonBridgeIpcServer | undefined {\n return this._serverMap.get(serverName ?? '__default__');\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moonbridge-ts",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "MoonBridge IPC by WebSocket for node(server) and browser(client).",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -86,7 +86,7 @@ export class MoonBridgeIpcClientBuilder {
86
86
  /**
87
87
  * 设置 WebSocket 连接配置
88
88
  */
89
- useWebSocketChannel(endpoint: WebSocketServerEndpoint): this {
89
+ onWebSocketChannel(endpoint: WebSocketServerEndpoint): this {
90
90
  this._webSocketServerEndpoint = endpoint;
91
91
  return this;
92
92
  }
@@ -173,7 +173,7 @@ export class MoonBridgeIpcClientBuilder {
173
173
  }
174
174
  if (!this._webSocketServerEndpoint) {
175
175
  throw new Error(
176
- 'Call useWebSocketChannel to set the transport configuration.',
176
+ 'Call onWebSocketChannel to set the transport configuration.',
177
177
  );
178
178
  }
179
179
 
@@ -88,7 +88,7 @@ export class MoonBridgeIpcServerBuilder {
88
88
  }
89
89
 
90
90
  /** 设置 WebSocket 服务端通道监听配置;null 表示不启动 WebSocket。 */
91
- useWebSocketChannel(endpoint: WebSocketServerEndpoint): this {
91
+ onWebSocketChannel(endpoint: WebSocketServerEndpoint): this {
92
92
  this._webSocketServerEndpoint = endpoint;
93
93
  return this;
94
94
  }
@@ -135,7 +135,7 @@ export class MoonBridgeIpcServerBuilder {
135
135
  */
136
136
  build(makeDefault = false): MoonBridgeIpcServer {
137
137
  if (this._webSocketServerEndpoint == null) {
138
- throw new Error('请使用 useWebSocketChannel 设置传输配置。',);
138
+ throw new Error('请使用 onWebSocketChannel 设置传输配置。',);
139
139
  }
140
140
 
141
141
  // 添加日志订阅者