保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
3.5 KiB
3.5 KiB
M2 CP2B-T 正式 KV 普通业务请求运输交付与待终审
日期:2026-09-29。状态:实现及本地合成验收完成,待一次独立实施复核和主会话终裁;不代表 CP2B 首场景或整体 M2 完成。 编码前的完整方案已按 7/7 hash 独立补审,并由主会话逐项裁决批准精确白名单。
实际交付
PlayerKVLoginContext.cs:原租约继承 capability 创建时固定的 formal/validation 模式。验证模式仍只接受两条精确验证路由;正式模式只接受规范相对 GET/POST,拒验证、再次认证和专用 playerdata 路由。正式租约沿用原账号 Cookie 和关闭排水,并把业务超时设为旧CustomServerMgr的 15 秒。CustomServerMgr.cs:BindKVForGame仍在 Apply 前绑定但不发布业务;只在同 epoch 的 GameLoaded/CP3A 原句柄与三原实例交接后一次EnableKVBusiness。普通 GET/POST 及现有包装方法走同一租约,不再受 KV 全局拒绝门阻挡。Cookie仅在当前正式就绪租约返回同一 CookieContainer;401/403、退出/清理先禁用、递增版本并作废旧响应,禁止同一租约再次发布。后台普通请求先调度到创建管理器的同步上下文,避免在 HTTP 响应线程直接撤销 Unity 服务。PF 发送分支保持原逻辑。UserService.KVLoad.cs:正式原句柄和 Setting/Club/Notification 交接后发布运输就绪;正式 KV 专用 401 事件走LogoutFormalKV,退出和异常先禁用运输再撤销 Coordinator。不改公开IsLogin、ApiPlayerId或跳场景闸。- 合成测试覆盖正式/验证隔离、同 Cookie、15 秒超时、方法/路径/JSON、未就绪零发送、普通 GET/POST、404、401、后台主线程交接、在途旧响应、同账号新 epoch、重复发布拒绝、Close 失败关闭屏障及旧 PF 回归。产品代码未保留仅供测试读取超时的属性。
本地验证
| 检查 | 结果 |
|---|---|
| KVGameLoadTests | 90组、2012断言、0失败 |
| ServiceHost 非Android | 10组、119断言、正式请求0 |
| ServiceHost Android+AGG | 10组、119断言、正式请求0 |
| Unity CLI Loop Editor 编译 | Success=true、0错误、272警告;见结构化核验 |
| 范围与空白 | 本批白名单内 git diff --check 无空白错误;保留原工作树 |
验证全部使用本地合成 handler,没有调用正式 101/102、业务路由或本机服务器代码。沙箱直接写既有 obj 被拒,测试在获准的本地命令环境完成;没有改服务器或打包。
仍待的独立边界
批末独立实施复核须重点核:正式就绪时点及只发布一次、401/403 的会话版本和 UserService 撤销时序、后台回原线程、Cookie/RTService 既有消费者、Close 幂等及新 epoch、验证租约与 PF 旧分支不回归;核交付清单字节数/hash,指出白名单漂移与闲置实现。若报告发现实质问题,先按最小增量裁决再修改代码。
本批不证明线上 Mail/Friend/Club/AntiCheat 等路由或响应合同、IsLogin/ApiPlayerId 正式发布、SignalR 真连接、真实 Player 脚本编译、FishingStage 全链或最终通关。当前 LoginStage KV 阶段闸继续阻断,固定正式地址 http://s101.local:18080/;Unity 自动化仅 CLI Loop,不用 UnitySkills,暂不打包。PlayerKV* 命名和剩余开发期临时路径按最终清单在整体移植后处理。