Sessions
Why a join failed
Turning a failed join into something you can actually tell the player.
"Could not join" is the least useful thing a game can say. A join has six or seven distinct failure points and Steam reports them through three different mechanisms, so without something structured every one of them reaches the player as the same shrug.
Join Session returns a Steam Join Diagnosis:
| Field | Meaning |
|---|---|
| Success | Whether it worked |
| Failure | A structured reason you can branch on |
| Player Message | Plain language, ready to put on screen |
| Technical Detail | For your log or a bug report |
| Worth Retrying | Whether trying again might work |
| Lobby | The session, when the join got that far |
The failure reasons
| Reason | What it means | Retry? |
|---|---|---|
| Steam Unavailable | Steam is not connected | Yes |
| Session No Longer Exists | The host ended it | No |
| Session Full | No room | Yes |
| Not Accepting Players | The match already started | No |
| Banned From Session | The host banned this account | No |
| Blocked | One player has the other blocked on Steam | No |
| Account Limited | Steam requires a purchase to use matchmaking | No |
| Wrong Password | Joined, then rejected on the password check | Yes |
| Version Mismatch | The host is on a different build | No |
| No Server Address | The host has not started the match yet | Yes |
| Travel Failed | Everything worked until the connection itself | Yes |
Using it
The simplest useful handling is two nodes:
That alone puts you ahead of most shipped games.
For more, branch on Failure:
The post join checks
Some of these can only be decided after the Steam level join succeeds, because none of the session metadata is readable until you are inside the lobby. Password and version are both in that group.
When one of those rejects you, SteamForge leaves the lobby again on your behalf. Without that the player would show as a member of a session they were refused from.