9 个不稳定版本 (3 个破坏性更新)
0.4.3 | 2024年5月26日 |
---|---|
0.4.2 | 2024年5月19日 |
0.3.0 | 2024年5月15日 |
0.2.0 | 2024年5月12日 |
0.1.3 | 2024年5月11日 |
在 解析器实现 中排名 483
每月下载量:607
81KB
2K SLoC
已存档!
此分支将不再是发布版本的地方。
请切换到 上游版本,并在您的 Cargo.toml 中进行以下更改
[dependencies]
- servicepoint2 = "0.4.2"
+ servicepoint = "0.5.0"
新的包也在 crates.io 上发布。
servicepoint2
在 CCCB 中,有一块大像素矩阵挂在墙上。它被称为“服务点显示”或“机场显示”。此存储库包含一个库,用于通过 UDP 解析、编码和发送数据包到该显示。
关于稳定性的说明
此库仍在早期开发阶段。您可以绝对使用它,它也正常工作,但请期待每个版本更新带来的微小破坏性更改。在发布 1.0 版本之前,请在您的 Cargo.toml 中指定完整版本,包括补丁。
目前可以预料到语言绑定中存在错误和/或缺少功能。如果您需要特定功能,请打开一个问题或拉取请求。
Rust
这是库表现最佳的地方。任何在安全上下文中由编译器接受的 API 使用都是安全的或存在问题的(欢迎提出问题)
cargo add servicepoint2
fn main() {
// establish connection
let connection = servicepoint2::Connection::open("172.23.42.29:2342")
.expect("connection failed");
// clear screen content
connection.send(servicepoint2::Command::Clear.into())
.expect("send failed");
}
更多示例可在存储库文件夹和 使用此库的项目 部分找到
C / C++
最低共同点。需要注意的事项
- 这是一把电锯。你会割到你的腿。
- 函数名称为:
sp2_
<struct_name> <rust name>。 - 请使用 Rust 文档。
- 实例的消耗方式与在编写 Rust / C# 代码时相同。在(隐式!)释放后不要使用实例。
- Option 或 Result
转换为可空返回值 - 检查 NULL! - 此处尚未针对 C++ 提供具体说明。当直接为 C++ 生成时,您可能会获得更好的头文件,但它应该是可用的。
- 并发读取和写入实例是不安全的。仅并发读取是安全的。
#include <stdio.h>
#include "servicepoint2.h"
int main(void) {
sp2_Connection *connection = sp2_connection_open("localhost:2342");
if (connection == NULL)
return 1;
sp2_PixelGrid *pixels = sp2_pixel_grid_new(sp2_PIXEL_WIDTH, sp2_PIXEL_HEIGHT);
sp2_pixel_grid_fill(pixels, true);
sp2_Command *command = sp2_command_bitmap_linear_win(0, 0, pixels, Uncompressed);
sp2_Packet *packet = sp2_packet_from_command(command);
if (!sp2_connection_send(connection, packet))
return 1;
sp2_connection_dealloc(connection);
return 0;
}
C# / F#
内部使用 C 绑定以提供类似 Rust 的 API。需要注意的事项
- 当尝试调用已经消耗掉本地实例的方法时(例如,在
Send
发送命令实例两次时),您将得到一个NullPointerException
。如果您想继续使用它,请发送一个克隆副本而不是原始副本。 - 某些低级API在不正确使用时会触发本地代码的恐慌。例如:在释放实例后操作对象的
Span<byte>
。 - C#的特定内容已在库中记录。对于其他所有内容,请使用Rust文档。命名和语义相同,只是将kebab_case替换为CamelCase。
- 您只能在本地代码的调试构建中获得Rust回溯。
- F#没有明确测试。如果有可用性或功能问题,请提出问题。
- 并发读取和写入实例是不安全的。仅并发读取是安全的。
using ServicePoint2;
// using statement calls Dispose() on scope exit, which frees unmanaged instances
using var connection = Connection.Open("127.0.0.1:2342");
using var pixels = PixelGrid.New(Constants.PixelWidth, Constants.PixelHeight);
while (true)
{
pixels.Fill(true);
connection.Send(Command.BitmapLinearWin(0, 0, pixels.Clone()));
Thread.Sleep(5000);
pixels.Fill(false);
connection.Send(Command.BitmapLinearWin(0, 0, pixels.Clone()));
Thread.Sleep(5000);
}
安装
NuGet包不是分发本地项目的好方法(相关问题)。因此,没有可以直接使用的NuGet包。将此存储库作为子模块包含并从源代码构建是推荐使用库的方法。
git submodule add https://github.com/kaesaecracker/servicepoint.git
git commit -m "add servicepoint submodule"
现在您可以在您的项目中引用servicepoint2-bindings-cs/src/ServicePoint2.csproj
。Rust库将自动构建。
如果您需要构建在不同平台上复制不同的库文件,请以问题的形式提供更多信息。
安装
将头文件复制到您的项目中并编译。
您可以选择静态链接(推荐)或动态链接。
- C语言示例展示了如何链接到
staticlib
变体。 - 动态链接时,您必须在运行时提供与
cdylib
相同的版本,因为目前还没有API/ABI保证。
功能
此库有多个压缩库作为可选依赖项。如果您不需要压缩/解压缩支持,您可以禁用这些功能。在您可能只需要其中之一的情况下,您可以仅包含该特定之一。
[dependencies.servicepoint2]
git = "https://github.com/kaesaecracker/servicepoint.git"
default-features = false
features = ["compression-bz"]
语言绑定不知道哪些功能可用,可能在运行时失败。建议为用于Rust之外构建的构建包含所有功能。
使用该库的项目
- 屏幕模拟器(Rust):https://github.com/kaesaecracker/pixel-receiver-rs
- 坦克游戏(C#):https://github.com/kaesaecracker/cccb-tanks-cs
要将自己添加到列表中,请提交一个pull request。
servicepoint1在哪里?
此库是一个尚未工作的Rust库servicepoint
和一些工作但未完成的C#代码的精神混合体。由于大多数API概念和大量代码是从Rust库中获取的,因此结果被称为servicepoint2
。
贡献
接受任何形式的贡献(问题、文档、功能请求、代码、审查等)。
所有生物都欢迎。
依赖关系
~48–760KB
~12K SLoC