YourControls FS2024 适配之路:从 Gauge 到 JS Communicator 的完整演进
【免费下载链接】yourcontrolsShared cockpit for Microsoft Flight Simulator.项目地址: https://gitcode.com/gh_mirrors/yo/yourcontrols
YourControls 是一款专为 Microsoft Flight Simulator(MSFS)打造的开源共享驾驶舱工具,让联机飞行的多位玩家共享同一架飞机的操纵与状态。它的 FS2024 适配之路正是本文主角:从传统 C++ Gauge 通信桥,全面演进到基于 WebSocket 的 JS Communicator,并实现了 FS2020 / FS2024 双版本档案分离。本文用通俗的语言带你走完这段技术演进。
什么是共享驾驶舱,为什么需要通信桥
想象你和朋友联机飞同一架飞机:一人开飞机,一人管无线电和检查单。为了让每个人的界面都保持同步,YourControls 需要在模拟器内部"偷看"并"写入"驾驶舱变量(油门、航向、无线电频率等)。
在 FS2020 时代,它采用的经典方案是Gauge 通信机制:
- 通过 SimConnect 的客户端数据区(Client Data Area)与一个驻留在模拟器内的仪表(gauge)交换数据;
- 程序把变量定义打包成批量消息发送,再周期性读回数值;
- 这套机制由 gaugecommunicator.rs 实现,配合 transfer.rs 完成"发送定义 → 接收数值"的完整往返。
这套方案在 FS2020 上运行多年,稳定可靠,但它绑定了一个前提——模拟器支持传统的 C++ 仪表环境。
FS2024 为什么逼出了 JS Communicator
微软在 FS2024 中大幅转向 JavaScript 仪表生态,传统 Gauge 的通信通道随之失效。早期的直接移植导致大量元素损坏,官方更新日志中也能看到反复修复的痕迹(如"Fixed position freeze on FS2024"、"Most elements broken on FS2024 should now work"),详见 Changelog.md。
于是项目团队做了一个关键决策:放弃 Gauge,改走 WebSocket。新的通信器由 jscommunicator.rs 实现,思路非常简洁:
- 在本地
0.0.0.0:7780端口启动一个 WebSocket 监听器; - FS2024 面板中的 JS 仪表主动连入,并通过
Handshake消息自报仪表名称; - 之后所有同步(按键输入、屏幕交互、时钟时间)都通过 JSON 消息在这条双向通道里流动。
JS Communicator 的四种消息类型
从源码可以看到,通信载荷被设计成四种清晰的消息类型(定义在JSPayloads枚举中):
| 消息 | 方向 | 作用 |
|---|---|---|
Handshake | 面板 → 程序 | 连接握手,声明仪表名称 |
Interaction | 面板 → 程序 | 报告触摸屏上的点击交互 |
Input | 双向 | 传递具体控件的键入值(如 MCDU 输入) |
Time/RequestTime | 双向 | 同步模拟时间 |
这些消息的收发逻辑集中在 definitions.rs 中统一调度:程序轮询jstransfer.poll()取出消息,再根据类型分发处理;需要下发时调用write_payload()定向发送给指定仪表或广播给全部仪表。对普通用户而言,这意味着 G3000、GTN 等大屏的触屏操作也能跨玩家同步——这正是 2.8.9 版本"Touchscreen interaction fixed (G3000/GTN)"背后的能力来源。
档案结构升级:FS2020 与 FS2024 分而治之
FS2024 适配的另一大功臣是档案目录的重构。项目把所有飞机与模块的 YAML 定义拆分到了两个平行目录:
- FS2020 档案:definitions/FS2020/
- FS2024 档案:definitions/FS2024/
每个版本下都包含aircraft/(机型档案)与modules/(自动驾驶、燃油、灯光等通用模块),例如 definitions/FS2024/ 下已收录 FlyByWire A380、PMDG 之外的 Fenix A320ceo、COWS DA42 等 2024 专用机型,而仪表档案如 AS_G3000.yaml 也按版本各有一份。
路径解析由 paths.rs 负责——它根据当前模拟器版本决定加载哪一套目录,用户界面上则对应一个独立的 FS2024 机型下拉框(见 web/main.js 中对fs2024-list的处理),这一改动就出现在 2.8.12 版本更新中。
从更新日志看适配时间线 🛫
把 Changelog.md 中涉及 FS2024 的版本串起来,就是一条清晰的适配路线:
- 2.8.9:主体适配完成——"Most elements broken on FS2024 should now work",触屏交互修复,时间同步抖动解决;
- 2.8.10:继续补漏——2020 机型在 2024 下的电路/灯光/配平修复,触控屏按键输入、ID 哈希优化;
- 2.8.11:稳定性收尾——修复 FS2024 位置冻结、移除残留的失效物理修正器、设置即时生效;
- 2.8.12:体验优化——FS2024 机型独立下拉列表,档案目录完成 FS2020/FS2024 拆分(外部档案需同步更新)。
可以看到,这条路线的本质是:先用 JS Communicator 打通通信大动脉,再用双版本档案体系消化机型差异,最后以稳定性和易用性收尾。
写在最后
YourControls 的 FS2024 适配是"跟随平台演进"的典型案例:当微软把驾驶舱的未来交给 JavaScript,共享驾驶舱工具也随之从 C++ Gauge 的内存交换走向 WebSocket + JSON 的现代架构。对普通用户来说,这一切是透明的——你只需安装最新版,在界面中选择 2020 或 2024 机型档案,即可和搭档共享同一座驾驶舱;而对想深入源码的开发者,src/yourcontrols/src/sync/ 目录下的五个通信模块(Gauge、JS、内存写入、冻结检测、传输调度)正是理解整个架构的最佳入口。
【免费下载链接】yourcontrolsShared cockpit for Microsoft Flight Simulator.项目地址: https://gitcode.com/gh_mirrors/yo/yourcontrols
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考