Crates.io | stateroom-wasm-host |
lib.rs | stateroom-wasm-host |
version | 0.4.4 |
source | src |
created_at | 2022-01-20 12:19:06.110759 |
updated_at | 2024-08-04 17:05:07.171046 |
description | A Stateroom service implementation that takes a WebAssembly module and delegates behavior to it. |
homepage | |
repository | https://github.com/drifting-in-space/stateroom |
max_upload_size | |
id | 517629 |
size | 14,301 |
This crate loads a Stateroom WebAssembly module and wraps it in an interface
that implements StateroomService, so that it can be used interchangably with
native StateroomService implementations. If you only want to serve WebAssembly
modules, you can use the stateroom
command-line application (which uses this
crate) instead of using this crate directly.
The host expects that the WebAssembly module provided to it will conform to a particular interface (that is, has particular named imports and exports). Eventually, WebAssembly extensions like Interface Types may allow us to formalize this interface.
Code generated by stateroom-wasm-macro
automatically conforms to the interface,
but if you are implementing in a non-Rust language, it's up to you to ensure that
imports and exports are available and correctly typed, or else a runtime error
will occur when the module is loaded.
The module is expected to export these functions:
fn jam_malloc(size: u32) -> u32
: Allocate size
bytes of memory inside the WebAssembly module and return a pointer.fn jam_free(loc: *mut u8, size: u32)
: Free size
bytes of memory starting at loc
.fn initialize(room_id_ptr: *const u8, room_id_len: u32)
: Initialize the object with the provided room ID (passed as a pointer, length pair).fn connect(client_id: u32)
: Called immediately after the given user has connected.fn disconnect(client_id: u32)
: Called immediately after the given user has disconnected.fn timer()
: Called if the instance set a timer which has triggered (see set_timer()
under imports).fn message(client_id: u32, ptr: *const u8, len: u32)
: Called when the instance receives a text message from a client. The message is passed as a (pointer, length) pair.fn binary(client_id: u32, ptr: *const u8, len: u32)
: Called when the instance receives a binary message from a client. The message is passed as a (pointer, length) pair.The module may import any of these functions from the environment:
fn send_message(client_id: u32, message: *const u8, len: u32)
: Send the text message, provided as a (pointer, length) pair. If client_id == 0
, the mesage will
be broadcast to all connected users.fn send_binary(client_id: u32, message: *const u8, len: u32)
: Send the binary message, provided as a (pointer, length) pair. If client_id == 0
, the mesage will
be broadcast to all connected users.fn set_timer(ms_delay: u32)
: Asks the host runtime to call timer()
in a given
number of milliseconds. Replaces any previous timer request. If ms_delay
is 0,
the previous timer will be cancelled but no new timer will be set.