5.2 KiB
远程配置读取与内存解析
已确认目标
用户已确认:debug、release 都读取远程配置;按原工程解析;数据只存变量,不下载落盘、不写本地缓存。2026-09-05 用户回复“开始”,授权实施此方案。Login Layer/MainMenu 接线另批处理。
契约与来源
- 原工程
projects/Game_Surface_3/js/00_Surface/12_Logic.js的实际入口是get_config,POST 空 body,URL 为gameserver + '?' + timestamp。gameconfig注入仍按-→/、#→:后包成http://…txt。 getConfig_SuccJSON.parse 后把根对象保存在GameData.serverConfig.data。data是客户端包装,不是远程响应信封。旧ServerUrl_Succ/data.urlserver是未启用路径,不能继续作为本次契约。- 当前项目配置源 DEFAULT_GAMESERVER 保持
https://tsgames.daoqi88.cn/config/update_jsonv2.txt。原模板旧 URL 在只读预检中返回非 JSON,不能因追求源码一致而切回失效地址;兼容的是读取与解析协议。 - BUILD_IDENTITY、宿主与 query 身份链沿用已完成实现,不复制 agentid/gameid/channelid/marketid/version,也不改变测试账号与设备来源。
内存结构与解析
在现有 remote-config.ts 提供统一远程配置视图:持有原始根 JSON、已解析的身份,以及 getValue(name)。RuntimeConfig 持有此视图,rawConfig 引用同一根数据;所有配置值(含 hall_config、game_config、公告、登录图片、扩展字段)均保留。无 localStorage、文件、跨启动缓存或全局第二份配置。
getValue 严格复刻 get_paravalue:全局→匹配 agent→game→channel→market;每层首个宽松相等身份匹配;断层保留上层值;只有 truthy 值覆盖,0/false/空串不覆盖;对象和数组整体覆盖,不自动深合并;缺省返回 null。身份 marketid=0 时保留原函数不搜索该层的语义。非法结构显式 ConfigParseError,不修补。
远程 WebSocket 候选按原 getConfig_Succ 选 truthy game_server_tcp,否则 player_server_tcp。支持原字符串/数组顺序及重复项;在协议适配入口转为 ws/wss URL。实际采用远程服务器时,候选缺失或非法显式失败,不退回 data.urlserver 或 visitor_server_tcp。原工程明确的 game→player 选择属于来源契约。
本批不实现 Logic.setConfigInfo 内的 UI 布局、副作用及子游戏 Game_Modify 回调;其所需原始参数均可从统一 getValue 读取。后续界面接线时再按原工程执行各字段的显示转换和来源默认语义。
启动顺序
身份解析 → 远程读取 → 根结构及层级解析 → 显式服务器来源选择 → 校验并规范化最终连接候选 → 发布 RuntimeConfig → 后续 Runtime 启动。
所有 profile 都是 remote。debug 与 release 共用解析器;isDebugger 保持构建模式语义,不控制是否读取。profile=local 是独立的本地服务器选择:仅 debug 使用,远程 JSON/层级解析成功后采用 PROFILES.local 唯一配置的回环地址,不要求未采用的远程 TCP 字段存在。原 getConfig_Succ 在赋值后以 serverType 覆盖地址,并未预先校验未使用的远程值。release 仍选 prod,不能因 URL 参数误接本地。
真实数据核对:当前 BUILD_IDENTITY 匹配 agent,但没有其下匹配 game;继承结果的 game/player TCP 均为 null,仅 visitor TCP 有值。这不授权更换身份或使用游客地址。release 应显式暴露缺失;debug local 在成功读取与层级解析后可用明确的本地地址。该规则是固定的来源选择,禁止捕获读取/解析错误后退回本地。
本地诊断入口继续严格验证 DEBUG/H5/profile=local、身份及回环目标;更新“必须 direct”的旧断言。远程读取/解析失败前不得创建 socket、准备账号或发送登录。停止发生在读取期间时,不得在读取完成后启动连接。
验收
- 自动测试对照原 get_paravalue 实函数,覆盖五层、断层、重复身份、数字/字符串身份、truthy、对象覆盖及不存在字段。
- debug prod、debug local、release 均实际调用 fetcher;本地目标在读取解析完成后才生效;无缓存读写。
- 非 JSON、非法层级、HTTP 失败均明确失败;本地 host 无 socket/登录副作用。实际采用远程地址的模式在 game/player TCP 缺失或非法时明确失败;local 不消费这些字段。
- 真实 HTTP 读取使用当前配置源与 BUILD_IDENTITY,输出脱敏结构/匹配情况;不输出原始配置及认证信息,不连接其生产 WS。
- 经 funplay MCP 验证实际 Creator 浏览器预览远程读取成功、配置在内存、最终目标仍为本地;若浏览器受 CORS 等阻止,记录真实阻塞,不能用 Node 成功代替浏览器通过。
- 显式枚举纯 TS 测试、指定架构测试、类型和导入边界检查。原有 dirty 资源不变。
实施边界
沿用主 checkout 的 codex/local-platform-login 分支,不创建 worktree。不改服务器、原生契约、资源序列化文件,不扩展 RPC/房间/子游戏。只修改已有 assets TS,避免新增脚本的 meta 生成要求。同步更正本次直接涉及的协议文档错误;已完成计划保留历史意义,不重新执行。