Sessions and Presence
"Session" names several things in this SDK, and none of them is a match. A match, a lobby waiting to become one, a room or a table is kept by your app's server code, and every client reads that record rather than keeping its own.
The login session is your signed-in identity. The session channel is a transport every client of the app joins (__crowdy_session_<appId>). A Crowdy Team is a persistent group with membership and roles. None of them is a match, and being in one does not make a player part of one.
Presence is the player's actor
There is no heartbeat call. While a client's UDP connection is up and it is replicating an actor in the app, that client is present. The server knows a client by the actor updates it sends: a client with no fresh actor is at no position on the map and receives no spatial event. A headless or API-only client, a test bot with no UDP connection, or a menu-only flow has no actor to be present with.
Server code hears presence too: on ck-exec, the app's root hub is told who entered or left the app's world. See presence.
The session channel
The session channel is a shared transport, named __crowdy_session_<appId>, that every client of the app joins as soon as it connects. Reliable RPC events ride it. You never have to create it; the runtime creates it on demand, and the Channels page in Crowdy Studio can pre-create it so it is visible right away.
Matches, lobbies and rooms
A match is state the game must be able to trust (its roster, its host, whose turn it is, the score), so it lives on the truth plane, in your server code. On ck-exec that is a hub for the match: the session starter pack keeps one game from lobby to result, with a host, ready checks, turns with a time limit, and a winner.
The SDK's own session API (Create, Join, Leave and End on the Game Model subsystem, and the active session) was built on the game API's legacy game-model engine, which ck-exec replaced; the game API no longer serves it. Since v2.18.0 the SDK marks it deprecated and every call fails at once, and a later release removes it. A match is a Server Object (from Blueprint or C++); see Move from Game Models.
Gotchas
- A client that never spawns an actor is never present. Spawn the player's pawn once the connection is up.
- The session channel is not a match and carries no roster. Keep who is playing in your server code.
Related
- The Two Planes: why the server, not your client, keeps the record of a match.
- The Host Is a Convention: what the elected view-plane host does and does not decide.
- Channels: the session channel and named channels.