保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
4.8 KiB
4.8 KiB
C3c 审查主会话裁决与资料缓存实施边界
用户最新要求覆盖下文开工裁决:所有相关内容审核通过后才可编码,未确定内容先与用户确定,再交审核端。 本文件中“仅本地缓存可先实施”“本次允许范围”等开工许可全部撤回,下面保留为历史分析,不作为编码依据。生产及测试代码尚未修改,C3ProfileCacheTests.cs尚不存在;统一基线28/28再次核验一致。当前状态为C3c未完整通过,禁止先做局部编码。
2026-09-30。用户要求“审核更新,确认一下,然后编码”。开工前已全文核对独立报告及相关生产源码。
核验
- 独立报告SHA256:E8B04A3686CC049479F8C9CB9A355284DD47BB76FE7CF8DF253E2134C4917795。
- 统一受审清单SHA256:7ACC6338C044B8A6E503DEEC5256AE81589549C4E8872220EC63876B91E3A6EA,28/28长度/hash一致。
- 原C3c清单SHA256:541DA9BB36AE7F9F3EE33C96489D05EC85729930E2C43C7EFB50AD3C9EC13F2C,主会话另外实际复算31/31一致。报告中的“间接核验”不当作独立重算31项的证据。
逐项裁决
| 项 | 主会话裁决 |
|---|---|
| R1 | 接受原行为核对及好友空Profile/Statistics跳过、JSON字符串项两点。null LastLogin.Value实际抛InvalidOperationException,并非报告写的NRE;不影响不能伪造时间的结论 |
| R2 | 接受未批准LevelB读写目标替换。无接口证据不能自行恢复已撤回暂存方案;不修改LeadboardData |
| R3 | 接受好友LevelB/LastLogin差异与榜聚合缺证据。当前不改FriendService或DTO,不把普通Level填分数 |
| R4 | 接受时间来源未裁决。纠正“沿跳过/null语义”歧义:原仅跳过缺Profile或Statistics,不跳过缺LastLogin;不得扩大过滤以掩盖问题 |
| R5 | 只接受可独立实现的资料缓存形状/默认值恢复。远端异步查询与成功事件需要实际数据源,不能留空async方法或发假成功事件冒充完成;公告、匹配不编码 |
| R6 | 按下面三文件边界实施本地可确认部分,不继承撤回的五测试文件名单,不新增抽象。远端未命中路径继续明确未完成 |
本次允许范围与前后对照
生产唯一文件:Client/Assets/Scripts/Services/KVUserService.cs,仅GetPlayerLv、GetPlayLv、GetPlayInfo。
- GetPlayerLv:对齐原PlayFabUserService的缓存读取,缓存有值就原值返回,否则1。原KV本人直接读PlayerData/未知返回-1改为原缓存合同;SetPlayerLv仍在本人写入缓存时取真实PlayerData.lv,不修改该方法。null参数沿Dictionary原异常,不增加容错分支。
- GetPlayInfo:空ID返回null;缓存命中返回同一对象;未命中创建原默认昵称占位并缓存。本人分支用已有认证资料在同一对象填name/avatar并按原版同步发布GetClubPlayInfoEvent,后续命中不重复发布。当前本人每次new对象且不发布事件的差异消除。
- 他人GetPlayInfo:仅恢复已审同步占位引用;远端异步更新/事件不能在无数据源时实施,明确保留TODO且不发假事件,不接SearchFriend,不新增Provider或空异步实现。本项仍不是他人资料全链完成。
- GetPlayLv:必须与GetPlayerLv的默认1解耦,否则未加载他人会被误报成功。保留现有已授权本人直读路径(完整原网络替换尚未批准);缓存命中按原值返回,包括已有负数,不新增归一化。未知他人保留现有明确InvalidOperationException;不提前改成KeyNotFoundException假装已做网络查询。原PF该异常发生在远端失败之后,必须连同真实远端读取一次迁移。此处对报告“异常形态立即对齐”建议限定接受,避免新增虚构请求/结果。
- SetPlayInfo(string,string,string)按原PF行为替换缓存对象、不发布事件,保持原样。不自行改成更新已有引用或新增事件。
测试两文件:CodexOutput/upserver/KVGameLoadTests/ServiceHost/M2MergedGameplayTests.cs(接入已认证101/102合成场景);同目录新增C3ProfileCacheTests.cs(真实KV与PF服务对照)。不改宿主SDK夹具、项目文件或其他生产类。
验证与剩余项
- 红测先证明原KV缓存默认值/对象/事件差异;改后运行完整ServiceHost NON_ANDROID及ANDROID+AGG,原PF对照保持。
- 验证默认1不污染异步查询、缓存值含0/负数、null/空ID、本人缓存引用与事件次数、原SetPlayInfo替换规则、ClearPlayInfos、KV SDK计数不增加。必须使用真实已认证KV服务而非反射伪造授权。
- Unity仅CLI Loop编译;无Play、正式账号请求或打包。测试结果另记检查点,不用合成测试宣称远端资料功能完成。
- 其余C3c接口问题继续集中保留,不因完成少量缓存代码宣布首场景可放行。本轮不修改服务器、配置、场景、原奖励或业务消费者。