中优 3 项收尾:Plan §6.4 里程碑 + Design §20.1 拆分 + Contract §10 验收清单
补完本轮 audit 与 Design 大改后的文档边界,避免后续 Phase 实施者
按陈旧描述走弯路。
1. Plan §6.4 文档同步段新增「Design 接口骨架覆盖里程碑」表:
- 4 行时间线记录 Phase 1 闭环 / Design 全 51 项接口骨架 / Contract §4.2
按 daoqi 原项目修订 / CLAUDE.md 加典型案例的 commit hash
- 末尾澄清「§3.4.1 撤销说明」与 §7.5 主路径关系,避免新人疑惑
2. Design §20.1 LobbyHandlers 加架构说明段:
- 明示实际拆为 AudioHandlers / DeviceHandlers / LocationHandlers /
ShakeHandlers / OpenurlTitleDataHandler 5 个 sub-struct(§8.1.1 /
§8.4.1 / §8.6 / §8.7 / §3.4.2 各自归属)
- LobbyHandlers 成为聚合点,依次调子 .register()
- 保留 monolithic register 速查表作为与 Contract §3.1 编号对账用
- 每行注释 §3.1 [N] 编号便于追溯
3. Contract §10 验收清单加 5 项硬约束:
§A 启动新增:
- app_*.js 4 个文件存在
- 15 个 app_* 全局变量命名 100% 正确(大小写硬约束)
- 大厅 vs 子游戏 app_Launchtype = "0"/"1" 字面差异
- app_gameid / app_compareCode 必须 undefined(早期 Contract 误列)
§B 桥接新增:
- H5 alert(msg) → UIAlertController 单按钮
- H5 confirm(msg) → 取消/确定 双按钮 + 正确返回 bool
至此 Plan / Design / Contract 三文档完全对齐 51 项接口(含 §7.5 app_*.js
15 个、§3.7 WKUIDelegate 2 个)。Phase 2 实施可直接对照 Contract §10
验收清单做契约测试。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
fae7b3da82
commit
0cdd709e66
@@ -3985,34 +3985,62 @@ final class AppCoordinator {
|
||||
|
||||
### 20.1 LobbyHandlers — 大厅注册 20 个 handler
|
||||
|
||||
> **架构说明**(与 §8.x 各 module 章节同步):本节早期版本把 20 项 handler 全列在单一 `LobbyHandlers struct.register()` 内,便于一眼看全。实际实施时(§8.1.1 / §8.4.1 / §8.6 / §8.7 / §3.4.2)按 module 维度拆为多个 sub-struct(`AudioHandlers` / `DeviceHandlers` / `LocationHandlers` / `ShakeHandlers` / `OpenurlTitleDataHandler` 等),`LobbyHandlers` 成为聚合点:
|
||||
>
|
||||
> ```swift
|
||||
> public struct LobbyHandlers {
|
||||
> let bridge: BridgeProtocol
|
||||
> let audioHandlers: AudioHandlers // §8.1.1
|
||||
> let deviceHandlers: DeviceHandlers // §8.4.1
|
||||
> let locationHandlers: LocationHandlers // §8.6
|
||||
> let shakeHandlers: ShakeHandlers // §8.7
|
||||
> let openurlHandler: OpenurlTitleDataHandler // §3.4.2
|
||||
> // 其它单点:accreditLogin / friendsShare / browser / SwitchOverGameData /
|
||||
> // opensaoma stub 留在 LobbyHandlers 本体
|
||||
>
|
||||
> public func register() {
|
||||
> audioHandlers.register()
|
||||
> deviceHandlers.register()
|
||||
> locationHandlers.register()
|
||||
> shakeHandlers.register()
|
||||
> openurlHandler.register()
|
||||
> registerLobbyOnly() // accreditLogin / friendsShare / browser / SwitchOverGameData / opensaoma
|
||||
> }
|
||||
> }
|
||||
> ```
|
||||
>
|
||||
> 下方 monolithic register 调用清单**作为 20 项接口的速查表保留**(与 Contract §3.1 编号对账用),实际实施请按上述 sub-struct 拆分。
|
||||
|
||||
```swift
|
||||
// LobbyHandlers 聚合视角的 20 项接口速查表(与 Contract §3.1 编号一一对应)
|
||||
func register() {
|
||||
// 登录 / 分享
|
||||
bridge.register("accreditlogin", handler: accreditLogin)
|
||||
bridge.register("friendsSharetypeUrlToptitleDescript", handler: friendsShare)
|
||||
// 音频 / 录音
|
||||
bridge.register("srcIsloop", handler: srcIsLoop)
|
||||
bridge.register("prepareaudio", handler: prepareAudio)
|
||||
bridge.register("mediaTypeAudio", handler: mediaTypeAudio)
|
||||
bridge.register("voicePlaying", handler: voicePlaying)
|
||||
// 摇一摇 / 振动
|
||||
bridge.register("startshake", handler: startShake)
|
||||
bridge.register("stopshake", handler: stopShake)
|
||||
bridge.register("SwitchShake", handler: switchShake)
|
||||
bridge.register("vibrator", handler: vibrator)
|
||||
bridge.register("repeatvibrator", handler: repeatVibrator)
|
||||
bridge.register("canclevibrator", handler: cancelVibrator)
|
||||
// 剪贴板
|
||||
bridge.register("gamepastetext", handler: gamePasteText)
|
||||
bridge.register("gameCopytext", handler: gameCopyText)
|
||||
// 网页 / 浏览器 / 跳子游戏
|
||||
bridge.register("OpenurlTitleData", handler: openUrlTitleData)
|
||||
bridge.register("browser", handler: browser)
|
||||
bridge.register("SwitchOverGameData", handler: switchOverGameData)
|
||||
// 定位 / 设备 / 扫码
|
||||
bridge.register("startlocation", handler: startLocation)
|
||||
bridge.register("getphoneInfo", handler: getPhoneInfo)
|
||||
bridge.register("opensaoma", handler: openSaoma) // ⚠️ 空实现仍要注册
|
||||
// 登录 / 分享 (留在 LobbyHandlers 本体)
|
||||
bridge.register("accreditlogin", handler: accreditLogin) // §3.1 [1]
|
||||
bridge.register("friendsSharetypeUrlToptitleDescript", handler: friendsShare) // §3.1 [2]
|
||||
// 音频 / 录音 (AudioHandlers, §8.1.1)
|
||||
bridge.register("srcIsloop", handler: srcIsLoop) // §3.1 [3]
|
||||
bridge.register("prepareaudio", handler: prepareAudio) // §3.1 [4]
|
||||
bridge.register("mediaTypeAudio", handler: mediaTypeAudio) // §3.1 [5]
|
||||
bridge.register("voicePlaying", handler: voicePlaying) // §3.1 [6]
|
||||
// 摇一摇 (ShakeHandlers, §8.7)
|
||||
bridge.register("startshake", handler: startShake) // §3.1 [7]
|
||||
bridge.register("stopshake", handler: stopShake) // §3.1 [8]
|
||||
bridge.register("SwitchShake", handler: switchShake) // §3.1 [9]
|
||||
// 振动 + 剪贴板 + 设备 (DeviceHandlers, §8.4.1)
|
||||
bridge.register("vibrator", handler: vibrator) // §3.1 [10]
|
||||
bridge.register("repeatvibrator", handler: repeatVibrator) // §3.1 [11]
|
||||
bridge.register("canclevibrator", handler: cancelVibrator) // §3.1 [12]
|
||||
bridge.register("gamepastetext", handler: gamePasteText) // §3.1 [13]
|
||||
bridge.register("gameCopytext", handler: gameCopyText) // §3.1 [14]
|
||||
bridge.register("getphoneInfo", handler: getPhoneInfo) // §3.1 [21]
|
||||
// 网页 / 浏览器 / 跳子游戏 (OpenurlTitleDataHandler §3.4.2 + LobbyHandlers 本体)
|
||||
bridge.register("OpenurlTitleData", handler: openUrlTitleData) // §3.1 [15]
|
||||
bridge.register("browser", handler: browser) // §3.1 [16]
|
||||
bridge.register("SwitchOverGameData", handler: switchOverGameData) // §3.1 [17]
|
||||
// 定位 (LocationHandlers, §8.6)
|
||||
bridge.register("startlocation", handler: startLocation) // §3.1 [20]
|
||||
// 扫码 stub (LobbyHandlers 本体)
|
||||
bridge.register("opensaoma", handler: openSaoma) // §3.1 [22] ⚠️ 空实现仍要注册
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user