11个版本
0.4.4 | 2024年8月4日 |
---|---|
0.4.0 | 2024年5月5日 |
0.2.9 | 2023年4月29日 |
0.2.8 | 2023年2月20日 |
0.2.0 | 2022年1月20日 |
#878 in WebAssembly
125次每月下载
用于 stateroom-cli
32KB
446 行
stateroom-wasm-host
此crate加载Stateroom WebAssembly模块,并使用实现StateroomService的接口对其进行包装,以便它可以与本地StateroomService实现互换使用。如果您只想提供WebAssembly模块,可以使用stateroom
命令行应用程序(该应用程序使用此crate)而不是直接使用此crate。
WebAssembly接口
主机期望提供的WebAssembly模块将符合特定的接口(即具有特定的命名导入和导出)。最终,WebAssembly扩展如接口类型可能允许我们正式化此接口。
由stateroom-wasm-macro
生成的代码自动符合接口,但如果您在非Rust语言中实现,则必须由您确保导入和导出可用且正确类型化,否则在模块加载时将发生运行时错误。
导出
模块预期导出以下函数
fn jam_malloc(size: u32) -> u32
: 在WebAssembly模块内部分配size
字节的内存并返回一个指针。fn jam_free(loc: *mut u8, size: u32)
: 释放从loc
开始的size
字节的内存。fn initialize(room_id_ptr: *const u8, room_id_len: u32)
: 使用提供的房间ID(以指针和长度对的形式传递)初始化对象。fn connect(client_id: u32)
: 在指定的用户连接后立即调用。fn disconnect(client_id: u32)
: 在指定的用户断开连接后立即调用。fn timer()
: 如果实例设置了定时器并且定时器已经触发(参见set_timer()
),则调用此函数。fn message(client_id: u32, ptr: *const u8, len: u32)
: 当实例从客户端接收文本消息时调用。消息作为(指针,长度)对传递。fn binary(client_id: u32, ptr: *const u8, len: u32)
: 当实例从客户端接收二进制消息时调用。消息作为(指针,长度)对传递。
导入
模块可以从环境中导入这些函数中的任何一个
fn send_message(client_id: u32, message: *const u8, len: u32)
: 以(指针,长度)对的形式发送文本消息。如果client_id == 0
,则消息将广播给所有已连接的用户。fn send_binary(client_id: u32, message: *const u8, len: u32)
: 以(指针,长度)对的形式发送二进制消息。如果client_id == 0
,则消息将广播给所有已连接的用户。fn set_timer(ms_delay: u32)
:请求主机运行时在指定毫秒数后调用timer()
。替换任何之前的定时器请求。如果ms_delay
为 0,则将取消之前的定时器但不会设置新的定时器。
依赖项
~17–27MB
~426K SLoC