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

Download history 481/week @ 2024-05-10 323/week @ 2024-05-17 168/week @ 2024-05-24 12/week @ 2024-05-31 2/week @ 2024-06-07 2/week @ 2024-06-28 24/week @ 2024-07-05

每月下载量:607

GPL-3.0-or-later

81KB
2K SLoC

已存档!

此分支将不再是发布版本的地方。

请切换到 上游版本,并在您的 Cargo.toml 中进行以下更改

[dependencies]
- servicepoint2 = "0.4.2"
+ servicepoint = "0.5.0"

新的包也在 crates.io 上发布。

servicepoint2

crates.io Crates.io Total Downloads docs.rs GPLv3 licensed

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之外构建的构建包含所有功能。

使用该库的项目

要将自己添加到列表中,请提交一个pull request。

servicepoint1在哪里?

此库是一个尚未工作的Rust库servicepoint和一些工作但未完成的C#代码的精神混合体。由于大多数API概念和大量代码是从Rust库中获取的,因此结果被称为servicepoint2

贡献

接受任何形式的贡献(问题、文档、功能请求、代码、审查等)。

所有生物都欢迎。

依赖关系

~48–760KB
~12K SLoC