Phase 6 commit A:AppCoordinator + SubGameViewController 框架 + SwitchOverGameData push
- AppCoordinator:2s 节流 + 栈深 < 2 守门 + .subGameDidReturn 通知名(Design §2.4.3) - SubGameViewController:复用 BridgedWebView/Splash/16:9 letterbox/ExternalSubscriptions, AppDataWriter(.subGame) 写 4 个 app_*.js;H5 未安装时抛错(待 commit B 接入下载) - SwitchOverGameHandler:解 Gamedirectory/gamedownloadurl/data → AppCoordinator.showSubGame (msext NewRootVC.m:541-566 等价,节流与栈深由 Coordinator 守门,cb 字面始终回) - SceneDelegate:UINavigationController 承载大厅,nav 引用交给 AppCoordinator - Plan 进度已勾选 §5 / §8(commit B/C 留待 SubGameDownloader 与 backgameData/getWebdata 链路) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
68cf7140d7
commit
7a5644053d
@@ -2,12 +2,19 @@
|
||||
// SwitchOverGameHandler.swift
|
||||
// ylgamehall
|
||||
//
|
||||
// H5 → Native handler stub:SwitchOverGameData — 切换到子游戏
|
||||
// H5 → Native handler:SwitchOverGameData — 切换到子游戏。
|
||||
// 契约:docs/H5-Native-Contract.md §3.1 [17]
|
||||
//
|
||||
// Phase 6.4 完整实现需要 AppCoordinator + SubGameViewController +
|
||||
// SubGameDownloader(子游戏 zip 下载解压)。当前为 stub(仅 cb 维持契约),
|
||||
// 让 H5 调时不报 "no handler",避免业务流程卡住。
|
||||
// 与 msext NewRootVC.m:541-566 等价:
|
||||
// - 解析 Gamedirectory / gamedownloadurl / data
|
||||
// - 2s 节流(msext one_Time / canbackone;本项目挪到 AppCoordinator.showSubGame)
|
||||
// - 调 AppCoordinator.shared.showSubGame(...) push 子游戏 VC
|
||||
// - 无论 push 是否成功,都回 callback "SwitchOverGameData"(msext 行为)
|
||||
//
|
||||
// ⚠️ 入参字段名严格保持字面:
|
||||
// - "Gamedirectory" G 大写
|
||||
// - "gamedownloadurl" 全小写
|
||||
// - "data" 透传给子游戏 H5(commit C 通过 .subGameDidReturn 反向 callback getWebdata)
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@@ -18,8 +25,23 @@ public enum SwitchOverGameHandler {
|
||||
// 【17】SwitchOverGameData
|
||||
// 入参 type / Gamedirectory / gamedownloadurl / data
|
||||
// cb: "SwitchOverGameData"(驼峰首字母大写,沿用 msext 字面)
|
||||
// 完整实现需 push SubGameViewController + zip 下载解压 + 加载子游戏 H5
|
||||
bridge.register("SwitchOverGameData") { _, callback in
|
||||
bridge.register("SwitchOverGameData") { data, callback in
|
||||
await MainActor.run {
|
||||
let dir = data?["Gamedirectory"]?.asString ?? ""
|
||||
let url = data?["gamedownloadurl"]?.asString ?? ""
|
||||
let web = data?["data"]?.asString ?? ""
|
||||
|
||||
// msext 行为:gameStart 沿用 Gamedirectory(同名同目录),
|
||||
// 后续若契约出现独立 gamestart 字段再扩展。
|
||||
let request = SubGameRequest(
|
||||
gameDir: dir,
|
||||
gameStart: dir,
|
||||
downloadURL: url,
|
||||
webData: web
|
||||
)
|
||||
AppCoordinator.shared.showSubGame(request)
|
||||
}
|
||||
// 与 msext 一致:节流命中 / 入参缺失也回 cb,避免 H5 业务期等待
|
||||
callback?(.string("SwitchOverGameData"))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user