保存独立KV用户服务、固定会话存档与原业务接线,以及C3d资料缓存和C3e本人统计写。 保留原PF/AGG路线、业务公式和时序;榜单读取、好友资料、公告、匹配及首场景闸仍待完成。 验证:ServiceHost两条件各33组646断言;Unity CLI Loop编译0错误269警告。 包含相关方案、评审裁决、测试及状态文档。未操作服务器、正式账号或打包。
9.3 KiB
9.3 KiB
M2 PlayFab→KV 移植修改清单(分模块)
日期:2026-09-30。编制:原 ZCode(审查侧),基于已完成的全部核验(合批正式前审 2165/2165、C2d 交付 113 项中 112 一致、防跑偏十项源码实证、C3c 审查 R1 13/13)。范围:当前工作树 Client/Assets/Scripts 全部迁移改动=111 个修改文件 + 14 个新增文件(含 meta)。每项均标注性质:〔平移〕=提供方/身份/接线替换;〔原样〕=经 C2d 核减后与原行为一致(含登记未修的旧缺陷);〔待接线〕=依赖 C3c 服务端四问,未动或不可放行。
A. KV 存储基础设施(新增模块,Services/PlayerData/)
| 文件(新增) | 内容 |
|---|---|
PlayerKVClient/CacheStore/SyncState/SyncCoordinator/LoginContext/GameSessionBridge/GameLoadCoordinator/GameLoadGuard/GameLoadTransaction/GameplayBindings/SaveSchema/LoginPrepareResult/DecodedSave/KeyRead* 等系列 |
早期阶段建立:HTTP 协议、KV 缓存、3A 同步状态机、3B 串行同步、登录上下文(epoch/租约/三 handler)、会话桥、加载编排(Prepare/Decode/Apply)、加载 Guard、31 模块事务、严格解码器。本合批内 GameplayBindings 改窄接口 IKVUserLoadReceiver、GameLoadCoordinator 成功结果携带 PlayerKVAccountDescriptor |
PlayerKVRuntimeSelection.cs(新) |
启动一次捕获 SaveBackend→提供方选择;固定正式 URL、AGG 拒绝、101/102 准入 |
IPlayerSaveStore.cs + PlayerSaveStores.cs(本合批新增) |
共用存档契约与 KV/PF 双实现:Read 三态、Write 接受语义、WriteAndConfirmAsync、40 秒单调度者、固定会话绑定〔平移〕 |
IKVUserLoadReceiver.cs / IKVUserLifecycle.cs(本合批新增) |
31 模块接收窄契约(消费者=Bind);生命周期观察窄契约(消费者=PFLoginAct/QuitAct) |
PlayerKVEditorValidationHost.cs |
受控验证宿主(离线全链验证入口,不改业务) |
B. 核心管理器(Core/)
KVMgr.cs(新增):四个静态入口 ReadKV/WriteKV/FlushKVAsync/WaitForKVTicketAsync,Guard 检查后转发固定 handle——替代 PlayFabMgr 的存档入口生态位〔平移〕。PlayFabMgr.cs:四个 KV 入口移除;Guard 接线(Lifecycle/Compare/Update/ReadLocal/Sync/PrefsSave/Immediate 七检查点);kv-loop 分支;新增内部FlushBufferedData委托原 SyncData(供 PF store)。PF 原同步/缓存/40 秒定时器全部保留〔平移+保留 PF〕。CustomServerMgr.cs:kvOnly租约运输(BindKVForValidation/BindKVForGame/EnableKVBusiness/DisableKVBusiness)、KVUnauthorized 事件、Cookie 同源返回、主线程 Post、15 秒超时〔平移〕。
C. 用户服务与身份(Services/)
KVUserService.cs(新增):正式 KV 登录编排(认证→31 模块 Apply→释放 Guard→原 handle→三提示服务→启用租约→就绪后同步发布 UserId/ApiPlayerId/InternalId/IsAuthorized→发一次EvtAPISvrLoginSuccess→Login 返回 Done);不继承/不引用 PlayFabUserService 与 SDK;显式失败成员表;新 PlayerId 身份〔平移〕。他人资料GetPlayInfo/GetPlayLv当前未命中返回 null/抛错——原语义形状恢复列为 C3c ①可批未实施。UserService.cs:IUserService移除EntityKey(PF DTO 出共用契约)、CustomId加 setter、移除 formal KV 分支;PF 登录/资料/其他玩家缓存原样保留〔平移〕。UserService.KVLoad.cs:formal 段已迁出至 KVUserService;保留受控验证成员(ConfigureKVForValidation/LoadKVForValidationAsync 等)〔平移〕。UserService.KVGameplayLoop.cs:Editor kv-loop 测试通道(PF 身份背景),按设计不改仅回归。AggUserService.cs:仅 B3-C168 retain-agg 零行为修改。ChatService.cs:对 HEAD 仅 BOM 差异〔原样〕。
D. 登录/舞台流程(Stages/)
LoginStage.cs:按冻结选择注册 PlayFabUserService/AggUserService/KVUserService 及对应存档实现;RequestNextActKV 双闸之一(保留)〔平移〕。PFLoginAct.cs:中立 formal 检测(读 RuntimeSelection)、共用接口 CustomId 赋值、KV 就绪/错误状态经IKVUserLifecycle、输入/重试/销毁流程原样〔平移〕。QuitAct.cs:经窄契约观察 KV 关闭(validation/formal 两实现)〔平移〕。FishingStage.cs/FishingAct.cs:store 注入消费、身份发布后时序、暂停恢复核旧 lifetime;5 秒软门不作为 KV 凭据〔平移〕。双闸保留至 PF 调用计数=0。
E. 数据中心 31 存档模块(DataCenter/ 等,27 文件)
- 全部 31 模块新增
ResetForKVLoad/ReplaceFromKVDecoded受控加载入口(KV 档按序同步 Apply,Guard/回滚/主线程约束)〔平移〕。 - 202 项业务存档调用迁
IPlayerSaveStore(原键、原序列化、原 remoteStore 参数、原调用时序):PlayerData/SmallGame/PlayerFishData(含鱼竿配件)/PlayerShopData/FishingEventData(主体 16+PVP/单双人 11)/Buff/Camp/Achievement/Box/Guide/BattlePass/Signin/Trigger/Club/Challenge/Chains/Disco/Partner/Cube/EventPack/Piggy/Bargain/FootPrint/Shooting/Potion/Pinball/Scratch/Pinata/Digging/LuckyTask×2/MiniBP/EventToken/水族馆/累计充值/配对游戏/Bingo/Break/Can/GatherCore/Mow/Smash/广告轮/扫荡/拼图等〔平移〕。 - 2 项即时消耗(
FishingBehaviorB.ConsumeBaitOnPlayfab、FishingTurntablePanel.ConsumeOnPlayfab):SyncDataImmidiate→WriteAndConfirmAsync存储替换,调用者时序原样(不等待、无条件 isDataSynced、原随机/动画顺序)〔原样〕。 - 余 4 项:3 项 Club/Setting 已有固定 KV 提示路线保留 PF 分支;1 项
BaseEventData.UploadData无消费者待最终清理。
F. 业务服务层(Services/ 15 文件)
InGameMailService/InGameMailHandler:Cookie 身份、缓存按新 UserId 分键、回包核生命周期〔平移〕;批量 HasRead→HasReward 旧语义原样保留(缺陷已登记待移植后授权)〔原样〕。FriendService:普通friend/*请求字段值换新 UserID(字段名保留)〔平移〕;GetFriendData的 PF SDK 读取待 C3c 裁决未动〔待接线〕。ClubService:提示键走原 handle 固定路线、GetSelfClub经租约〔平移〕。SurveyService:两键原键名迁 KV、十进制尾数 %10 抽样、原同步签名原样〔平移+原样〕。SettingService/LocalNotificationService:B01 固定 owner 读写〔平移〕。AntiCheatManager:CheckBanplayerID=新 UserId〔平移〕。RTService/SignalRService:SessionVersion/Cookie 消费、旧连接失效〔平移〕;真连接未验。FootPrintService/EventTokenService/TileNewsManager(候选) 等:store/身份接线〔平移/待接线〕。
G. UI 层(Setting 6、Shop 4、LuckyTask 3、Partner 4、Social 3、各活动 UI)
- 全部为 store 注入后的最小适配:await 后核旧 store/会话、资源过期回调不更新新界面〔平移〕。
EventFishingDuelPanel.cs:EntityKey 消费改 PF 具体能力分支(EntityKey 已移出共用契约);KV 匹配路径MachingEnd(null)为开发性结束不得放行〔待接线〕。SocialFriends/SocialLeadboardItem等解码 UI:零修改(/100000、%100000解码依赖服务端 LevelB 投影,见 C3c)。HomePanel:零修改(补单原异步流程,与 HEAD 字节一致)。
H. 活动系统(FishingEvent 全类型、Offer、礼包等)
- Type2 签到/Type3 礼包战令/Type4·7 动态活动(沙Dig/伙伴/魔药/弹珠/Bingo/CubeMelt/射击/Break/Can/GatherCore/Mow/Smash)/Type8 LuckyTask/Type9 MiniBP·OfferJourney:存档读写迁 store,原条件、原键、原序列化、原异常处理(含原逐活动 catch 继续)〔平移+原样〕。
- 通用
EventDataRepository/AEventDataManager:泛型活动仓库迁固定 store〔平移〕。
I. 编辑器与测试(CodexOutput/upserver/,非生产)
KVGameLoadTests(90 组 2006 断言)、KVSyncTests/KVSyncCoordinatorTests/KVLoginContextTests/B01Tests/B02RouteTests/KVFishingConsume·RewardValidation、ServiceHost 双条件宿主(18 组 254 断言)、M2MergedContractTests/M2MergedGameplayTests、ExitRegression、PlayerProbe。- Editor 工具:kv-loop 许可通道、
S101LoginWindow最小认证探针。
J. 其他
AOTScripts/Boostrap.cs/SubBoostrap.cs:RuntimeSelection 捕获与注册时序〔平移〕。TimeManager/TimeRefreshManager.cs:LastLoginTime 哨兵三分映射(MinValue→null 首登分支)〔平移〕。DebugFunc/配置投影/manifest 等辅助。
已核减回原样的项(C2d,避免误读为"已修复")
邮件批量枚举缺陷、钓鱼/转盘调用者等待、Survey/Friend 的 Task 化与领取锁、商店/签到确认与订单去重、PlayerSaveAction 聚合、坏档抛错汇总、Chat 重试——全部恢复原实现,登记在《纯平移主会话裁决与C2d实施记录》待移植完成后另行授权。
尚未迁移(PF SDK 残余,待 C3c 四问)
等级榜统计写/读(UpdatePlayerStatisticsAsync/GetLeaderboardAsync)、好友列表(GetFriendsListAsync)、公告(GetTitleNewsAsync)、Duel 匹配(Multiplayer 四调用)、他人资料远端读取——此五类是当前首场景 PF 计数≠0 的全部来源。