2 个版本

0.2.2 2021 年 3 月 7 日
0.2.0 2020 年 10 月 27 日

4#socket-server

MIT 许可证

160KB
3K SLoC

目录

  1. ricsctl
    1. 安装
      1. Windows
      2. Linux
    2. 用法
      1. 服务器配置
      2. 服务器使用
      3. Lua API
      4. Dynlib API
      5. Rust API

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的节点连接到目标TARGET1TARGET2。要断开连接,请添加标志-d。来自SOURCE的所有消息都将被TARGET1TARGET2接收,但反之则不然。

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