#wasm-module #stateroom #wasm-interface #websocket

stateroom-wasm-host

一种Stateroom服务实现,它接受一个WebAssembly模块并将行为委托给它

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

Download history 77/week @ 2024-04-29 38/week @ 2024-05-06 8/week @ 2024-05-20 2/week @ 2024-05-27 2/week @ 2024-06-03 3/week @ 2024-06-10 30/week @ 2024-07-01 76/week @ 2024-07-29 43/week @ 2024-08-05 6/week @ 2024-08-12

125次每月下载
用于 stateroom-cli

MIT/Apache

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