DesktopHostTransport
Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:21
renderer 与 host 之间的传输层。
Remarks
刻意收得极窄:Electron 下由 preload 通过 contextBridge 暴露这两个方法,
renderer 因此拿不到原始 ipcRenderer,也就无法向任意频道发消息。
换成 MessagePort 或 worker_threads 时只要满足同样的两个方法即可,客户端无需改动。
Methods
request()
request(payload): Promise<unknown>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:32
发一条请求并等待应答。
Parameters
| Parameter | Type | Description |
|---|---|---|
payload | | DesktopHostFileRequest | DesktopHostRequest | DesktopPgliteRequest | 协议请求 |
Returns
Promise<unknown>
host 的未校验应答负载
Remarks
SQLite、文件与 PGlite 三族请求共用同一条通道:preload 暴露的方法名已被 e2e 的
bridgeKeys 断言冻结,另开一条等于新增方法。分派由 host 侧的路由按 kind 完成。
subscribe()
subscribe(listener): () => void;
Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:39
订阅 host 主动推送的消息。
Parameters
| Parameter | Type | Description |
|---|---|---|
listener | (message) => void | 消息回调 |
Returns
取消订阅的函数
() => void
subscriptionReady()?
optional subscriptionReady(): Promise<void>;
Defined in: packages/rxdb-adapter-sqlite-core/dist/desktop/desktop-sqlite-client.d.ts:56
上一次 DesktopHostTransport.subscribe 触发的通道注册是否已经生效。
Returns
Promise<void>
通道就绪时兑现;注册失败时以原始原因 reject
Remarks
subscribe() 必须同步返回退订函数,所以它交不出「通道已经建好」这个时刻。
而 Tauri 的 listen 是异步的:注册落定之前 host 那边 emit 出去的变更事件
不会送到任何人手里。connect() 一返回调用方就开始写库,丢的恰好是建库后的第一批
变更,表现为「首屏不刷新」——所以就绪状态必须能被等待,而不是靠延时去赌。
省略即表示订阅在 subscribe() 返回时就已生效:Electron 侧的
ipcRenderer.on 是同步的,没有可等待的中间态,此处如实留空即可
(preload 的桥接键集被 e2e 的 bridgeKeys 断言冻结,也加不进来)。
传输层若是异步建通道,就必须实现它。