深入了解ets2-telemetry-server架构:插件系统与数据流程解析

深入了解ets2-telemetry-server架构:插件系统与数据流程解析

深入了解ets2-telemetry-server架构:插件系统与数据流程解析

【免费下载链接】ets2-telemetry-serverETS2/ATS Telemetry Web Server + Mobile Dashboard项目地址: https://gitcode.com/gh_mirrors/et/ets2-telemetry-server

ets2-telemetry-server是一款专为Euro Truck Simulator 2 (ETS2)和American Truck Simulator (ATS)设计的遥测数据Web服务器与移动仪表盘工具。它能够实时采集游戏数据并通过Web接口传输到移动设备,为玩家提供沉浸式的驾驶监控体验。本文将详细解析其核心架构,包括插件系统的工作原理和数据从游戏到仪表盘的完整流程。

插件系统架构:无缝连接游戏与服务器

插件系统是ets2-telemetry-server与游戏通信的核心桥梁。该系统通过PluginSetup类实现,位于source/Funbit.Ets.Telemetry.Server/Setup/PluginSetup.cs,负责管理游戏插件的安装状态和验证逻辑。

插件安装与验证机制

PluginSetup类通过检查游戏目录中的插件DLL文件来确定安装状态:

  1. 游戏路径检测:通过Settings.Instance.Ets2GamePathSettings.Instance.AtsGamePath获取游戏安装路径
  2. 插件有效性验证:调用IsPluginValid()方法检查32位和64位插件是否存在且完整
  3. 状态管理:根据验证结果设置SetupStatus(已安装/未安装/失败)

跨架构支持

服务器提供了针对不同系统架构的插件版本:

  • 32位插件:server/Ets2Plugins/win_x86/plugins/ets2-telemetry-server.dll
  • 64位插件:server/Ets2Plugins/win_x64/plugins/ets2-telemetry-server.dll

这种设计确保了与不同版本游戏的兼容性,无论是32位还是64位环境都能正常工作。

数据采集流程:从游戏内存到结构化数据

遥测数据的采集是通过Ets2TelemetryDataReader类实现的,位于source/Funbit.Ets.Telemetry.Server/Data/Ets2TelemetryDataReader.cs。这一过程主要包含三个关键步骤:

1. 共享内存读取

系统使用SharedProcessMemory类(位于source/Funbit.Ets.Telemetry.Server/Data/Reader/SharedProcessMemory.cs)从游戏进程的共享内存区域读取原始数据:

// 读取共享内存中的原始遥测数据 _sharedMemory.Read();

游戏通过内存映射文件"Local\Ets2TelemetryServer"公开遥测数据,服务器定期读取该区域以获取最新的车辆和驾驶状态信息。

2. 数据结构映射

原始数据被映射到Ets2TelemetryStructure结构体,该结构体定义了所有可采集的遥测数据项,包括:

  • 车辆状态(速度、转速、油量等)
  • 驾驶信息(档位、刹车状态、转向角度等)
  • 地理位置和导航数据

3. 数据转换与封装

读取的原始数据通过_data.Update(_sharedMemory.Data)方法转换为IEts2TelemetryData接口实例,提供类型安全的数据访问。

数据传输机制:实时推送至客户端

采集到的遥测数据通过SignalR实时通信库推送到客户端,这一过程由Ets2TelemetryHub类(位于source/Funbit.Ets.Telemetry.Server/Controllers/Ets2TelemetryHub.cs)负责管理。

WebSocket连接管理

  • 连接跟踪:使用ConcurrentDictionary<string, bool>维护所有客户端连接
  • 连接事件处理:通过OnConnectedOnReconnectedOnDisconnected方法管理连接生命周期
  • 节流控制:通过Thread.Sleep(1)实现请求节流,避免CPU过度占用

数据推送流程

客户端通过调用RequestData()方法请求遥测数据,服务器响应流程如下:

  1. 检查是否有活跃连接:if (HasConnections)
  2. 获取JSON格式的遥测数据:Ets2TelemetryController.GetEts2TelemetryJson()
  3. 推送数据到客户端:Clients.Caller.updateData(...)

这种设计确保了数据的实时性和高效传输,为移动仪表盘提供流畅的用户体验。

可扩展皮肤系统:个性化仪表盘界面

ets2-telemetry-server提供了丰富的皮肤系统,允许用户根据个人喜好和不同车辆类型自定义仪表盘界面。皮肤文件位于server/Html/skins/目录下,包含多种预定义皮肤:

  • default:默认仪表盘
  • default-mph:mph单位的默认仪表盘
  • daf-xf:DAF XF车型专用仪表盘
  • man-tgx:MAN TGX车型专用仪表盘
  • volvo-fh:Volvo FH车型专用仪表盘

每个皮肤包含HTML布局、CSS样式、JavaScript逻辑和图片资源,如server/Html/skins/volvo-fh/images/bg-on.jpg提供了Volvo FH车型的仪表盘背景。

总结:模块化架构的优势

ets2-telemetry-server采用模块化设计,将插件管理、数据采集、数据传输和界面展示等功能分离,带来以下优势:

  1. 灵活性:通过插件系统支持不同游戏版本和架构
  2. 可扩展性:新的皮肤和数据类型可以轻松添加
  3. 实时性:高效的共享内存读取和WebSocket推送确保低延迟
  4. 易用性:自动插件安装和状态检测简化了设置过程

无论是对于希望深入了解系统工作原理的开发者,还是寻求个性化驾驶体验的普通用户,理解这一架构都能帮助更好地使用和扩展ets2-telemetry-server的功能。

要开始使用这个强大的工具,只需克隆仓库:git clone https://gitcode.com/gh_mirrors/et/ets2-telemetry-server,然后按照项目文档进行简单设置即可享受实时遥测数据带来的沉浸式驾驶体验。

【免费下载链接】ets2-telemetry-serverETS2/ATS Telemetry Web Server + Mobile Dashboard项目地址: https://gitcode.com/gh_mirrors/et/ets2-telemetry-server

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考