Releases: Ambiguous-Interactive/signal-fish-client-rust
Releases · Ambiguous-Interactive/signal-fish-client-rust
v0.5.0
Added
- Protocol v2: explicit
ClientMessage::StartGameto begin a game once players
are ready (SignalFishClient::start_game()/SignalFishPollingClient::start_game()),
plus error codesGameStartNotReady(GAME_START_NOT_READY) and
GameStartForbidden(GAME_START_FORBIDDEN). - Protocol v3 (additive, backward-compatible "relay floor"): new wire types
Topology,TransportKind,IceServer,SessionPeer,SessionPlanPayload,
and the externally-tagged, matchbox-compatiblePeerSignal
(Offer/Answer/IceCandidate). - New client messages
SignalandTransportStatus, and new server messages
Signal,NewPeer,SessionPlan, andPeerTransportStatus, surfaced as the
correspondingSignalFishEventvariants. - Six v3 error codes:
CROSS_ROOM_SIGNAL,UNSUPPORTED_TRANSPORT,
SIGNAL_TARGET_NOT_FOUND,SIGNAL_RATE_LIMITED,SIGNAL_TOO_LARGE, and
CONNECTION_IDLE_TIMEOUT. SignalFishConfig::enable_mesh()(one-liner mesh opt-in) plus
with_protocol_version/with_transports/with_topologies.Authenticate
gains optionalprotocol_version/supported_transports/supported_topologies
(omitted from the wire by default, so v2 bytes are unchanged);ProtocolInfo
gains negotiated version fields;RoomJoined/Reconnectedgain optional
ice_servers(ICE pre-gather).- Mesh client API:
send_signal/send_offer/send_answer/send_ice_candidate/
send_raw_signal,report_transport_status,negotiated_protocol_version(),
andsupports_mesh()on both clients; a fail-fast
SignalFishError::ProtocolUnsupportedguard for v3 sends before negotiation. meshfeature:MeshSession(zero-dependency v3 state tracker) and the
batteries-includedWebRtcDriverseam +MeshControllerthat drives the whole
signaling handshake against a consumer's WebRTC backend, with a runnable
examples/mesh_session.rs.- Golden-wire conformance: vendored server protocol samples
(tests/wire-samples/) with semantic round-trip tests
(tests/wire_golden_tests.rs, compared asserde_json::Valueso key
order / whitespace are ignored) and a scheduled drift workflow
(.github/workflows/protocol-sync.yml). The default relay path is verified
byte-identical to v2.
Fixed
- Dev container: removed Unix-only host initialization and required host-home
credential bind mounts (~/.ssh,~/.gitconfig,~/.gnupg) so VS Code can
open the devcontainer reliably across Windows, macOS, Linux, WSL, Codespaces,
and remote Docker hosts. Previously the container could fail before startup
wheninitializeCommandran through Windowscmd.exe, whenHOMEwas unset,
or when host credential paths were missing/not shared with Docker.
Changed
- Game start is now explicit (migration). The game no longer auto-starts when
all players are ready — the authority (or any member, if the room has no
authority) must callstart_game(). Non-authority callers in an authority room
receiveGameStartForbidden; calling before everyone is ready yields
GameStartNotReady. - Relay users are unaffected. Clients that do not call
enable_mesh()see no
wire-format or behavioral change — the relay path is byte-identical to v2. Mesh
signaling is strictly opt-in. - Adding variants to the public
ClientMessage,ServerMessage,
SignalFishEvent,ErrorCode, andSignalFishErrorenums is breaking under
semver, so this is a MINOR (0.4.1→0.5.0) bump for a 0.x crate. - Dependabot: corrected
open-pull-requests-limitfrom 2 to 1 for both the
cargoandgithub-actionsecosystems, aligning the config value with the
documented "single consolidated batch PR" intent. Updated header comment from
"area PRs" to "ecosystem-based PRs" for clarity. - CI policy tests: added three new tests in
ci_config_tests.rsto enforce
Dependabot structural invariants — each ecosystem must set
open-pull-requests-limit: 1, all ecosystem limits must be consistent, and
every ecosystem must declare a wildcard catchall group.
v0.4.1
Changed
- Updated CI
lycheeverse/lychee-actionto v2.8.0 (lychee v0.23.0); migrated.lychee.tomlheaderfield from array-of-strings to TOML inline-table format to match the new lychee config schema. - Removed
tokio-testas a dev-dependency.
v0.4.0
Added
transport-websocket-emscriptenfeature flag withEmscriptenWebSocketTransport— aTransportimplementation using raw FFI to Emscripten's<emscripten/websocket.h>C API forwasm32-unknown-emscriptentargets. Automatically enables thepolling-clientfeature.polling-clientfeature flag withSignalFishPollingClient— a synchronous, polling-based client for environments without an async runtime (e.g., game loops, single-threaded WASM).tokio-runtimefeature flag for explicit opt-in to the Tokio runtime (tokio/rt,tokio/time), automatically enabled bytransport-websocket.
v0.3.1
Fixed
- WASM target dependency configuration now enables
uuidfeaturesv4,serde, andjstogether forwasm32, ensuring UUID generation and serialization support remain available when compiling for WebAssembly.
v0.3.0
Added
SignalFishConfig::event_channel_capacityfield (default256) for tuning the bounded event channel size.SignalFishConfig::shutdown_timeoutfield (default1 second) for controlling graceful-shutdown wait time.SignalFishConfig::with_event_channel_capacity(n)builder method.SignalFishConfig::with_shutdown_timeout(d)builder method.
Changed
SignalFishConfig::with_event_channel_capacitynow clamps values below1to1, so the stored config value matches documented behavior.
Fixed
SignalFishClient::shutdownnow aborts the background transport task if graceful shutdown exceedsshutdown_timeout, preventing detached tasks from running indefinitely.SignalFishClient::shutdownand disconnect handling now always clearauthenticated,player_id,room_id, androom_code, preventing stale state when shutdown times out or the transport task is aborted beforeDisconnectedis emitted.
v0.2.2
Release 0.2.2
v0.2.0
Release 0.2.0