收口桌面网络桥接响应边界

将 Tauri network.status 响应映射收口到 network 模块

让桌面 dispatch 只委托网络状态请求

同步桌面壳配置门禁和共享记忆
This commit is contained in:
2026-06-19 23:50:13 +08:00
parent 2f37a143f1
commit 3d4657432a
4 changed files with 18 additions and 8 deletions
+5 -2
View File
@@ -1793,16 +1793,19 @@ for (const snippet of [
if (
!desktopHostBridgeDispatchSource.includes(
'resolve_desktop_host_bridge_network_status().await',
'resolve_desktop_host_bridge_network_status(&request).await',
) ||
desktopHostBridgeDispatchSource.includes('resolve_desktop_network_status') ||
desktopHostBridgeDispatchSource.includes('spawn_blocking(resolve_desktop_network_status)')
desktopHostBridgeDispatchSource.includes('spawn_blocking(resolve_desktop_network_status)') ||
desktopHostBridgeDispatchSource.includes('Err(error) => failed(request.id, "host_error"')
) {
throw new Error('desktop shell network HostBridge method must delegate to network module');
}
for (const snippet of [
'resolve_desktop_host_bridge_network_status',
'resolve_desktop_host_bridge_network_status_payload',
'spawn_blocking(resolve_desktop_network_status)',
'failed(request.id.clone(), "host_error", error)',
]) {
if (!desktopHostBridgeNetworkSource.includes(snippet)) {
throw new Error(`desktop shell network module is missing ${snippet}`);
@@ -67,10 +67,7 @@ pub(super) async fn execute_host_bridge_request(
Ok(()) => ok(request.id, json!(true)),
Err(response) => response,
},
"network.status" => match resolve_desktop_host_bridge_network_status().await {
Ok(status) => ok(request.id, status),
Err(error) => failed(request.id, "host_error", error.to_string()),
},
"network.status" => resolve_desktop_host_bridge_network_status(&request).await,
"notification.showLocal" => match show_desktop_local_notification(&app, &request) {
Ok(()) => ok(request.id, json!(true)),
Err(response) => response,
@@ -1,8 +1,18 @@
use crate::host_bridge::protocol::{failed, ok, HostBridgeRequest, HostBridgeResponse};
use crate::shell::webview::resolve_desktop_network_status;
use serde_json::Value;
pub(crate) async fn resolve_desktop_host_bridge_network_status() -> Result<Value, String> {
async fn resolve_desktop_host_bridge_network_status_payload() -> Result<Value, String> {
tauri::async_runtime::spawn_blocking(resolve_desktop_network_status)
.await
.map_err(|error| error.to_string())
}
pub(crate) async fn resolve_desktop_host_bridge_network_status(
request: &HostBridgeRequest,
) -> HostBridgeResponse {
match resolve_desktop_host_bridge_network_status_payload().await {
Ok(status) => ok(request.id.clone(), status),
Err(error) => failed(request.id.clone(), "host_error", error),
}
}
@@ -2801,6 +2801,6 @@
## 2026-06-19 原生壳网络查询桥接边界
- 背景:`network.status` 已由 Expo shell network 和 Tauri shell network 承接真实系统 / 主站可达性查询,但两端 HostBridge `dispatch` 仍直接调用底层 network helper 或异步阻塞包装,继续补壳能力时容易让分发层重新承接宿主细节。
- 决策:Expo 移动壳新增 `apps/mobile-shell/src/host-bridge/network.ts`,统一承接 `network.status` HostBridge 查询并复用 `src/shell/network.ts`Tauri 桌面壳新增 `apps/desktop-shell/src-tauri/src/host_bridge/network.rs`,统一承接 `network.status` HostBridge 查询并复用 `shell::network::resolve_desktop_network_status`。两端 `dispatch` 只保留 method 委托和响应包装,配置检查会拒绝分发层直接导入 shell network直接执行 `resolve_desktop_network_status`
- 决策:Expo 移动壳新增 `apps/mobile-shell/src/host-bridge/network.ts`,统一承接 `network.status` HostBridge 查询并复用 `src/shell/network.ts`Tauri 桌面壳新增 `apps/desktop-shell/src-tauri/src/host_bridge/network.rs`,统一承接 `network.status` HostBridge 查询、成功响应和 `host_error` 失败映射,并复用 `shell::network::resolve_desktop_network_status`。两端 `dispatch` 只保留 method 委托,配置检查会拒绝分发层直接导入 shell network直接执行 `resolve_desktop_network_status` 或重新映射桌面网络错误
- 影响范围:`apps/mobile-shell/src/host-bridge/network.ts``apps/mobile-shell/src/host-bridge/dispatch.ts``apps/mobile-shell/scripts/check-config.mjs``apps/desktop-shell/src-tauri/src/host_bridge/network.rs``apps/desktop-shell/src-tauri/src/host_bridge/dispatch.rs``apps/desktop-shell/scripts/check-config.mjs``scripts/check-native-shells.mjs`、宿主壳能力统一协议文档、Expo / Tauri HostBridge 方案文档。
- 验证方式:`npm run mobile-shell:typecheck``npm run mobile-shell:test -- src/host-bridge/bridge.test.ts``npm run desktop-shell:typecheck``cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml``npm run check:native-shells``npm run check:encoding``git diff --check`