Repository navigation
Architecture
HiLodve edited this page Jun 29, 2026
·
1 revision
GFAM 采用四层架构,每层职责清晰分离:
┌─────────────────────────────────────────────────────┐
│ GUI 层 (tools/gfam_gui_launcher.py) │
│ Tkinter 图形界面 · 进程管理 · 日志渲染 · 弹窗路由 │
├─────────────────────────────────────────────────────┤
│ 菜单层 (main.js / run_windows.bat) │
│ 交互式菜单 · 服务器选择 · 模块调度 · 环境检查 │
├─────────────────────────────────────────────────────┤
│ 模块层 (modules/*.py) │
│ 各功能独立脚本 · GFLClient 通信 · 自动化循环 │
├─────────────────────────────────────────────────────┤
│ 通信层 (libs/ZIRC/gflzirc) │
│ HTTP 客户端 · RC4 加密 · MITM 代理 · 系统代理管理 │
└─────────────────────────────────────────────────────┘
GFAM 运行时最多产生 4 个独立 OS 进程:
GFAM-GUI.exe (PyInstaller)
│
├── python modules/gfam_auth_capture.py ← UID/SIGN 获取(临时)
│
├── python main.js ← 主菜单 + 模块调度
│ │
│ └── python modules/<module>.py ← 当前运行的功能模块
│
├── python modules/gfam_fairy_auto.py ← 妖精后台(可选,伴随模块)
│
└── python modules/gfam_factory_auto.py ← 制造后台(可选,伴随模块)
进程间通过以下机制协调:
| 机制 | 文件 | 用途 |
|---|---|---|
| 凭证共享 | .gfam_auth.json |
UID/SIGN 写入后所有进程读取 |
| Index 缓存 | .gfam_index_cache.json |
跨进程共享 Index/index 数据 |
| 仓库缓存 | .gfam_factory_warehouse_cache.json |
制造模块写入,A-10 读取 |
| 妖精缓存 | .gfam_fairy_auto_cache.json |
妖精后台写入,前台模块读取 |
| API 锁 | .gfam_api.lock |
序列化所有 GFL 服务器请求 |
| 拆解锁 | .gfam_retire.lock |
序列化拆解请求(Gun/retireGun、Equip/retire) |
| 摘要文件 | .gfam_*_summary.json |
模块结束后写入,GUI 读取弹窗 |
- 用户双击
GFAM-GUI.exe - PyInstaller 解压运行时环境到临时目录
-
gfam_gui_launcher.py启动 Tkinter 主窗口 - GUI 检测 Node.js / Python 环境(
shutil.which),缺失则弹窗提示安装 - 用户选择服务器 → GUI 启动子进程运行
run_windows.bat -
run_windows.bat执行setup_windows.ps1环境检查 -
setup_windows.ps1检测 Node.js、Python、gflzirc、requests -
main.js启动交互式菜单 - 用户选择 auth capture → 运行
gfam_auth_capture.py,设置 Windows 系统代理 - 用户登录游戏 → 代理拦截 UID/SIGN → 保存到
.gfam_auth.json - 用户选择功能模块 →
main.js以 exit code 77 退出,run_windows.bat读取.gfam_next_module.cmd启动对应模块 - 可选启动妖精/制造后台进程
- 模块运行结束 → 生成 JSON 摘要 → GUI 检测
[SUMMARY]标记 → 弹出统计窗口
直接运行 run_windows.bat,跳过 GUI 层,其余流程相同。
-
gfam-manual.ymlworkflow_dispatch 触发 -
run_gha.sh安装 Python 依赖 -
gha_manual_runner.py读取 Secrets(UID、SIGN) - 通过 stdin 向模块注入预设命令序列
- 精简日志模式(隐藏仪表盘和高频循环输出)
游戏客户端 ──HTTP──▶ GFLProxy(127.0.0.1:12335) ──转发──▶ GFL 服务器
│
├─ 解密响应体 (gf_authcode/RC4)
├─ 提取 uid + sign → SYS_KEY_UPGRADE 事件
├─ 缓存 Index/index → .gfam_index_cache.json
└─ 回调 on_traffic()
│
└─ 写入 .gfam_auth.json
gfam_factory_auto.py
│ 制造/拆解操作
├─ 写入 .gfam_factory_auto_cache.json (doll_stats, equip_stats)
│
└─ 各模块 print_run_summary()
│ 读取 factory cache
├─ 合并到 _summary["factory"]
├─ 写入 .gfam_xxx_summary.json
└─ 打印 [SUMMARY] 标记
│
└─ GUI _route_summary_popup() → 弹窗显示
模块请求 Index/index
│
├─ IndexCacheManager.get()
│ ├─ 内存缓存命中 (TTL 内) → 直接返回
│ ├─ 共享文件缓存命中 (.gfam_index_cache.json) → 返回并更新内存
│ └─ 缓存未命中 → 发送网络请求 → 更新两级缓存
│
└─ IndexCacheManager.bypass()
└─ 跳过缓存,直接请求服务器(用于错误恢复、装备锁定验证)
所有 GFL 服务器通信使用基于 RC4 变体的对称加密:
-
请求加密:POST body 中
outdatacode字段,值为gf_authcode(plaintext, 'ENCODE', key)的 Base64 编码 -
响应解密:响应体中
#后的 Base64 数据,用gf_authcode(b64data, 'DECODE', key)解密 -
密钥升级:首次使用
STATIC_KEY(内置静态密钥),登录成功后服务器返回动态sign作为新密钥
| 端点 | 用途 |
|---|---|
Index/index |
获取账号全量数据(人形、装备、资源、仓库等) |
Index/guide |
新手引导奖励领取 |
Mission/combInfo |
获取关卡战斗配置 |
Mission/startMission |
开始任务 |
Mission/teamMove |
梯队移动 |
Mission/battleFinish |
战斗结算 |
Mission/buildingSkillPerformOnDeath |
灰域建筑技能结算 |
Mission/endTurn |
结束回合 |
Mission/startEnemyTurn / endEnemyTurn
|
敌方回合 |
Mission/startTurn |
开始新回合 |
Mission/abortMission |
中止任务 |
Mission/allyMySideMove |
友方移动(零元购 PR) |
Gun/developMultiGun |
批量人形制造 |
Gun/finishAllDevelop |
完成所有人形制造 |
Gun/retireGun |
拆解人形 |
Gun/skillUpgrade |
技能训练 |
Equip/developMulti |
批量装备制造 |
Equip/finishAllDevelop |
完成所有装备制造 |
Equip/retire |
拆解装备 |
Equip/changeLock |
装备锁定/解锁 |
Fairy/develop |
妖精建造 |
Fairy/finishAllDevelop |
完成所有妖精建造 |
Fairy/eatFairy |
妖精强化 |
Daily/resetMap |
灰域地图重置 |
- 锁文件:
.gfam_api.lock - 实现:
O_CREAT | O_EXCL原子文件创建 - 陈旧超时:20 秒自动回收
- 默认超时:15 秒
- 重试间隔:0.15 秒
- 作用:序列化所有
GFLClient.send_request()调用 - 接入方式:模块导入时调用
patch_gfl_client(),自动 monkey-patch GFLClient - 可通过
GFAM_DISABLE_API_LOCK=1禁用
- 锁文件:
.gfam_retire.lock - 实现:同 API 锁
- 陈旧超时:45 秒
- 默认超时:8 秒
- 重试间隔:0.3 秒
- 作用:专门序列化
Gun/retireGun和Equip/retire请求 - 使用场景:A-10 和制造模块同时运行时的拆解协调
所有模块内置自适应延迟机制,在服务器返回错误时自动增加请求间隔:
-
error:300(认证过期)→ 延长延迟 + 尝试清理运行时认证状态 -
error:2/plaintext response(服务器过载)→ 延长延迟 -
error:3(时序同步错误)→ 延长延迟 - 连续成功后逐步衰减延迟回基准值