2 个版本
0.2.2 | 2021 年 3 月 7 日 |
---|---|
0.2.0 | 2020 年 10 月 27 日 |
4 在 #socket-server
160KB
3K SLoC
目录
ricsctl
ricsctl,或远程互连流是一个服务器、客户端和库,允许虚拟化总线和服务连接。典型用途包括向总线添加虚拟或模拟模块,例如 CAN 总线,或者允许轻松控制和监控总线。
安装
Windows
我在 Windows 上的构建过程有点奇怪,因此发布部分提供了安装程序。如果您需要自定义构建,请提出问题。
Linux
需求
- protoc
- lua 5.4
安装
cargo install --path .
用法
RICS 使用服务器客户端方法以连接多个进程。每个客户端可以在可配置的路由模式中向其他客户端发送不同类型的消息。每个客户端还可以配置服务器。
RICS 可以使用两种连接系统,Unix 域套接字和 TCP 套接字。服务器可以从命令行启动以监听多个连接。默认套接字在 Linux 上为 /tmp/rics.socket
,在 Windows 上为 localhost:7299
。
要配置允许的连接点,请使用 --tcp
或 --uds
命令行参数启动服务器。
示例
ricsctl start # Starts the server listening only on the default connection point
ricsctl --tcp 192.168.1.100:1000 start # Starts the server listening only on the tcp socket 192.168.1.100 port 1000
ricsctl --uds /tmp/path.socket start # Starts the server listening only on the unix domain docket /tmp/path.socket (must not exist)
ricsctl --tcp 192.168.1.100:1000 --tcp localhost:80000 --uds uds.socket start # Start the server listening on the three provided locations
服务器启动后,可以发送多种类型的多个数据包。以下表格显示了所有支持的包类型。可以使用多个选项来配置服务器对不同协议类型的响应
名称 | 描述 |
---|---|
RAW | 原始数据包类型,内部使用 |
STREAM | 类似流通信协议的一部分 |
CAN | CAN 总线仿真 |
DATAGRAM | 基于数据报的通信协议 |
SYNC | 用于时序关键协议的同步数据包 |
可以使用环境变量 RUST_LOG
来配置输出的详细程度。 RUST_LOG=trace
将显示所有调试信息。
服务器配置
以下所有命令都可以使用--tcp
和--uds
选项来选择要配置的服务器。
ricsctl list
列出已连接的节点。
ricsctl stop
停止已连接的服务器。
ricsctl route SOURCE -t TARGET1 TARGET2
将名为SOURCE
的节点连接到目标TARGET1
和TARGET2
。要断开连接,请添加标志-d
。来自SOURCE
的所有消息都将被TARGET1
和TARGET2
接收,但反之则不然。
ricsctl can broadcast true/false
设置CAN广播标志。如果将CAN广播设置为true,则所有类型的CAN消息都将发送到每个其他节点。
服务器使用
命令行工具还提供了一些常见的客户端操作。
ricsctl log
显示所有接收到的消息。
ricsctl can connect CANIFACE
将服务器连接到socketcan接口CANIFACE。(仅限Linux)
ricsctl can serial PORT [BAUD]
连接到串行到CANbus转换器。我在内部使用此转换器,如果您对此感兴趣,请提出问题。
ricsctl can log
显示所有接收到的CAN消息。
ricsctl can send --id 12 --data '{0,1,2,3}'
发送一个CAN消息。数据和id参数必须是有效的Lua。
ricsctl plugin --lua file.lua
ricsctl plugin --dynlib dynlib.dll/dynlib.so
提供了一种在服务器上运行用户应用的简单方法。下面的Lua和Dynlib API进行了描述。
Lua API
lua文件必须包含以下lua函数
function rics_start(svr, node) -- Called on server connection (node is your node number)
return true
end
function rics_update(svr) -- Called frequently
return true
end
function rics_init() -- Called as soon as the Lua engine is loaded
return true
end
function rics_can_callback(svr, id, data) -- Called when a can message is received
return true
end
待办事项:Dynlib API
如果您对此感兴趣,请提出问题。
Rust API
可以使用Rust库来构建用户应用。可以使用cargo doc
构建Rust文档。
RICS库使用的一个简单示例
extern crate rics;
use rics::server;
fn main() {
server::RICSServer::with_server(server::ConnectTo::Default, move|mut svr| {
svr.connect(true); // Connect as node
let node = svr.who_am_i(); // Get node number
println!("My node name is: {}", node);
svr.send_packet(server::can_packet(12, vec![node])); // Send the node id on packet
});
}
依赖项
~10-22MB
~311K SLoC