30 个版本 (11 个重大变更)
0.13.0 | 2024年7月22日 |
---|---|
0.12.1 | 2023年11月10日 |
0.11.0 | 2023年11月2日 |
0.8.4 | 2023年7月10日 |
#314 在 编码
每月下载量 156
在 6 crates 中使用
55KB
1K SLoC
Rust 的 Tether Agent
示例
使用默认值构建代理,并自动连接
let agent = TetherAgentOptionsBuilder::new("RustDemoAgent")
.build()
.expect("failed to connect Tether");
创建一个输出插件,传入你创建的 Tether Agent 的引用
let custom_output = PlugOptionsBuilder::create_output("customValues")
.build(&agent)
.expect("failed to create output");
如果你的数据结构可以使用 serde 序列化,可以一步完成编码和发布
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct CustomStruct {
foo: String,
bar: f32,
}
/// ...
let custom_message = CustomStruct {
foo: "hello".into(),
bar: 0.42,
};
agent
.encode_and_publish(&custom_output, custom_message)
.unwrap();
或者创建一个输入插件
let input_one = PlugOptionsBuilder::create_input("customValues")
.build(&agent)
.expect("failed to create input");
并同步检查消息
if let Some((plug_name, message)) = agent.check_messages() {
if &input_one.name == plug_name.as_str() {
// Always check against the plug name(s) you're looking for!
方法
此 "基本代理" 实现假定客户端(你的应用程序)将保留任何输入和输出插件的拥有权,以及 TetherAgent 结构体的实例。
这意味着 TetherAgent 不保留你创建的任何输入或输出插件的 "内存"。因此,你必须保留自己的单个变量,这些变量引用你创建的插件,或者根据需要将它们存储在 Vec<&PlugDefinition>
中。
发布
以下函数可以在 TetherAgent
实例上调用
publish
:期望一个已编码的 u8 向量切片(即缓冲区)encode_and_publish
:可以将任何数据类型或结构体自动编码为有效消息,只要data
实现了 SerdeSerialize
特性
在这两种情况下,您提供对 PlugDefinition
的指针,以便代理可以在正确的主题上发布,并具有插件的正确 QoS。
订阅
create_input_plug
函数有一个副作用:客户端订阅。
目前,检查消息是同步进行的。应尽可能经常(例如,每帧一次或在一个定时线程中等)在 TetherAgent
实例上调用同一函数
check_messages
请注意,在订阅(输入插件)的情况下,您不需要传递插件定义。这意味着您需要检查任何返回的消息,以确保它们与您想要匹配的输入插件名称匹配。
这就是为什么 check_messages
返回 Some(String, Message),其中 String 是插件名称——它将自动从消息主题中解析。
依赖项
~17–27MB
~475K SLoC