Phase 8 视频房间 3 件套 stub:createRoom / getVideoinfo / exitRoom

业务暂未启用视频功能,按运营确认仅维持桥契约,让 H5 子游戏调用不报 "no handler"。

- 新增 Source/Bridge/Handlers/VideoRoomHandlers.swift:单一 enum.register 3 个 stub,
  各自 callback 字面回包名(与 OpenSaomaHandler 同款 stub 模式)
- SubGameViewController.registerBridgeHandlers 挂上 VideoRoomHandlers
- 不抽 VideoRoom protocol / NoopVideoRoom 类(违反"不为假设的未来需求设计"原则);
  未来重新接入 Agora 时把 3 个 stub 展开实现即可,注册点不变
- Plan §5.6.3 / §5.8.1-8.3 进度已勾选

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
joywayer
2026-06-22 21:19:55 +08:00
co-authored by Claude Opus 4.7
parent 5f3a435180
commit c77037f407
3 changed files with 54 additions and 5 deletions
+6 -4
View File
@@ -592,7 +592,9 @@ Contract Design Plan(本文档)
- [x] **6.3** 子游戏 handler 注册(拆散到独立 enum,不抽 `SubGameHandlers` 聚合类):
- 14 个与大厅共享 handler 直接复用各自 enum.register
- 新增 `Source/Bridge/Handlers/BackGameDataHandler.swift`,仅 SubGameViewController 注册
- exitRoom / getVideoinfo / createRoom 等视频房间 handler 留待 Phase 8
- 新增 `Source/Bridge/Handlers/VideoRoomHandlers.swift` stubcreateRoom / getVideoinfo / exitRoom):
业务暂未启用视频功能,仅维持桥契约不让 H5 报 "no handler"
未来接 Agora 时把 3 个 stub 展开实现,注册点不变
- [x] **6.4** `SwitchOverGameData` handler(大厅 + 子游戏共用):解参 `Gamedirectory` / `gamedownloadurl` / `data``AppCoordinator.shared.showSubGame(...)`;节流 / 栈深守门移到 Coordinatorhandler 始终回 cb `"SwitchOverGameData"`msext NewRootVC.m:541-566 等价)
- [x] **SceneDelegate**:以 `UINavigationController` 承载大厅,`AppCoordinator.shared.navigationController` 持引;导航栏隐藏 + 禁用边缘 pop 手势
- [x] **6.5** `backgameData` handler(仅子游戏 `BackGameDataHandler.swift` 注册):
@@ -661,9 +663,9 @@ H5 调 `OpenurlTitleData` 打开弹层 WebView,弹层内 H5 用 `window.settin
#### 任务清单
- [ ] **8.1** `Source/VideoRoom/VideoRoom.swift` 协议
- [ ] **8.2** `Source/VideoRoom/NoopVideoRoom.swift` 实现(log + 不动)
- [ ] **8.3** `SubGameHandlers` 注入 NoopVideoRoom,注册:
- [x] **8.1/8.2/8.3** 视频房间 3 件套 stub 已在 Phase 6 commit C 同期落地:
- `Source/Bridge/Handlers/VideoRoomHandlers.swift` 直接 enum.register(不抽 protocol/Noop 类,
业务暂未启用 Agora,未来接入时把 3 个 stub 展开即可,注册点不变)
- `createRoom` stub → `cb("createRoom")`
- `getVideoinfo` stub → `cb("getVideoinfo")`
- `exitRoom` stub → `cb("exitRoom")`
@@ -0,0 +1,45 @@
//
// VideoRoomHandlers.swift
// ylgamehall
//
// H5 Native handler stub 3 createRoom / getVideoinfo / exitRoom
// docs/H5-Native-Contract.md §3.1 192021
//
// 使线 / handler
// H5 "bridge handler not found"
// Agora Phase 8 handler
//
//
// §3.2 13 Native H5 `getVideoinfo(uid )` Agora SDK
// didDecodedRemoteVideo SDK stub
//
// SubGameViewController WebContainerViewController
// msext NewRootVC 沿 msext
//
import Foundation
public enum VideoRoomHandlers {
public static func register(on bridge: any BridgeProtocol) {
// 19createRoom /
// pmw / pmh / top / left / width / height / playerid / roomid
// md5(agentinfo+gameinfo+roomid) + Agora joinChannel +
bridge.register("createRoom") { _, callback in
callback?(.string("createRoom"))
}
// 20getVideoinfoH5Native /
// createRoom roomid
// Agora setupRemoteVideo + view H5
bridge.register("getVideoinfo") { _, callback in
callback?(.string("getVideoinfo"))
}
// 21exitRoom
// Agora leaveChannel + / view
bridge.register("exitRoom") { _, callback in
callback?(.string("exitRoom"))
}
}
}
@@ -86,7 +86,9 @@ public final class SubGameViewController: UIViewController {
// backgameData退 + callback getWebdata
BackGameDataHandler.register(on: bridge)
// exitRoom / getVideoinfo / createRoom handler Phase 8
// 3 stub H5 "no handler"
// Agora VideoRoomHandlers 3 stub
VideoRoomHandlers.register(on: bridge)
}
// MARK: -