#networking #server-client #fsd #vatsim #flight-simulation #flightsim

fsd_interface

A Rust软件包,用于序列化和反序列化FSD(飞行模拟守护进程)协议网络消息

4个版本

0.1.21 2024年2月1日
0.1.20 2023年11月29日
0.1.18 2023年11月23日
0.1.17 2023年8月25日

#405 in 网络编程

每月21次下载

BSD-3-Clause

145KB
3.5K SLoC

FSD消息

什么是FSD?

FSD(飞行模拟守护进程)协议用于通过TCP连接在飞行员/ATC客户端软件和FSD服务器之间进行通信。它自90年代以来一直存在,至今仍在广泛使用。

在线可用的最早版本的FSD服务器是这个,由Marty Bochane编写。它是开源的,有些人私下编译并运行了这个软件的实例——通常是虚拟飞行小组。

VATSIMIVAO也使用FSD协议,但他们各自与Marty Bochane服务器使用的协议版本有很大差异,以至于这三个“方言”彼此不兼容。尽管如此,有一些客户端,即EuroScopeSwift,实现了传统的FSD协议和现代的VATSIM版本,因此它们可以同时连接到VATSIM和私人FSD服务器。

FSD协议是什么样子?

每条消息都以一个前缀开始,用于标识消息类型,随后是冒号分隔的变量数量字段。例如

$CQEHAM_GND:@94835:WH:KLM167

&CQ - 这表示消息是客户端查询。

EHAM_GND - 发送消息的站的呼号。

@94835 - 这实际上是如何编码无线电频率的。这将代表194.835。你们当中的一些人可能会注意到这远远超出了空中频带的范围——这是一个“特殊”频率,由客户端用来传递有关飞机的信息。

WH - 这表示这是一个“谁有”请求 - 控制器客户端向区域内的所有其他控制器客户端发送消息,询问他们是否假定拥有该飞机。

KLM123 - 这是控制器客户端询问的飞机。

这个软件包的作用是什么?

目前,这个软件包只支持VATSIM版本的FSD协议。将来,它还将支持旧版FSD数据包以及IVAΟ数据包。

  • 识别字符串是否是有效的FSD协议消息,并识别其类型
  • 将其反序列化为结构体,以便您可以处理其中的信息
  • 将结构体序列化为有效、经过验证的FSD消息字符串

示例

// Imagine this is a message we have received from an FSD server
let message_text = String::from("$CQEHAM_GND:@94835:WH:KLM167");

// We can identify what type of message it is, deserialise it
let message_deserialised = fsd_messages::parse(&message_text).unwrap();
if let FsdMessage::ClientQueryMessage(client_query_message) = message_deserialised {

    // And access its data
    assert_eq!("EHAM_GND", client_query_message.from.as_str());
    assert_eq!("@94835", client_query_message.to.as_str());
    if let ClientQueryType::WhoHas(aircraft) = client_query_message.query_type {
        assert_eq!("KLM367", aircraft.as_str());
    }

    // Plus, on the flip side, we can create our own messages and serialise them
    let new_message = messages::ClientQuery::message::who_has("LIRF_TWR", "@94835", "ITA1561");
    assert_eq!(String::from("$CQLIRF_TWR:@94835:WH:ITA1561"), new_message.to_string());
}

免责声明

尝试使用未经批准使用的客户端软件连接到VATSIM服务器违反了VATSIM的《行为准则》(Code of Conduct)和《用户协议》(User Agreement)。

当然,您完全有权使用这个软件包来编写连接到私人FSD服务器的客户端。

如果您确实从VATSIM获得了使用自己的客户端软件连接的许可并决定使用此软件包,您有责任检查它是否确实符合VATSIM FSD协议。

依赖关系

~0.7–1.6MB
~35K SLoC