feat(sendspin-rs): add a server adapter for the PCM player scenarios - #98
Draft
davidgraeff wants to merge 1 commit into
Draft
feat(sendspin-rs): add a server adapter for the PCM player scenarios#98davidgraeff wants to merge 1 commit into
davidgraeff wants to merge 1 commit into
Conversation
sendspin-rs previously had only a client adapter; its server role was a placeholder. Add a real Rust server adapter that drives the crate's server API (ServerListener / dial_client + Group) so sendspin-rs can be exercised as a server against real clients. - adapters/sendspin-rs/server/: decodes the FLAC fixture with claxon, negotiates the PCM bit depth from the client's hello, and streams via Group. Covers client-initiated PCM (bind + accept), server-initiated PCM (dial in), and server-initiated 24-bit PCM. Paces pushes so the connection's audio backlog stays shallow; reports the canonical source PCM hash. - build.py: build the `sendspin-rs-server` cargo target. - implementations.py: flip the sendspin-rs server role to supported (player/PCM only — the crate's server is player-role, PCM v1). Validated locally against the sendspin-rs client adapter: client-initiated-pcm, server-initiated-pcm, and server-initiated-pcm-24bit all pass (canonical PCM hashes match).
davidgraeff
commented
Jul 19, 2026
| [dependencies] | ||
| clap = { version = "4.5", features = ["derive"] } | ||
| claxon = "0.4" | ||
| sendspin = { path = "../../../repos/sendspin-rs" } |
Author
There was a problem hiding this comment.
TODO: How should I reference the sendspin-rs
davidgraeff
force-pushed
the
feat/sendspin-rs-server-adapter
branch
from
July 19, 2026 01:14
3c0a908 to
bf248d6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a real Rust server adapter for
sendspin-rs, which previously hadonly a client adapter (its server role was a placeholder). This lets the
matrix exercise sendspin-rs as a server against real clients.
adapters/sendspin-rs/server/drives the crate's server API(
ServerListener/dial_client+Group): decodes the FLAC fixture withclaxon, negotiates the PCM bit depth from the client'sclient/hello, andstreams via the real
Grouppush path. It paces pushes so the connection'saudio backlog stays shallow, and reports the canonical source PCM hash.
build.py: builds thesendspin-rs-servercargo target.implementations.py: flips thesendspin-rsserver role tosupported,scoped to the player/PCM scenarios (the crate's server is player-role,
PCM v1 — no FLAC/OPUS/metadata/controller/artwork/request-format, so those
rows stay filtered).
Covered scenarios:
client-initiated-pcm(bind + accept),server-initiated-pcm(dial in),server-initiated-pcm-24bit(24-bitnegotiation).
Validation
Run locally against the
sendspin-rsclient adapter:Draft — why
repos/sendspin-rs. Theserver role it depends on is not yet in
sendspin-rsmain— it lives inthe open server-role PR (Add a server role: synchronized multi-client audio push, mDNS discovery/advertising, and supervised connections sendspin-rs#87). This adapter should land
after (or alongside) that.
aiosendspinHEAD as the client, the handshake currently failsbecause that client opens with a
client/initmessage (the in-progressencryption negotiation); the sendspin-rs v1 server expects
client/hellofirst. Flagging for awareness — not worked around here.
Marked draft until the upstream server role lands and the cross-implementation
runs are confirmed on a host that prebuilds all adapters.