lobby/client-tests.lisp
A duplicate publication changes neither the count nor the cheap semantic revision.
A connecting transition begins a new subscription epoch. Both peer presence and retained values must be reconstructed by that connection.
Restart reuses the semantic owner but starts a fresh worker and subscription epoch instead of retaining STOPPING-P forever.
The socket-owning edge used by one LOBBY-CLIENT worker.
(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.
(predicate &key (timeout 1.0))Test whether two compatible scalars are equal.
Addition over compatible quantities.
Multiplication and scalar scaling.
Test whether one compatible scalar is at least another.
(&key (name (default-lobby-participant-name))
(client-id-prefix "luv")
(transport (make-instance 'mqtt-lobby-transport)))(client topic payload)Publish one transport TOPIC/PAYLOAD into CLIENT's semantic local state.
(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 status &key condition clear-cache-p)(client)(client)(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.
Logical negation of one test or raw truth value.
Test whether one compatible scalar is less than another.
Division of two represented quantities.
Subtraction or unary negation.
A real transport has the same bounded idle poll. This tiny pause keeps the fake worker cooperative without turning the test into a busy loop.