lobby/client.lisp
luv/presence/
luv/presence/+
luv/store/
luv/store/+
One application instance heard on the current connection.
An immutable, connection-scoped view suitable for a frame boundary.
The socket-owning edge used by one lobby-client worker.
Open and return client's worker-owned connection.
Subscribe connection to client's shared lobby topics.
Publish client's retained presence payload.
Return TOPIC and PAYLOAD for one publication, or NIL on a bounded idle poll.
Close connection without allowing an error to escape cleanup.
The MQTT lobby transport. Every blocking operation is owned by the worker and bounded tightly enough for cooperative application shutdown.
A restartable radio whose worker publishes connection-scoped snapshots.
Make a stopped lobby client. start-lobby-client owns all transport I/O.
Publish status while CLIENT-LOCK is held.
Copy client's small semantic state atomically; never touches its transport.
Return client's STATUS, PEER-COUNT, LAST-ERROR, and REVISION as values.
This is the constant-work frame-boundary view: it neither copies nor sorts the
peer collection and never touches the transport. Detailed tools which need
peer identities continue to use lobby-client-snapshot.
Return the current connection's retained value for key, or NIL.
Publish one transport TOPIC/PAYLOAD into client's semantic local state.
The broker rejects a zero-byte Will even though MQTT permits it. A NUL is the retained radio tombstone; graceful shutdown uses empty.
Only the worker ever speaks on the connection, including graceful presence deletion and close. STOP merely publishes a local flag.
Start client once. A stopped client may be restarted with fresh state.
Request cooperative stop and wait at most timeout seconds.
No transport operation occurs on the caller. Repeated stops are idempotent.
run-lobby-client normally clears this itself. Clearing a dead thread
here also recovers cleanly if an implementation returns before its
unwind cleanup becomes visible.
luv/presence/
luv/presence/+
luv/store/
luv/store/+
One application instance heard on the current connection.
The socket-owning edge used by one LOBBY-CLIENT worker.
A restartable radio whose worker publishes connection-scoped snapshots.
(transport connection client)Subscribe CONNECTION to CLIENT's shared lobby topics.
(transport connection client payload)Publish CLIENT's retained presence PAYLOAD.
(transport connection client)Return TOPIC and PAYLOAD for one publication, or NIL on a bounded idle poll.
(transport connection client)Close CONNECTION without allowing an error to escape cleanup.
The MQTT lobby transport. Every blocking operation is owned by the worker and bounded tightly enough for cooperative application shutdown.
((call tool-call) stream)(prefix topic)Logical conjunction of tests and raw truth values.
Test whether one compatible scalar is at most another.
(text)Logical disjunction of tests and raw truth values.
(&key (name (default-lobby-participant-name))
(client-id-prefix "luv")
(transport (make-instance 'mqtt-lobby-transport)))(client)(client)(client)(client status &key condition clear-cache-p)Logical negation of one test or raw truth value.
(client status &key condition clear-cache-p)(client)(client)(client)Return CLIENT's STATUS, PEER-COUNT, LAST-ERROR, and REVISION as values. This is the constant-work frame-boundary view: it neither copies nor sorts the peer collection and never touches the transport. Detailed tools which need peer identities continue to use LOBBY-CLIENT-SNAPSHOT.
(client key)(client topic payload)Publish one transport TOPIC/PAYLOAD into CLIENT's semantic local state.
(client seconds)(client)Test whether two compatible scalars are equal.
The minimum of compatible quantities.
Multiplication and scalar scaling.
(client &key (timeout 3/4))Request cooperative stop and wait at most TIMEOUT seconds. No transport operation occurs on the caller. Repeated stops are idempotent.
A reusable application lobby radio.
One worker owns the transport connection. Applications and their render threads see only immutable semantic snapshots and retained values copied under a small mutex; they never perform socket I/O.