moonbridge-ts 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -17
- package/dist/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.d.ts +5 -5
- package/dist/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.d.ts.map +1 -1
- package/dist/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.js +44 -13
- package/dist/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.js.map +1 -1
- package/dist/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.mjs +44 -13
- package/dist/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.mjs.map +1 -1
- package/dist/moonbridge-ipc/client/moonbridge_ipc_client.d.ts +6 -1
- package/dist/moonbridge-ipc/client/moonbridge_ipc_client.d.ts.map +1 -1
- package/dist/moonbridge-ipc/client/moonbridge_ipc_client.js.map +1 -1
- package/dist/moonbridge-ipc/client/moonbridge_ipc_client.mjs.map +1 -1
- package/dist/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.d.ts.map +1 -1
- package/dist/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.js +1 -6
- package/dist/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.js.map +1 -1
- package/dist/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.mjs +1 -6
- package/dist/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.mjs.map +1 -1
- package/dist/moonbridge-ipc/client/rpc/rpc_service_factory.d.ts +57 -0
- package/dist/moonbridge-ipc/client/rpc/rpc_service_factory.d.ts.map +1 -0
- package/dist/moonbridge-ipc/client/rpc/rpc_service_factory.js +16 -0
- package/dist/moonbridge-ipc/client/rpc/rpc_service_factory.js.map +1 -0
- package/dist/moonbridge-ipc/client/rpc/rpc_service_factory.mjs +14 -0
- package/dist/moonbridge-ipc/client/rpc/rpc_service_factory.mjs.map +1 -0
- package/dist/moonbridge-ipc/client/rpc/service/job/ipc_request_job.d.ts +5 -0
- package/dist/moonbridge-ipc/client/rpc/service/job/ipc_request_job.d.ts.map +1 -1
- package/dist/moonbridge-ipc/client/rpc/service/job/ipc_request_job.js +19 -0
- package/dist/moonbridge-ipc/client/rpc/service/job/ipc_request_job.js.map +1 -1
- package/dist/moonbridge-ipc/client/rpc/service/job/ipc_request_job.mjs +19 -0
- package/dist/moonbridge-ipc/client/rpc/service/job/ipc_request_job.mjs.map +1 -1
- package/dist/moonbridge-ipc/client/types/ipc_messenger.d.ts +30 -22
- package/dist/moonbridge-ipc/client/types/ipc_messenger.d.ts.map +1 -1
- package/dist/moonbridge-ipc/index.d.ts +1 -0
- package/dist/moonbridge-ipc/index.d.ts.map +1 -1
- package/dist/moonbridge-ipc/index.js +7 -0
- package/dist/moonbridge-ipc/index.mjs +1 -0
- package/package.json +2 -2
- package/src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts +66 -32
- package/src/moonbridge-ipc/client/moonbridge_ipc_client.ts +6 -1
- package/src/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.ts +7 -7
- package/src/moonbridge-ipc/client/rpc/rpc_service_factory.ts +61 -0
- package/src/moonbridge-ipc/client/rpc/service/job/ipc_request_job.ts +24 -0
- package/src/moonbridge-ipc/client/types/ipc_messenger.ts +31 -28
- package/src/moonbridge-ipc/index.ts +1 -0
- package/tests/unit/ipc_messenger.route.test.ts +71 -0
- package/tests/unit/rpc_service_factory.test.ts +94 -0
- package/tests/unit/rpc_service_proxy.test.ts +63 -17
package/README.md
CHANGED
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
- `connect(onResult?)`
|
|
49
49
|
- `disconnect()`
|
|
50
50
|
- `isConnected()`
|
|
51
|
-
- `messenger.
|
|
52
|
-
- `
|
|
51
|
+
- `messenger.call(target).args(...).onError(...).strategy(...).send()`
|
|
52
|
+
- `rpcServiceFactory.createService(ServiceType, clientName?)`
|
|
53
53
|
- `eventBus.register(subscriber)`
|
|
54
54
|
- `eventBus.unregister(subscriber)`
|
|
55
55
|
- `eventBus.post(event)`
|
|
@@ -191,13 +191,12 @@ export class CallModule extends BridgeModule {
|
|
|
191
191
|
### 4.5 客户端发送消息
|
|
192
192
|
|
|
193
193
|
```ts
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
{
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
);
|
|
194
|
+
// 方式:call(推荐)
|
|
195
|
+
client.messenger
|
|
196
|
+
.call({ clientName: 'client_b', moduleName: 'CallPhone', methodName: 'callWithCallback' })
|
|
197
|
+
.args('0431-4610123', (response) => console.log('response:', response))
|
|
198
|
+
.onError((error) => console.error('ipc error:', error))
|
|
199
|
+
.send();
|
|
201
200
|
```
|
|
202
201
|
|
|
203
202
|
### 4.6 EventBus(订阅与发布)
|
|
@@ -242,7 +241,7 @@ const client = MoonBridgeIpcClient.builder()
|
|
|
242
241
|
.build();
|
|
243
242
|
```
|
|
244
243
|
|
|
245
|
-
### 4.8 RPC 风格调用(装饰器 +
|
|
244
|
+
### 4.8 RPC 风格调用(装饰器 + rpcServiceFactory)
|
|
246
245
|
|
|
247
246
|
```ts
|
|
248
247
|
import {
|
|
@@ -257,13 +256,14 @@ import {
|
|
|
257
256
|
abstract class CallPhoneService {
|
|
258
257
|
@IpcCallRetry({ retries: 3 })
|
|
259
258
|
@IpcRemoteCall({ module: 'CallPhone', method: 'callPhone' })
|
|
260
|
-
|
|
259
|
+
callPhone(_number: string): IpcRequestJob {
|
|
260
|
+
return IpcRequestJob.stub();
|
|
261
|
+
}
|
|
261
262
|
|
|
262
263
|
@IpcRemoteCall({ module: 'CallPhone', method: 'callWithCallback' })
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
): IpcRequestJob;
|
|
264
|
+
callPhoneWithCallback(_number: string, _onResponse: (response: unknown[]) => void): IpcRequestJob {
|
|
265
|
+
return IpcRequestJob.stub();
|
|
266
|
+
}
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
const client = MoonBridgeIpcClient.builder()
|
|
@@ -271,7 +271,7 @@ const client = MoonBridgeIpcClient.builder()
|
|
|
271
271
|
// ...省略 useWebSocketChannel(...)
|
|
272
272
|
.build(true);
|
|
273
273
|
|
|
274
|
-
const service = client.
|
|
274
|
+
const service = client.rpcServiceFactory.createService(CallPhoneService);
|
|
275
275
|
|
|
276
276
|
service?.callPhone('11111').onIpcError((error) => {
|
|
277
277
|
console.error('IPC error:', error);
|
|
@@ -300,7 +300,7 @@ service?.callPhoneWithCallback('176****0000', (response) => {
|
|
|
300
300
|
4. `useTls: true`(`wss`)当前未实现,需使用 `ws`。
|
|
301
301
|
5. 服务端如果不配置 `clientIdentityProviders`,客户端会因白名单校验失败而无法完成注册。
|
|
302
302
|
6. 模块通过装饰器运行时注册,模块文件必须被加载(import)后才能生效。
|
|
303
|
-
7. RPC 服务代理依赖装饰器元数据:服务类型需使用 `@IpcRemoteClient` 和 `@IpcRemoteCall` 标注后再通过 `
|
|
303
|
+
7. RPC 服务代理依赖装饰器元数据:服务类型需使用 `@IpcRemoteClient` 和 `@IpcRemoteCall` 标注后再通过 `client.rpcServiceFactory.createService(...)` 创建。
|
|
304
304
|
|
|
305
305
|
## 7. 开发命令
|
|
306
306
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { IpcClientSettings } from './settings/ipc_client_settings';
|
|
5
5
|
import { IpcConnectionCompletionHandler } from '../types/ipc_types';
|
|
6
6
|
import { MoonBridgeIpcClient } from '../moonbridge_ipc_client';
|
|
7
|
-
import { Messenger, MessageEndpoint,
|
|
7
|
+
import { Messenger, MessageEndpoint, RoutedMessage } from '../types/ipc_messenger';
|
|
8
8
|
import { EventBus } from '../types/ipc_event_bus';
|
|
9
9
|
import { IpcClientComponentProvider } from './ipc/ipc_client_component_provider';
|
|
10
10
|
import { IpcConnectionManager } from './ipc/connect/ipc_connection_manager';
|
|
@@ -13,7 +13,7 @@ import { IpcCommunicationAgent } from './ipc/communication/ipc_communication_age
|
|
|
13
13
|
import { IpcEventBus } from './ipc/eventbus/ipc_event_bus';
|
|
14
14
|
import { IpcConnectionKeeper } from './ipc/keep/ipc_connection_keeper';
|
|
15
15
|
import { IpcClientBridge } from './bridge/ipc_client_bridge';
|
|
16
|
-
import {
|
|
16
|
+
import { RpcServiceFactory } from '../rpc/rpc_service_factory';
|
|
17
17
|
/**
|
|
18
18
|
* 实际 IPC 客户端实现:继承组件装配,并实现 MoonBridgeIpcClient、Messenger。
|
|
19
19
|
* 装配顺序与 Flutter RealMoonBridgeIpcClient 一致;JS 不传入 moduleFactories(见 spec 012)。
|
|
@@ -26,6 +26,7 @@ export declare class RealMoonBridgeIpcClient implements IpcClientComponentProvid
|
|
|
26
26
|
readonly ipcEventBus: IpcEventBus;
|
|
27
27
|
readonly connectionKeeper: IpcConnectionKeeper;
|
|
28
28
|
readonly bridge: IpcClientBridge;
|
|
29
|
+
readonly rpcServiceFactory: RpcServiceFactory;
|
|
29
30
|
constructor(settings: IpcClientSettings);
|
|
30
31
|
get clientName(): string;
|
|
31
32
|
connect(onResult?: IpcConnectionCompletionHandler): void;
|
|
@@ -33,9 +34,8 @@ export declare class RealMoonBridgeIpcClient implements IpcClientComponentProvid
|
|
|
33
34
|
isConnected(): boolean;
|
|
34
35
|
get messenger(): Messenger;
|
|
35
36
|
get eventBus(): EventBus;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
getService<T>(serviceType: RpcServiceType<T>, clientName?: string): T | undefined;
|
|
37
|
+
call(target: MessageEndpoint): RoutedMessage;
|
|
38
|
+
private sendMessage;
|
|
39
39
|
private realPostMessage;
|
|
40
40
|
}
|
|
41
41
|
//# sourceMappingURL=moonbridge_ipc_client.internal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moonbridge_ipc_client.internal.d.ts","sourceRoot":"","sources":["../../../../src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,8BAA8B,EAAoB,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"moonbridge_ipc_client.internal.d.ts","sourceRoot":"","sources":["../../../../src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,8BAA8B,EAAoB,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAA4B,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEzF;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,0BAA0B,EAAE,mBAAmB,EAAE,SAAS;IACxG,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;IACjD,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IACnD,QAAQ,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;gBAIlC,QAAQ,EAAE,iBAAiB;IAuBvC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,OAAO,CAAC,QAAQ,CAAC,EAAE,8BAA8B,GAAG,IAAI;IAKlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,WAAW,IAAI,OAAO;IAItB,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa;IAgB5C,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,eAAe;CAqCxB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var ipc_message_strategy = require('../types/ipc_message_strategy');
|
|
3
4
|
var logger = require('../../utils/logger');
|
|
4
5
|
var ipc_connection_manager = require('./ipc/connect/ipc_connection_manager');
|
|
5
6
|
var ipc_request_coordinator = require('./ipc/coordinator/ipc_request_coordinator');
|
|
@@ -7,7 +8,7 @@ var ipc_communication_agent = require('./ipc/communication/ipc_communication_age
|
|
|
7
8
|
var ipc_event_bus = require('./ipc/eventbus/ipc_event_bus');
|
|
8
9
|
var ipc_connection_keeper = require('./ipc/keep/ipc_connection_keeper');
|
|
9
10
|
var ipc_client_bridge = require('./bridge/ipc_client_bridge');
|
|
10
|
-
var
|
|
11
|
+
var rpc_service_factory = require('../rpc/rpc_service_factory');
|
|
11
12
|
|
|
12
13
|
class RealMoonBridgeIpcClient {
|
|
13
14
|
// CONSTRUCTOR
|
|
@@ -19,6 +20,7 @@ class RealMoonBridgeIpcClient {
|
|
|
19
20
|
this.ipcEventBus = new ipc_event_bus.IpcEventBus(this);
|
|
20
21
|
this.connectionKeeper = new ipc_connection_keeper.IpcConnectionKeeper(this);
|
|
21
22
|
this.bridge = new ipc_client_bridge.IpcClientBridge(this, this.communicationAgent);
|
|
23
|
+
this.rpcServiceFactory = new rpc_service_factory.DefaultRpcServiceFactory(this);
|
|
22
24
|
this.connectionManager.initialize();
|
|
23
25
|
this.requestCoordinator.initialize();
|
|
24
26
|
this.communicationAgent.initialize();
|
|
@@ -48,11 +50,21 @@ class RealMoonBridgeIpcClient {
|
|
|
48
50
|
get eventBus() {
|
|
49
51
|
return this.ipcEventBus;
|
|
50
52
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
call(target) {
|
|
54
|
+
const baseStrategy = this.settings.messageStrategy;
|
|
55
|
+
const strategy = new ipc_message_strategy.IpcMessageStrategy(
|
|
56
|
+
baseStrategy.retries,
|
|
57
|
+
baseStrategy.autoLaunch
|
|
58
|
+
);
|
|
59
|
+
return new RoutedMessageImpl(
|
|
60
|
+
strategy,
|
|
61
|
+
(args, callStrategy, onError) => {
|
|
62
|
+
this.sendMessage(target, args, callStrategy, onError);
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
// PRIVATE METHODS
|
|
67
|
+
sendMessage(target, args, strategy, onError) {
|
|
56
68
|
const remainingRetries = Math.max(strategy.retries, 0);
|
|
57
69
|
this.realPostMessage(
|
|
58
70
|
target.clientName,
|
|
@@ -64,13 +76,6 @@ class RealMoonBridgeIpcClient {
|
|
|
64
76
|
remainingRetries
|
|
65
77
|
);
|
|
66
78
|
}
|
|
67
|
-
createService(serviceType, clientName) {
|
|
68
|
-
return rpc_service_proxy.createRpcService(this, serviceType, clientName);
|
|
69
|
-
}
|
|
70
|
-
getService(serviceType, clientName) {
|
|
71
|
-
return this.createService(serviceType, clientName);
|
|
72
|
-
}
|
|
73
|
-
// PRIVATE METHODS
|
|
74
79
|
realPostMessage(clientName, moduleName, methodName, argumentsList, onError, strategy, remainingRetries) {
|
|
75
80
|
const request = this.requestCoordinator.prepareAndCreateIpcRequest({
|
|
76
81
|
toClient: clientName,
|
|
@@ -100,6 +105,32 @@ class RealMoonBridgeIpcClient {
|
|
|
100
105
|
);
|
|
101
106
|
}
|
|
102
107
|
}
|
|
108
|
+
class RoutedMessageImpl {
|
|
109
|
+
constructor(strategy, dispatch) {
|
|
110
|
+
this.dispatch = dispatch;
|
|
111
|
+
this.argsList = [];
|
|
112
|
+
this.currentStrategy = strategy;
|
|
113
|
+
}
|
|
114
|
+
args(...argsOrList) {
|
|
115
|
+
if (argsOrList.length === 1 && Array.isArray(argsOrList[0])) {
|
|
116
|
+
this.argsList = [...argsOrList[0]];
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
this.argsList = [...argsOrList];
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
strategy(strategy) {
|
|
123
|
+
this.currentStrategy = strategy;
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
onError(onError) {
|
|
127
|
+
this.errorCallback = onError;
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
send() {
|
|
131
|
+
this.dispatch(this.argsList, this.currentStrategy, this.errorCallback);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
103
134
|
|
|
104
135
|
exports.RealMoonBridgeIpcClient = RealMoonBridgeIpcClient;
|
|
105
136
|
//# sourceMappingURL=moonbridge_ipc_client.internal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts"],"names":["IpcConnectionManager","IpcRequestCoordinator","IpcCommunicationAgent","IpcEventBus","IpcConnectionKeeper","IpcClientBridge","logger","createRpcService"],"mappings":"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","file":"moonbridge_ipc_client.internal.js","sourcesContent":["/**\n * MoonBridge IPC 客户端实际实现与注册表,对应 Flutter lib/client/internal/moonbridge_ipc_client.internal.dart。\n */\n\nimport { IpcClientSettings } from './settings/ipc_client_settings';\nimport { IpcMessageStrategy } from '../types/ipc_message_strategy';\nimport { IpcConnectionCompletionHandler, IpcErrorCallback } from '../types/ipc_types';\nimport { MoonBridgeIpcClient } from '../moonbridge_ipc_client';\nimport { Messenger, MessageEndpoint, MessageCallOptions } from '../types/ipc_messenger';\nimport { EventBus } from '../types/ipc_event_bus';\nimport { logger } from '../../utils/logger';\nimport { IpcClientComponentProvider } from './ipc/ipc_client_component_provider';\nimport { IpcConnectionManager } from './ipc/connect/ipc_connection_manager';\nimport { IpcRequestCoordinator } from './ipc/coordinator/ipc_request_coordinator';\nimport { IpcCommunicationAgent } from './ipc/communication/ipc_communication_agent';\nimport { IpcEventBus } from './ipc/eventbus/ipc_event_bus';\nimport { IpcConnectionKeeper } from './ipc/keep/ipc_connection_keeper';\nimport { IpcClientBridge } from './bridge/ipc_client_bridge';\nimport { createRpcService } from '../rpc/internal/rpc_service_proxy';\nimport { RpcServiceType } from '../rpc/rpc_annotation';\n\n/**\n * 实际 IPC 客户端实现:继承组件装配,并实现 MoonBridgeIpcClient、Messenger。\n * 装配顺序与 Flutter RealMoonBridgeIpcClient 一致;JS 不传入 moduleFactories(见 spec 012)。\n */\nexport class RealMoonBridgeIpcClient implements IpcClientComponentProvider, MoonBridgeIpcClient, Messenger {\n readonly settings: IpcClientSettings;\n readonly connectionManager: IpcConnectionManager;\n readonly requestCoordinator: IpcRequestCoordinator;\n readonly communicationAgent: IpcCommunicationAgent;\n readonly ipcEventBus: IpcEventBus;\n readonly connectionKeeper: IpcConnectionKeeper;\n readonly bridge: IpcClientBridge;\n\n // CONSTRUCTOR\n\n constructor(settings: IpcClientSettings) {\n this.settings = settings;\n\n this.connectionManager = new IpcConnectionManager(this);\n this.requestCoordinator = new IpcRequestCoordinator(this);\n this.communicationAgent = new IpcCommunicationAgent(this);\n this.ipcEventBus = new IpcEventBus(this);\n this.connectionKeeper = new IpcConnectionKeeper(this);\n this.bridge = new IpcClientBridge(this, this.communicationAgent);\n\n this.connectionManager.initialize();\n this.requestCoordinator.initialize();\n this.communicationAgent.initialize();\n this.ipcEventBus.initialize();\n this.connectionKeeper.initialize();\n this.bridge.initialize();\n\n logger.info(`[MoonBridgeIpcClient] 客户端 \"${settings.clientName}\" 已创建`);\n }\n\n // PUBLIC METHODS\n\n get clientName(): string {\n return this.settings.clientName;\n }\n\n connect(onResult?: IpcConnectionCompletionHandler): void {\n this.connectionManager.connect(onResult);\n this.connectionKeeper.startHeartbeat();\n }\n\n async disconnect(): Promise<void> {\n await this.connectionManager.disconnect();\n this.connectionKeeper.stopHeartbeat();\n }\n\n isConnected(): boolean {\n return this.connectionManager.isConnected();\n }\n\n get messenger(): Messenger {\n return this;\n }\n\n get eventBus(): EventBus {\n return this.ipcEventBus;\n }\n\n postMessage(\n target: MessageEndpoint,\n argsOrOptions?: unknown[] | MessageCallOptions,\n ): void {\n const args = Array.isArray(argsOrOptions)\n ? argsOrOptions\n : (argsOrOptions?.args ?? []);\n const strategy =\n argsOrOptions && !Array.isArray(argsOrOptions)\n ? argsOrOptions.strategy ?? this.settings.messageStrategy\n : this.settings.messageStrategy;\n const onError =\n argsOrOptions && !Array.isArray(argsOrOptions)\n ? argsOrOptions.onError\n : undefined;\n const remainingRetries = Math.max(strategy.retries, 0);\n this.realPostMessage(\n target.clientName,\n target.moduleName,\n target.methodName,\n args,\n onError,\n strategy,\n remainingRetries,\n );\n }\n\n createService<T>(\n serviceType: RpcServiceType<T>,\n clientName?: string,\n ): T | undefined {\n return createRpcService(this, serviceType, clientName);\n }\n\n getService<T>(\n serviceType: RpcServiceType<T>,\n clientName?: string,\n ): T | undefined {\n return this.createService(serviceType, clientName);\n }\n\n // PRIVATE METHODS\n\n private realPostMessage(\n clientName: string,\n moduleName: string,\n methodName: string,\n argumentsList: unknown[],\n onError: IpcErrorCallback | undefined,\n strategy: IpcMessageStrategy,\n remainingRetries: number,\n ): void {\n const request = this.requestCoordinator.prepareAndCreateIpcRequest({\n toClient: clientName,\n moduleName,\n methodName,\n arguments: argumentsList,\n onError,\n });\n\n this.communicationAgent.sendRequestAfterSetupSession(\n request,\n strategy,\n (success, error) => {\n if (remainingRetries - 1 <= 0) {\n if (!success && error) onError?.(error);\n return;\n }\n this.realPostMessage(\n clientName,\n moduleName,\n methodName,\n argumentsList,\n onError,\n strategy,\n remainingRetries - 1,\n );\n },\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts"],"names":["IpcConnectionManager","IpcRequestCoordinator","IpcCommunicationAgent","IpcEventBus","IpcConnectionKeeper","IpcClientBridge","DefaultRpcServiceFactory","logger","IpcMessageStrategy"],"mappings":"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","file":"moonbridge_ipc_client.internal.js","sourcesContent":["/**\n * MoonBridge IPC 客户端实际实现与注册表,对应 Flutter lib/client/internal/moonbridge_ipc_client.internal.dart。\n */\n\nimport { IpcClientSettings } from './settings/ipc_client_settings';\nimport { IpcMessageStrategy } from '../types/ipc_message_strategy';\nimport { IpcConnectionCompletionHandler, IpcErrorCallback } from '../types/ipc_types';\nimport { MoonBridgeIpcClient } from '../moonbridge_ipc_client';\nimport { Messenger, MessageEndpoint, RoutedMessage } from '../types/ipc_messenger';\nimport { EventBus } from '../types/ipc_event_bus';\nimport { logger } from '../../utils/logger';\nimport { IpcClientComponentProvider } from './ipc/ipc_client_component_provider';\nimport { IpcConnectionManager } from './ipc/connect/ipc_connection_manager';\nimport { IpcRequestCoordinator } from './ipc/coordinator/ipc_request_coordinator';\nimport { IpcCommunicationAgent } from './ipc/communication/ipc_communication_agent';\nimport { IpcEventBus } from './ipc/eventbus/ipc_event_bus';\nimport { IpcConnectionKeeper } from './ipc/keep/ipc_connection_keeper';\nimport { IpcClientBridge } from './bridge/ipc_client_bridge';\nimport { DefaultRpcServiceFactory, RpcServiceFactory } from '../rpc/rpc_service_factory';\n\n/**\n * 实际 IPC 客户端实现:继承组件装配,并实现 MoonBridgeIpcClient、Messenger。\n * 装配顺序与 Flutter RealMoonBridgeIpcClient 一致;JS 不传入 moduleFactories(见 spec 012)。\n */\nexport class RealMoonBridgeIpcClient implements IpcClientComponentProvider, MoonBridgeIpcClient, Messenger {\n readonly settings: IpcClientSettings;\n readonly connectionManager: IpcConnectionManager;\n readonly requestCoordinator: IpcRequestCoordinator;\n readonly communicationAgent: IpcCommunicationAgent;\n readonly ipcEventBus: IpcEventBus;\n readonly connectionKeeper: IpcConnectionKeeper;\n readonly bridge: IpcClientBridge;\n readonly rpcServiceFactory: RpcServiceFactory;\n\n // CONSTRUCTOR\n\n constructor(settings: IpcClientSettings) {\n this.settings = settings;\n\n this.connectionManager = new IpcConnectionManager(this);\n this.requestCoordinator = new IpcRequestCoordinator(this);\n this.communicationAgent = new IpcCommunicationAgent(this);\n this.ipcEventBus = new IpcEventBus(this);\n this.connectionKeeper = new IpcConnectionKeeper(this);\n this.bridge = new IpcClientBridge(this, this.communicationAgent);\n this.rpcServiceFactory = new DefaultRpcServiceFactory(this);\n\n this.connectionManager.initialize();\n this.requestCoordinator.initialize();\n this.communicationAgent.initialize();\n this.ipcEventBus.initialize();\n this.connectionKeeper.initialize();\n this.bridge.initialize();\n\n logger.info(`[MoonBridgeIpcClient] 客户端 \"${settings.clientName}\" 已创建`);\n }\n\n // PUBLIC METHODS\n\n get clientName(): string {\n return this.settings.clientName;\n }\n\n connect(onResult?: IpcConnectionCompletionHandler): void {\n this.connectionManager.connect(onResult);\n this.connectionKeeper.startHeartbeat();\n }\n\n async disconnect(): Promise<void> {\n await this.connectionManager.disconnect();\n this.connectionKeeper.stopHeartbeat();\n }\n\n isConnected(): boolean {\n return this.connectionManager.isConnected();\n }\n\n get messenger(): Messenger {\n return this;\n }\n\n get eventBus(): EventBus {\n return this.ipcEventBus;\n }\n\n call(target: MessageEndpoint): RoutedMessage {\n const baseStrategy = this.settings.messageStrategy;\n const strategy = new IpcMessageStrategy(\n baseStrategy.retries,\n baseStrategy.autoLaunch,\n );\n return new RoutedMessageImpl(\n strategy,\n (args, callStrategy, onError) => {\n this.sendMessage(target, args, callStrategy, onError);\n },\n );\n }\n\n // PRIVATE METHODS\n\n private sendMessage(\n target: MessageEndpoint,\n args: unknown[],\n strategy: IpcMessageStrategy,\n onError?: IpcErrorCallback,\n ): void {\n const remainingRetries = Math.max(strategy.retries, 0);\n this.realPostMessage(\n target.clientName,\n target.moduleName,\n target.methodName,\n args,\n onError,\n strategy,\n remainingRetries,\n );\n }\n\n private realPostMessage(\n clientName: string,\n moduleName: string,\n methodName: string,\n argumentsList: unknown[],\n onError: IpcErrorCallback | undefined,\n strategy: IpcMessageStrategy,\n remainingRetries: number,\n ): void {\n const request = this.requestCoordinator.prepareAndCreateIpcRequest({\n toClient: clientName,\n moduleName,\n methodName,\n arguments: argumentsList,\n onError,\n });\n\n this.communicationAgent.sendRequestAfterSetupSession(\n request,\n strategy,\n (success, error) => {\n if (remainingRetries - 1 <= 0) {\n if (!success && error) onError?.(error);\n return;\n }\n this.realPostMessage(\n clientName,\n moduleName,\n methodName,\n argumentsList,\n onError,\n strategy,\n remainingRetries - 1,\n );\n },\n );\n }\n}\n\nclass RoutedMessageImpl implements RoutedMessage {\n private argsList: unknown[] = [];\n private currentStrategy: IpcMessageStrategy;\n private errorCallback?: IpcErrorCallback;\n\n constructor(\n strategy: IpcMessageStrategy,\n private readonly dispatch: (\n args: unknown[],\n strategy: IpcMessageStrategy,\n onError?: IpcErrorCallback,\n ) => void,\n ) {\n this.currentStrategy = strategy;\n }\n\n args(args: unknown[]): RoutedMessage;\n args(...args: unknown[]): RoutedMessage;\n args(...argsOrList: unknown[]): RoutedMessage {\n if (argsOrList.length === 1 && Array.isArray(argsOrList[0])) {\n this.argsList = [...(argsOrList[0] as unknown[])];\n return this;\n }\n this.argsList = [...argsOrList];\n return this;\n }\n\n strategy(strategy: IpcMessageStrategy): RoutedMessage {\n this.currentStrategy = strategy;\n return this;\n }\n\n onError(onError?: IpcErrorCallback): RoutedMessage {\n this.errorCallback = onError;\n return this;\n }\n\n send(): void {\n this.dispatch(this.argsList, this.currentStrategy, this.errorCallback);\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IpcMessageStrategy } from '../types/ipc_message_strategy';
|
|
1
2
|
import { logger } from '../../utils/logger';
|
|
2
3
|
import { IpcConnectionManager } from './ipc/connect/ipc_connection_manager';
|
|
3
4
|
import { IpcRequestCoordinator } from './ipc/coordinator/ipc_request_coordinator';
|
|
@@ -5,7 +6,7 @@ import { IpcCommunicationAgent } from './ipc/communication/ipc_communication_age
|
|
|
5
6
|
import { IpcEventBus } from './ipc/eventbus/ipc_event_bus';
|
|
6
7
|
import { IpcConnectionKeeper } from './ipc/keep/ipc_connection_keeper';
|
|
7
8
|
import { IpcClientBridge } from './bridge/ipc_client_bridge';
|
|
8
|
-
import {
|
|
9
|
+
import { DefaultRpcServiceFactory } from '../rpc/rpc_service_factory';
|
|
9
10
|
|
|
10
11
|
class RealMoonBridgeIpcClient {
|
|
11
12
|
// CONSTRUCTOR
|
|
@@ -17,6 +18,7 @@ class RealMoonBridgeIpcClient {
|
|
|
17
18
|
this.ipcEventBus = new IpcEventBus(this);
|
|
18
19
|
this.connectionKeeper = new IpcConnectionKeeper(this);
|
|
19
20
|
this.bridge = new IpcClientBridge(this, this.communicationAgent);
|
|
21
|
+
this.rpcServiceFactory = new DefaultRpcServiceFactory(this);
|
|
20
22
|
this.connectionManager.initialize();
|
|
21
23
|
this.requestCoordinator.initialize();
|
|
22
24
|
this.communicationAgent.initialize();
|
|
@@ -46,11 +48,21 @@ class RealMoonBridgeIpcClient {
|
|
|
46
48
|
get eventBus() {
|
|
47
49
|
return this.ipcEventBus;
|
|
48
50
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
call(target) {
|
|
52
|
+
const baseStrategy = this.settings.messageStrategy;
|
|
53
|
+
const strategy = new IpcMessageStrategy(
|
|
54
|
+
baseStrategy.retries,
|
|
55
|
+
baseStrategy.autoLaunch
|
|
56
|
+
);
|
|
57
|
+
return new RoutedMessageImpl(
|
|
58
|
+
strategy,
|
|
59
|
+
(args, callStrategy, onError) => {
|
|
60
|
+
this.sendMessage(target, args, callStrategy, onError);
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
// PRIVATE METHODS
|
|
65
|
+
sendMessage(target, args, strategy, onError) {
|
|
54
66
|
const remainingRetries = Math.max(strategy.retries, 0);
|
|
55
67
|
this.realPostMessage(
|
|
56
68
|
target.clientName,
|
|
@@ -62,13 +74,6 @@ class RealMoonBridgeIpcClient {
|
|
|
62
74
|
remainingRetries
|
|
63
75
|
);
|
|
64
76
|
}
|
|
65
|
-
createService(serviceType, clientName) {
|
|
66
|
-
return createRpcService(this, serviceType, clientName);
|
|
67
|
-
}
|
|
68
|
-
getService(serviceType, clientName) {
|
|
69
|
-
return this.createService(serviceType, clientName);
|
|
70
|
-
}
|
|
71
|
-
// PRIVATE METHODS
|
|
72
77
|
realPostMessage(clientName, moduleName, methodName, argumentsList, onError, strategy, remainingRetries) {
|
|
73
78
|
const request = this.requestCoordinator.prepareAndCreateIpcRequest({
|
|
74
79
|
toClient: clientName,
|
|
@@ -98,6 +103,32 @@ class RealMoonBridgeIpcClient {
|
|
|
98
103
|
);
|
|
99
104
|
}
|
|
100
105
|
}
|
|
106
|
+
class RoutedMessageImpl {
|
|
107
|
+
constructor(strategy, dispatch) {
|
|
108
|
+
this.dispatch = dispatch;
|
|
109
|
+
this.argsList = [];
|
|
110
|
+
this.currentStrategy = strategy;
|
|
111
|
+
}
|
|
112
|
+
args(...argsOrList) {
|
|
113
|
+
if (argsOrList.length === 1 && Array.isArray(argsOrList[0])) {
|
|
114
|
+
this.argsList = [...argsOrList[0]];
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
this.argsList = [...argsOrList];
|
|
118
|
+
return this;
|
|
119
|
+
}
|
|
120
|
+
strategy(strategy) {
|
|
121
|
+
this.currentStrategy = strategy;
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
onError(onError) {
|
|
125
|
+
this.errorCallback = onError;
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
send() {
|
|
129
|
+
this.dispatch(this.argsList, this.currentStrategy, this.errorCallback);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
101
132
|
|
|
102
133
|
export { RealMoonBridgeIpcClient };
|
|
103
134
|
//# sourceMappingURL=moonbridge_ipc_client.internal.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/moonbridge-ipc/client/internal/moonbridge_ipc_client.internal.ts"],"names":[],"mappings":";;;;;;;;;;AAwBO,MAAM,uBAAA,CAA8F;AAAA;AAAA,EAYzG,YAAY,QAAA,EAA6B;AACvC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAEhB,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,oBAAA,CAAqB,IAAI,CAAA;AACtD,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,qBAAA,CAAsB,IAAI,CAAA;AACxD,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,qBAAA,CAAsB,IAAI,CAAA;AACxD,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,WAAA,CAAY,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,mBAAA,CAAoB,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAA,EAAM,KAAK,kBAAkB,CAAA;AAC/D,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,wBAAA,CAAyB,IAAI,CAAA;AAE1D,IAAA,IAAA,CAAK,kBAAkB,UAAA,EAAW;AAClC,IAAA,IAAA,CAAK,mBAAmB,UAAA,EAAW;AACnC,IAAA,IAAA,CAAK,mBAAmB,UAAA,EAAW;AACnC,IAAA,IAAA,CAAK,YAAY,UAAA,EAAW;AAC5B,IAAA,IAAA,CAAK,iBAAiB,UAAA,EAAW;AACjC,IAAA,IAAA,CAAK,OAAO,UAAA,EAAW;AAEvB,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,0CAAA,EAA8B,QAAA,CAAS,UAAU,CAAA,oBAAA,CAAO,CAAA;AAAA,EACtE;AAAA;AAAA,EAIA,IAAI,UAAA,GAAqB;AACvB,IAAA,OAAO,KAAK,QAAA,CAAS,UAAA;AAAA,EACvB;AAAA,EAEA,QAAQ,QAAA,EAAiD;AACvD,IAAA,IAAA,CAAK,iBAAA,CAAkB,QAAQ,QAAQ,CAAA;AACvC,IAAA,IAAA,CAAK,iBAAiB,cAAA,EAAe;AAAA,EACvC;AAAA,EAEA,MAAM,UAAA,GAA4B;AAChC,IAAA,MAAM,IAAA,CAAK,kBAAkB,UAAA,EAAW;AACxC,IAAA,IAAA,CAAK,iBAAiB,aAAA,EAAc;AAAA,EACtC;AAAA,EAEA,WAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,kBAAkB,WAAA,EAAY;AAAA,EAC5C;AAAA,EAEA,IAAI,SAAA,GAAuB;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,QAAA,GAAqB;AACvB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,KAAK,MAAA,EAAwC;AAC3C,IAAA,MAAM,YAAA,GAAe,KAAK,QAAA,CAAS,eAAA;AACnC,IAAA,MAAM,WAAW,IAAI,kBAAA;AAAA,MACnB,YAAA,CAAa,OAAA;AAAA,MACb,YAAA,CAAa;AAAA,KACf;AACA,IAAA,OAAO,IAAI,iBAAA;AAAA,MACT,QAAA;AAAA,MACA,CAAC,IAAA,EAAM,YAAA,EAAc,OAAA,KAAY;AAC/B,QAAA,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ,IAAA,EAAM,YAAA,EAAc,OAAO,CAAA;AAAA,MACtD;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAIQ,WAAA,CACN,MAAA,EACA,IAAA,EACA,QAAA,EACA,OAAA,EACM;AACN,IAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,SAAS,CAAC,CAAA;AACrD,IAAA,IAAA,CAAK,eAAA;AAAA,MACH,MAAA,CAAO,UAAA;AAAA,MACP,MAAA,CAAO,UAAA;AAAA,MACP,MAAA,CAAO,UAAA;AAAA,MACP,IAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,gBACN,UAAA,EACA,UAAA,EACA,YACA,aAAA,EACA,OAAA,EACA,UACA,gBAAA,EACM;AACN,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,kBAAA,CAAmB,0BAAA,CAA2B;AAAA,MACjE,QAAA,EAAU,UAAA;AAAA,MACV,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,kBAAA,CAAmB,4BAAA;AAAA,MACtB,OAAA;AAAA,MACA,QAAA;AAAA,MACA,CAAC,SAAS,KAAA,KAAU;AAClB,QAAA,IAAI,gBAAA,GAAmB,KAAK,CAAA,EAAG;AAC7B,UAAA,IAAI,CAAC,OAAA,IAAW,KAAA,EAAO,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AACjC,UAAA;AAAA,QACF;AACA,QAAA,IAAA,CAAK,eAAA;AAAA,UACH,UAAA;AAAA,UACA,UAAA;AAAA,UACA,UAAA;AAAA,UACA,aAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAA;AAAA,UACA,gBAAA,GAAmB;AAAA,SACrB;AAAA,MACF;AAAA,KACF;AAAA,EACF;AACF;AAEA,MAAM,iBAAA,CAA2C;AAAA,EAK/C,WAAA,CACE,UACiB,QAAA,EAKjB;AALiB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AANnB,IAAA,IAAA,CAAQ,WAAsB,EAAC;AAY7B,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AAAA,EACzB;AAAA,EAIA,QAAQ,UAAA,EAAsC;AAC5C,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,IAAK,KAAA,CAAM,QAAQ,UAAA,CAAW,CAAC,CAAC,CAAA,EAAG;AAC3D,MAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAI,UAAA,CAAW,CAAC,CAAe,CAAA;AAChD,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,CAAC,GAAG,UAAU,CAAA;AAC9B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,SAAS,QAAA,EAA6C;AACpD,IAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAQ,OAAA,EAA2C;AACjD,IAAA,IAAA,CAAK,aAAA,GAAgB,OAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,eAAA,EAAiB,KAAK,aAAa,CAAA;AAAA,EACvE;AACF","file":"moonbridge_ipc_client.internal.mjs","sourcesContent":["/**\n * MoonBridge IPC 客户端实际实现与注册表,对应 Flutter lib/client/internal/moonbridge_ipc_client.internal.dart。\n */\n\nimport { IpcClientSettings } from './settings/ipc_client_settings';\nimport { IpcMessageStrategy } from '../types/ipc_message_strategy';\nimport { IpcConnectionCompletionHandler, IpcErrorCallback } from '../types/ipc_types';\nimport { MoonBridgeIpcClient } from '../moonbridge_ipc_client';\nimport { Messenger, MessageEndpoint, RoutedMessage } from '../types/ipc_messenger';\nimport { EventBus } from '../types/ipc_event_bus';\nimport { logger } from '../../utils/logger';\nimport { IpcClientComponentProvider } from './ipc/ipc_client_component_provider';\nimport { IpcConnectionManager } from './ipc/connect/ipc_connection_manager';\nimport { IpcRequestCoordinator } from './ipc/coordinator/ipc_request_coordinator';\nimport { IpcCommunicationAgent } from './ipc/communication/ipc_communication_agent';\nimport { IpcEventBus } from './ipc/eventbus/ipc_event_bus';\nimport { IpcConnectionKeeper } from './ipc/keep/ipc_connection_keeper';\nimport { IpcClientBridge } from './bridge/ipc_client_bridge';\nimport { DefaultRpcServiceFactory, RpcServiceFactory } from '../rpc/rpc_service_factory';\n\n/**\n * 实际 IPC 客户端实现:继承组件装配,并实现 MoonBridgeIpcClient、Messenger。\n * 装配顺序与 Flutter RealMoonBridgeIpcClient 一致;JS 不传入 moduleFactories(见 spec 012)。\n */\nexport class RealMoonBridgeIpcClient implements IpcClientComponentProvider, MoonBridgeIpcClient, Messenger {\n readonly settings: IpcClientSettings;\n readonly connectionManager: IpcConnectionManager;\n readonly requestCoordinator: IpcRequestCoordinator;\n readonly communicationAgent: IpcCommunicationAgent;\n readonly ipcEventBus: IpcEventBus;\n readonly connectionKeeper: IpcConnectionKeeper;\n readonly bridge: IpcClientBridge;\n readonly rpcServiceFactory: RpcServiceFactory;\n\n // CONSTRUCTOR\n\n constructor(settings: IpcClientSettings) {\n this.settings = settings;\n\n this.connectionManager = new IpcConnectionManager(this);\n this.requestCoordinator = new IpcRequestCoordinator(this);\n this.communicationAgent = new IpcCommunicationAgent(this);\n this.ipcEventBus = new IpcEventBus(this);\n this.connectionKeeper = new IpcConnectionKeeper(this);\n this.bridge = new IpcClientBridge(this, this.communicationAgent);\n this.rpcServiceFactory = new DefaultRpcServiceFactory(this);\n\n this.connectionManager.initialize();\n this.requestCoordinator.initialize();\n this.communicationAgent.initialize();\n this.ipcEventBus.initialize();\n this.connectionKeeper.initialize();\n this.bridge.initialize();\n\n logger.info(`[MoonBridgeIpcClient] 客户端 \"${settings.clientName}\" 已创建`);\n }\n\n // PUBLIC METHODS\n\n get clientName(): string {\n return this.settings.clientName;\n }\n\n connect(onResult?: IpcConnectionCompletionHandler): void {\n this.connectionManager.connect(onResult);\n this.connectionKeeper.startHeartbeat();\n }\n\n async disconnect(): Promise<void> {\n await this.connectionManager.disconnect();\n this.connectionKeeper.stopHeartbeat();\n }\n\n isConnected(): boolean {\n return this.connectionManager.isConnected();\n }\n\n get messenger(): Messenger {\n return this;\n }\n\n get eventBus(): EventBus {\n return this.ipcEventBus;\n }\n\n call(target: MessageEndpoint): RoutedMessage {\n const baseStrategy = this.settings.messageStrategy;\n const strategy = new IpcMessageStrategy(\n baseStrategy.retries,\n baseStrategy.autoLaunch,\n );\n return new RoutedMessageImpl(\n strategy,\n (args, callStrategy, onError) => {\n this.sendMessage(target, args, callStrategy, onError);\n },\n );\n }\n\n // PRIVATE METHODS\n\n private sendMessage(\n target: MessageEndpoint,\n args: unknown[],\n strategy: IpcMessageStrategy,\n onError?: IpcErrorCallback,\n ): void {\n const remainingRetries = Math.max(strategy.retries, 0);\n this.realPostMessage(\n target.clientName,\n target.moduleName,\n target.methodName,\n args,\n onError,\n strategy,\n remainingRetries,\n );\n }\n\n private realPostMessage(\n clientName: string,\n moduleName: string,\n methodName: string,\n argumentsList: unknown[],\n onError: IpcErrorCallback | undefined,\n strategy: IpcMessageStrategy,\n remainingRetries: number,\n ): void {\n const request = this.requestCoordinator.prepareAndCreateIpcRequest({\n toClient: clientName,\n moduleName,\n methodName,\n arguments: argumentsList,\n onError,\n });\n\n this.communicationAgent.sendRequestAfterSetupSession(\n request,\n strategy,\n (success, error) => {\n if (remainingRetries - 1 <= 0) {\n if (!success && error) onError?.(error);\n return;\n }\n this.realPostMessage(\n clientName,\n moduleName,\n methodName,\n argumentsList,\n onError,\n strategy,\n remainingRetries - 1,\n );\n },\n );\n }\n}\n\nclass RoutedMessageImpl implements RoutedMessage {\n private argsList: unknown[] = [];\n private currentStrategy: IpcMessageStrategy;\n private errorCallback?: IpcErrorCallback;\n\n constructor(\n strategy: IpcMessageStrategy,\n private readonly dispatch: (\n args: unknown[],\n strategy: IpcMessageStrategy,\n onError?: IpcErrorCallback,\n ) => void,\n ) {\n this.currentStrategy = strategy;\n }\n\n args(args: unknown[]): RoutedMessage;\n args(...args: unknown[]): RoutedMessage;\n args(...argsOrList: unknown[]): RoutedMessage {\n if (argsOrList.length === 1 && Array.isArray(argsOrList[0])) {\n this.argsList = [...(argsOrList[0] as unknown[])];\n return this;\n }\n this.argsList = [...argsOrList];\n return this;\n }\n\n strategy(strategy: IpcMessageStrategy): RoutedMessage {\n this.currentStrategy = strategy;\n return this;\n }\n\n onError(onError?: IpcErrorCallback): RoutedMessage {\n this.errorCallback = onError;\n return this;\n }\n\n send(): void {\n this.dispatch(this.argsList, this.currentStrategy, this.errorCallback);\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MoonBridge IPC 客户端入口类,对应 Flutter lib/client/moonbridge_ipc_client.dart。
|
|
3
|
-
*
|
|
3
|
+
* 定义连接管理、消息发送、RPC 服务工厂与事件总线等公开 API。
|
|
4
4
|
*/
|
|
5
5
|
import { WebSocketServerEndpoint } from '../general/config/websocket_server_endpoint';
|
|
6
6
|
import { AppInstallationPath, AppLaunchIdentifier } from '../general/app_launch/model/app_info';
|
|
@@ -9,6 +9,7 @@ import { IpcMessageStrategy } from './types/ipc_message_strategy';
|
|
|
9
9
|
import { ConnectionObserver, IpcConnectionCompletionHandler, MessageInterceptor } from './types/ipc_types';
|
|
10
10
|
import { EventBus } from './types/ipc_event_bus';
|
|
11
11
|
import { Messenger } from './types/ipc_messenger';
|
|
12
|
+
import { RpcServiceFactory } from './rpc/rpc_service_factory';
|
|
12
13
|
/**
|
|
13
14
|
* MoonBridge IPC 客户端抽象接口
|
|
14
15
|
*/
|
|
@@ -29,6 +30,10 @@ export declare abstract class MoonBridgeIpcClient {
|
|
|
29
30
|
* 事件总线
|
|
30
31
|
*/
|
|
31
32
|
abstract readonly eventBus: EventBus;
|
|
33
|
+
/**
|
|
34
|
+
* RPC 服务工厂
|
|
35
|
+
*/
|
|
36
|
+
abstract readonly rpcServiceFactory: RpcServiceFactory;
|
|
32
37
|
/**
|
|
33
38
|
* 连接到 IPC 服务器
|
|
34
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moonbridge_ipc_client.d.ts","sourceRoot":"","sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":["IpcClientSettings","RealMoonBridgeIpcClient"],"mappings":";;;;;
|
|
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 | undefined): 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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/moonbridge-ipc/client/moonbridge_ipc_client.ts"],"names":[],"mappings":";;;
|
|
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 | undefined): 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc_service_proxy.d.ts","sourceRoot":"","sources":["../../../../../src/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"rpc_service_proxy.d.ts","sourceRoot":"","sources":["../../../../../src/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,EAGL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,CAAC,GAAG,SAAS,CA0Df"}
|
|
@@ -69,12 +69,7 @@ class IpcRequestJobImpl extends ipc_request_job.IpcRequestJob {
|
|
|
69
69
|
return this;
|
|
70
70
|
}
|
|
71
71
|
send() {
|
|
72
|
-
|
|
73
|
-
args: this.args,
|
|
74
|
-
strategy: this.strategy,
|
|
75
|
-
onError: this.errorCallback
|
|
76
|
-
};
|
|
77
|
-
this.messenger.postMessage(this.target, options);
|
|
72
|
+
this.messenger.call(this.target).args(this.args).strategy(this.strategy).onError(this.errorCallback).send();
|
|
78
73
|
}
|
|
79
74
|
}
|
|
80
75
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.ts"],"names":["getRemoteServiceMetadata","IpcMessageStrategy","IpcRequestJob"],"mappings":";;;;;;AAaO,SAAS,gBAAA,CACd,SAAA,EACA,WAAA,EACA,UAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAcA,wCAAyB,WAAW,CAAA;AACxD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAA,GAAqB,kCAAc,WAAA,CAAY,UAAA;AACrD,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAkC;AACxD,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,UAAU,KAAK,WAAA,CAAY,OAAA,CAAQ,SAAQ,EAAG;AACpE,IAAA,IAAI,CAAC,UAAA,CAAW,MAAA,IAAU,CAAC,WAAW,MAAA,EAAQ;AAC5C,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,GAAA,CAAI,YAAY,UAAU,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,IAChB,EAAC;AAAA,IACD;AAAA,MACE,GAAA,CAAI,SAAS,IAAA,EAAe;AAE1B,QAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAO,MAAA;AAAA,QACT;AACA,QAAA,MAAM,UAAA,GAAa,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACrC,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,OAAO,MAAA;AAAA,QACT;AAEA,QAAA,OAAO,IAAI,IAAA,KAAmC;AArDtD,UAAA,IAAA,EAAA,EAAA,EAAA;AAsDU,UAAA,MAAM,WAAW,IAAIC,uCAAA;AAAA,YAAA,CACnB,EAAA,GAAA,UAAA,CAAW,YAAX,IAAA,GAAA,EAAA,GAAsB,CAAA;AAAA,YAAA,CACtB,EAAA,GAAA,UAAA,CAAW,eAAX,IAAA,GAAA,EAAA,GAAyB;AAAA,WAC3B;AAEA,UAAA,OAAO,IAAI,iBAAA;AAAA,YACT,SAAA;AAAA,YACA;AAAA,cACE,UAAA,EAAY,kBAAA;AAAA,cACZ,YAAY,UAAA,CAAW,MAAA;AAAA,cACvB,YAAY,UAAA,CAAW;AAAA,aACzB;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,MACF;AAAA;AACF,GACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,MAAM,0BAA0BC,6BAAA,CAAc;AAAA,EAG5C,WAAA,CACmB,SAAA,EACA,MAAA,EACA,IAAA,EACA,QAAA,EACjB;AACA,IAAA,KAAA,EAAM;AALW,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGnB;AAAA,EAES,WAAW,aAAA,EAAiD;AACnE,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAES,IAAA,GAAa;AACpB,IAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/moonbridge-ipc/client/rpc/internal/rpc_service_proxy.ts"],"names":["getRemoteServiceMetadata","IpcMessageStrategy","IpcRequestJob"],"mappings":";;;;;;AAaO,SAAS,gBAAA,CACd,SAAA,EACA,WAAA,EACA,UAAA,EACe;AACf,EAAA,MAAM,WAAA,GAAcA,wCAAyB,WAAW,CAAA;AACxD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAA,GAAqB,kCAAc,WAAA,CAAY,UAAA;AACrD,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAkC;AACxD,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,UAAU,KAAK,WAAA,CAAY,OAAA,CAAQ,SAAQ,EAAG;AACpE,IAAA,IAAI,CAAC,UAAA,CAAW,MAAA,IAAU,CAAC,WAAW,MAAA,EAAQ;AAC5C,MAAA;AAAA,IACF;AACA,IAAA,SAAA,CAAU,GAAA,CAAI,YAAY,UAAU,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,IAChB,EAAC;AAAA,IACD;AAAA,MACE,GAAA,CAAI,SAAS,IAAA,EAAe;AAE1B,QAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,UAAA,OAAO,MAAA;AAAA,QACT;AACA,QAAA,MAAM,UAAA,GAAa,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACrC,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,OAAO,MAAA;AAAA,QACT;AAEA,QAAA,OAAO,IAAI,IAAA,KAAmC;AArDtD,UAAA,IAAA,EAAA,EAAA,EAAA;AAsDU,UAAA,MAAM,WAAW,IAAIC,uCAAA;AAAA,YAAA,CACnB,EAAA,GAAA,UAAA,CAAW,YAAX,IAAA,GAAA,EAAA,GAAsB,CAAA;AAAA,YAAA,CACtB,EAAA,GAAA,UAAA,CAAW,eAAX,IAAA,GAAA,EAAA,GAAyB;AAAA,WAC3B;AAEA,UAAA,OAAO,IAAI,iBAAA;AAAA,YACT,SAAA;AAAA,YACA;AAAA,cACE,UAAA,EAAY,kBAAA;AAAA,cACZ,YAAY,UAAA,CAAW,MAAA;AAAA,cACvB,YAAY,UAAA,CAAW;AAAA,aACzB;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA;AAAA,MACF;AAAA;AACF,GACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,MAAM,0BAA0BC,6BAAA,CAAc;AAAA,EAG5C,WAAA,CACmB,SAAA,EACA,MAAA,EACA,IAAA,EACA,QAAA,EACjB;AACA,IAAA,KAAA,EAAM;AALW,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGnB;AAAA,EAES,WAAW,aAAA,EAAiD;AACnE,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAES,IAAA,GAAa;AACpB,IAAA,IAAA,CAAK,UACF,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA,CAChB,KAAK,IAAA,CAAK,IAAI,CAAA,CACd,QAAA,CAAS,KAAK,QAAQ,CAAA,CACtB,QAAQ,IAAA,CAAK,aAAa,EAC1B,IAAA,EAAK;AAAA,EACV;AACF","file":"rpc_service_proxy.js","sourcesContent":["import { IpcMessageStrategy } from '../../types/ipc_message_strategy';\nimport { MessageEndpoint, Messenger } from '../../types/ipc_messenger';\nimport { IpcErrorCallback } from '../../types/ipc_types';\nimport {\n getRemoteServiceMetadata,\n RemoteMethodMetadata,\n RpcServiceType,\n} from '../rpc_annotation';\nimport { IpcRequestJob } from '../service/job/ipc_request_job';\n\n/**\n * 基于装饰器元数据创建 RPC 服务代理。\n */\nexport function createRpcService<T>(\n messenger: Messenger,\n serviceType: RpcServiceType<T>,\n clientName?: string,\n): T | undefined {\n const serviceMeta = getRemoteServiceMetadata(serviceType);\n if (!serviceMeta) {\n return undefined;\n }\n\n const resolvedClientName = clientName ?? serviceMeta.clientName;\n if (!resolvedClientName) {\n return undefined;\n }\n\n const methodMap = new Map<string, RemoteMethodMetadata>();\n for (const [methodName, methodMeta] of serviceMeta.methods.entries()) {\n if (!methodMeta.module || !methodMeta.method) {\n continue;\n }\n methodMap.set(methodName, methodMeta);\n }\n\n if (methodMap.size === 0) {\n return undefined;\n }\n\n const proxy = new Proxy(\n {},\n {\n get(_target, prop): unknown {\n // eslint-disable-next-line no-restricted-syntax -- typeof 判定仅用于运行时类型收窄\n if (typeof prop !== 'string') {\n return undefined;\n }\n const methodMeta = methodMap.get(prop);\n if (!methodMeta) {\n return undefined;\n }\n\n return (...args: unknown[]): IpcRequestJob => {\n const strategy = new IpcMessageStrategy(\n methodMeta.retries ?? 1,\n methodMeta.autoLaunch ?? true,\n );\n\n return new IpcRequestJobImpl(\n messenger,\n {\n clientName: resolvedClientName,\n moduleName: methodMeta.module!,\n methodName: methodMeta.method!,\n },\n args,\n strategy,\n );\n };\n },\n },\n );\n\n return proxy as T;\n}\n\nclass IpcRequestJobImpl extends IpcRequestJob {\n private errorCallback?: IpcErrorCallback;\n\n constructor(\n private readonly messenger: Messenger,\n private readonly target: MessageEndpoint,\n private readonly args: unknown[],\n private readonly strategy: IpcMessageStrategy,\n ) {\n super();\n }\n\n override onIpcError(errorCallback?: IpcErrorCallback): IpcRequestJob {\n this.errorCallback = errorCallback;\n return this;\n }\n\n override send(): void {\n this.messenger\n .call(this.target)\n .args(this.args)\n .strategy(this.strategy)\n .onError(this.errorCallback)\n .send();\n }\n}\n"]}
|
|
@@ -67,12 +67,7 @@ class IpcRequestJobImpl extends IpcRequestJob {
|
|
|
67
67
|
return this;
|
|
68
68
|
}
|
|
69
69
|
send() {
|
|
70
|
-
|
|
71
|
-
args: this.args,
|
|
72
|
-
strategy: this.strategy,
|
|
73
|
-
onError: this.errorCallback
|
|
74
|
-
};
|
|
75
|
-
this.messenger.postMessage(this.target, options);
|
|
70
|
+
this.messenger.call(this.target).args(this.args).strategy(this.strategy).onError(this.errorCallback).send();
|
|
76
71
|
}
|
|
77
72
|
}
|
|
78
73
|
|