WebSocket-based bidirectional messaging protocol for the FAForever lobby server.
All messages are JSON objects separated by newlines, with a command field identifying the message type.
This spec covers:
target: "game")Server receives authentication request with OAuth token
Available only on servers:
Accepts the following message:
Authenticate with token
{
"command": "auth",
"token": "eyJhbGciOiJSUzI1NiJ9...",
"unique_id": "7d04beb8-d4b8-40f5-8464-a9efa8546728",
"session": 812469452
}
Server receives request for a session ID
Available only on servers:
Accepts the following message:
Request a session
{
"command": "ask_session",
"version": "0.11.16",
"user_agent": "faf-client"
}
Server receives request to host a game
Available only on servers:
Accepts the following message:
Host a public custom game
{
"command": "game_host",
"title": "Test game",
"visibility": "public",
"mod": "faf",
"mapname": "scmp_007",
"password": null
}
Server receives request to join a game
Available only on servers:
Accepts the following message:
Join a game by ID
{
"command": "game_join",
"uid": 42,
"password": null
}
Server receives request to restore a game session
Available only on servers:
Accepts the following message:
Reconnect to an existing game that is still in lobby or live state
Restore game session
{
"command": "restore_game_session",
"game_id": 42
}
Server receives request to join or leave a matchmaking queue
Available only on servers:
Accepts the following message:
Start searching ladder1v1 queue
{
"command": "game_matchmaking",
"queue_name": "ladder1v1",
"state": "start"
}
Server receives response to match readiness check
Available only on servers:
Accepts the following message:
Respond ready
{
"command": "is_ready_response",
"request_id": "abc123"
}
Server receives request for latest matchmaker queue info
Available only on servers:
Accepts the following message:
Request matchmaker info
{
"command": "matchmaker_info"
}
Server receives request to set map vetoes
Available only on servers:
Accepts the following message:
Veto a map
{
"command": "set_player_vetoes",
"vetoes": [
{
"map_pool_map_version_id": 15,
"veto_tokens_applied": 1
}
]
}
Server receives request to add a friend or foe
Available only on servers:
Accepts the following message:
Exactly one of friend or foe must be provided.
Add a friend
{
"command": "social_add",
"friend": 42
}
Add a foe
{
"command": "social_add",
"foe": 99
}
Server receives request to remove a friend or foe
Available only on servers:
Accepts the following message:
Exactly one of friend or foe must be provided.
Remove a friend
{
"command": "social_remove",
"friend": 42
}
Server receives avatar list or select request
Available only on servers:
Accepts the following message:
List available avatars
{
"command": "avatar",
"action": "list_avatar"
}
Select an avatar
{
"command": "avatar",
"action": "select",
"avatar": "https://content.faforever.com/faf/avatars/UEF.png"
}
Server receives admin action (requires appropriate permissions)
Available only on servers:
Accepts the following message:
Requires appropriate server permissions (ADMIN_KICK_SERVER, ADMIN_BROADCAST_MESSAGE, ADMIN_JOIN_CHANNEL)
Kick a player
{
"command": "admin",
"action": "closelobby",
"user_id": 42
}
Broadcast a message
{
"command": "admin",
"action": "broadcast",
"message": "Server will restart in 5 minutes"
}
Server receives request to invite a player to a party
Available only on servers:
Accepts the following message:
Invite player 3 to party
{
"command": "invite_to_party",
"recipient_id": 3
}
Server receives request to accept a party invite
Available only on servers:
Accepts the following message:
Accept invite from player 1
{
"command": "accept_party_invite",
"sender_id": 1
}
Server receives request to kick a player from a party
Available only on servers:
Accepts the following message:
Kick player 3 from party
{
"command": "kick_player_from_party",
"kicked_player_id": 3
}
Server receives request to leave a party
Available only on servers:
Accepts the following message:
Leave current party
{
"command": "leave_party"
}
Server receives request to unready a party
Available only on servers:
Accepts the following message:
Unready party
{
"command": "unready_party"
}
Server receives request to set party faction preferences
Available only on servers:
Accepts the following message:
Set UEF faction preference
{
"command": "set_party_factions",
"factions": [
"uef"
]
}
Server receives request for cooperative mission list
Available only on servers:
Accepts the following message:
Server responds with one coop_info message per mission
Request co-op mission list
{
"command": "coop_list"
}
Server receives mod vault request (DEPRECATED - use FAF API instead)
Available only on servers:
Accepts the following message:
DEPRECATED: Use the FAF API instead
List mods
{
"command": "modvault",
"type": "start"
}
Like a mod
{
"command": "modvault",
"type": "like",
"uid": "FFF"
}
Server receives ICE servers request (DEPRECATED - handled outside lobby server)
Available only on servers:
Accepts the following message:
DEPRECATED: ICE servers are handled outside of the lobby server. Response will always be an empty list.
Request ICE servers (deprecated)
{
"command": "ice_servers"
}
Ping received from client
Available only on servers:
Accepts the following message:
Ping
{
"command": "ping"
}
Pong received from client
Available only on servers:
Accepts the following message:
Pong
{
"command": "pong"
}
Server sends welcome message after successful authentication
Available only on servers:
Accepts the following message:
Sent immediately after successful authentication. Contains the player's own info.
Welcome after login
{
"command": "welcome",
"me": {
"id": 3,
"login": "Rhiza",
"clan": "123",
"country": "",
"ratings": {
"global": {
"rating": [
1650,
62.52
],
"number_of_games": 2
},
"ladder_1v1": {
"rating": [
1650,
62.52
],
"number_of_games": 2
}
},
"global_rating": [
1650,
62.52
],
"ladder_rating": [
1650,
62.52
],
"number_of_games": 2
},
"current_time": "1970-01-01T00:00:00+00:00",
"id": 3,
"login": "Rhiza"
}
Server sends session ID in response to ask_session
Available only on servers:
Accepts the following message:
Session response
{
"command": "session",
"session": 812469452
}
Server sends authentication failure message
Available only on servers:
Accepts the following message:
Login failed
{
"command": "authentication_failed",
"text": "Login not found or password incorrect. They are case sensitive."
}
Server sends player information (on login and broadcast updates)
Available only on servers:
Accepts the following message:
Sent after login with all online players, and periodically broadcast when player data changes (ratings, avatar, state, etc.)
Player info update
{
"command": "player_info",
"players": [
{
"id": 3,
"login": "Rhiza",
"clan": "123",
"country": "",
"ratings": {
"global": {
"rating": [
1650,
62.52
],
"number_of_games": 2
},
"ladder_1v1": {
"rating": [
1650,
62.52
],
"number_of_games": 2
}
},
"global_rating": [
1650,
62.52
],
"ladder_rating": [
1650,
62.52
],
"number_of_games": 2
}
]
}
Server sends game information (on login and broadcast updates)
Available only on servers:
Accepts the following message:
Sent after login with all visible open games, and periodically broadcast when game data changes (players join/leave, state changes, etc.)
Game info broadcast with nested games
{
"command": "game_info",
"games": [
{
"command": "game_info",
"visibility": "public",
"password_protected": false,
"uid": 42,
"title": "Test Game",
"state": "open",
"game_type": "custom",
"featured_mod": "faf",
"sim_mods": {},
"mapname": "scmp_007",
"map_file_path": "maps/scmp_007.zip",
"host": "test",
"num_players": 1,
"max_players": 12,
"hosted_at": "2023-01-01T12:00:00+00:00",
"launched_at": null,
"rating_type": "global",
"rating_min": null,
"rating_max": null,
"enforce_rating_range": false,
"teams_ids": [
{
"team_id": 2,
"player_ids": [
1
]
}
],
"teams": {
"2": [
"test"
]
}
}
]
}
Server sends friend/foe list and channel info after login
Available only on servers:
Accepts the following message:
Sent after login with friend/foe lists and auto-join channels
Social data after login
{
"command": "social",
"autojoin": [
"#123_clan"
],
"channels": [
"#123_clan"
],
"friends": [],
"foes": [
400
],
"power": 2
}
Server tells client to launch the game
Available only on servers:
Accepts the following message:
Tells the client to launch the game executable. Sent when hosting, joining, or starting a matchmaker game.
Launch a custom game
{
"command": "game_launch",
"args": [
"/numgames",
5
],
"uid": 42,
"mod": "faf",
"name": "Test Game Name",
"init_mode": 0,
"game_type": "custom",
"rating_type": "global"
}
Launch a matchmaker game
{
"command": "game_launch",
"args": [
"/numgames",
0
],
"uid": 41956,
"mod": "ladder1v1",
"name": "ladder1 Vs ladder2",
"init_mode": 1,
"game_type": "matchmaker",
"rating_type": "ladder_1v1",
"team": 2,
"faction": 1,
"expected_players": 2,
"map_position": 1,
"mapname": "scmp_015",
"map_pool_map_version_id": 1
}
Server notifies client that joining a game failed
Available only on servers:
Accepts the following message:
Host left game
{
"command": "game_join_failed",
"reason": "host_left_game",
"uid": 42
}
Bad password
{
"command": "game_join_failed",
"reason": "bad_password",
"uid": 42
}
Server sends matchmaker queue information
Available only on servers:
Accepts the following message:
Sent in response to matchmaker_info request and periodically broadcast
Matchmaker queue status
{
"command": "matchmaker_info",
"queues": [
{
"queue_name": "ladder1v1",
"queue_pop_time": "2023-01-01T12:02:00+00:00",
"queue_pop_time_delta": 90.5,
"num_players": 12,
"team_size": 1,
"boundary_80s": [
[
800,
1200
]
],
"boundary_75s": [
[
700,
1300
]
]
}
]
}
Server sends matchmaking search status update
Available only on servers:
Accepts the following message:
Started searching
{
"command": "search_info",
"queue_name": "ladder1v1",
"state": "start"
}
Stopped searching
{
"command": "search_info",
"queue_name": "ladder1v1",
"state": "stop"
}
Server sends matchmaking timeout information for violated players
Available only on servers:
Accepts the following message:
Sent when players have violations that prevent them from searching
Player timed out from searching
{
"command": "search_timeout",
"timeouts": [
{
"player": 123,
"expires_at": "2022-02-05T00:10:00+00:00"
}
]
}
Server sends violation info when a player fails to connect to a match
Available only on servers:
Accepts the following message:
Sent when a player fails to connect to a matchmaker game
First violation
{
"command": "search_violation",
"count": 1,
"time": "2022-02-05T00:00:00+00:00"
}
Server notifies client that a match has been found
Available only on servers:
Accepts the following message:
Sent to all players in a match when the matchmaker finds a game
Match found in ladder queue
{
"command": "match_found",
"queue_name": "ladder1v1"
}
Server notifies client that a match was cancelled (e.g. player failed to connect)
Available only on servers:
Accepts the following message:
Sent when a matchmaker game fails to start (e.g. player didn't connect in time)
Match cancelled
{
"command": "match_cancelled",
"game_id": 41956
}
Server sends party state update to all party members
Available only on servers:
Accepts the following message:
Broadcast to all party members when party state changes
Party with two members
{
"command": "update_party",
"owner": 1,
"members": [
{
"player": 1,
"factions": [
"uef"
]
},
{
"player": 3,
"factions": [
"uef",
"aeon",
"cybran",
"seraphim"
]
}
]
}
Server sends party invitation to a player
Available only on servers:
Accepts the following message:
Party invite from player 1
{
"command": "party_invite",
"sender": 1
}
Server notifies player they were kicked from a party
Available only on servers:
Accepts the following message:
Kicked from party
{
"command": "kicked_from_party"
}
Server sends current map veto information
Available only on servers:
Accepts the following message:
Sent when veto state changes or is requested
Vetoes info
{
"command": "vetoes_info",
"forced": false,
"vetoes": [
{
"map_pool_map_version_id": 15,
"veto_tokens_applied": 1,
"matchmaker_queue_map_pool_id": 3
}
]
}
Server sends cooperative mission information
Available only on servers:
Accepts the following message:
One message per co-op mission, sent in response to coop_list request
FA Campaign mission
{
"command": "coop_info",
"uid": 1,
"type": "FA Campaign",
"name": "FA Campaign map",
"description": "A map from the FA campaign",
"filename": "maps/scmp_coop_123.v0002.zip",
"featured_mod": "coop"
}
Server sends list of available avatars for the player
Available only on servers:
Accepts the following message:
Sent in response to avatar list_avatar request
Avatar list
{
"command": "avatar",
"avatarlist": [
{
"url": "https://content.faforever.com/faf/avatars/UEF.png",
"tooltip": "UEF"
},
{
"url": "https://content.faforever.com/faf/avatars/Aeon.png",
"tooltip": "Aeon"
}
]
}
Server sends mod vault information (DEPRECATED - use FAF API)
Available only on servers:
Accepts the following message:
DEPRECATED: Use the FAF API instead
Mod vault entry
{
"command": "modvault_info",
"uid": "FFF",
"name": "Mod without icon",
"version": 1,
"author": "foo",
"description": "The best version so far",
"ui": 1,
"thumbnail": "",
"link": "http://content.faforever.com/faf/vault/noicon.zip",
"bugreports": [],
"comments": [],
"played": 0,
"likes": 1,
"downloads": 0
}
Server sends updated achievement data
Available only on servers:
Accepts the following message:
Achievement update
{
"command": "updated_achievements",
"updated_achievements": []
}
Server sends IRC password (DEPRECATED - data is meaningless)
Available only on servers:
Accepts the following message:
DEPRECATED: IRC passwords are handled outside of the lobby server. The password field is meaningless.
IRC password (always deprecated)
{
"command": "irc_password",
"password": "deprecated"
}
Server sends ICE server list (DEPRECATED - always empty)
Available only on servers:
Accepts the following message:
DEPRECATED: ICE servers are handled outside of the lobby server. The list is always empty.
Empty ICE servers (deprecated)
{
"command": "ice_servers",
"ice_servers": []
}
Server sends a notification or error message
Available only on servers:
Accepts the following message:
Generic notification message. The style field indicates severity:
Info notice
{
"command": "notice",
"style": "info",
"text": "The host has left the game."
}
Error notice (ban)
{
"command": "notice",
"style": "error",
"text": "You are banned from FAF forever. <br>Reason: <br>Test permanent ban"
}
Server sends invalid command response
Available only on servers:
Accepts the following message:
Sent when the server encounters an unhandled exception processing a command
Invalid command
{
"command": "invalid"
}
Server notifies that a command is currently disabled
Available only on servers:
Accepts the following message:
Sent when a client sends a command that is currently disabled on the server
Command disabled
{
"command": "disabled",
"request": "game_host"
}
Server sends periodic ping to keep connection alive
Available only on servers:
Accepts the following message:
Ping
{
"command": "ping"
}
Server responds to client ping
Available only on servers:
Accepts the following message:
Pong
{
"command": "pong"
}
Server asks client if ready for a tournament or galactic war game
Available only on servers:
Accepts the following message:
Server asks the client if it is ready for a tournament or galactic war game. Client should respond with is_ready_response. NOTE: Not currently sent by the server (reserved for future use).
Readiness check
{
"command": "is_ready",
"game_name": "Tournament Match",
"featured_mod": "faf",
"response_time_seconds": 30,
"request_id": "abc123"
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports a state change (Idle, Lobby, Launching, Ended)
Available only on servers:
Accepts the following message:
Sent by the game when the state of LobbyComm changes
Game enters lobby state
{
"command": "GameState",
"target": "game",
"args": [
"Lobby"
]
}
Game launched
{
"command": "GameState",
"target": "game",
"args": [
"Launching"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game host sets a game option
Available only on servers:
Accepts the following message:
Sent by the host to set a game option
Set game speed
{
"command": "GameOption",
"target": "game",
"args": [
"GameSpeed",
"normal"
]
}
Set victory condition
{
"command": "GameOption",
"target": "game",
"args": [
"Victory",
"demoralization"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game host reports active game mods
Available only on servers:
Accepts the following message:
Sent by the host to report active mods
Report activated mods
{
"command": "GameMods",
"target": "game",
"args": [
"activated",
0
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game host sets a player option
Available only on servers:
Accepts the following message:
Sent by the host to set a player option (e.g. Team, Faction, StartSpot)
Set player team
{
"command": "PlayerOption",
"target": "game",
"args": [
1,
"Team",
2
]
}
Set player faction
{
"command": "PlayerOption",
"target": "game",
"args": [
1,
"Faction",
1
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game host sets an AI option
Available only on servers:
Accepts the following message:
Sent by the host to set an AI player option
Set AI team
{
"command": "AIOption",
"target": "game",
"args": [
"AIx_Easy",
"Team",
3
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game host clears a game slot
Available only on servers:
Accepts the following message:
Sent by the host to clear a game slot
Clear slot 3
{
"command": "ClearSlot",
"target": "game",
"args": [
3
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports a result for an army
Available only on servers:
Accepts the following message:
Reports the result for an army. The result string format is: "[metadata...] result_type score" (space-separated). Result types include: victory, defeat, draw, mutual_draw, etc.
Army victory
{
"command": "GameResult",
"target": "game",
"args": [
1,
"victory 10"
]
}
Army defeat
{
"command": "GameResult",
"target": "game",
"args": [
2,
"defeat -10"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports co-op mission completion
Available only on servers:
Accepts the following message:
Sent when a co-op mission is completed
Mission complete
{
"command": "OperationComplete",
"target": "game",
"args": [
1,
0,
3600.5
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports army statistics in JSON format
Available only on servers:
Accepts the following message:
Game stats
{
"command": "JsonStats",
"target": "game",
"args": [
"{\"stats\": []}"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports that rating should be enforced
Available only on servers:
Accepts the following message:
Signals that the game's rating should be enforced
Enforce rating
{
"command": "EnforceRating",
"target": "game",
"args": []
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Player manually reports a teamkill
Available only on servers:
Accepts the following message:
Sent when a player clicks the "Report" button after being teamkilled
Teamkill report
{
"command": "TeamkillReport",
"target": "game",
"args": [
120,
1,
"player1",
2,
"player2"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game automatically reports a teamkill event
Available only on servers:
Accepts the following message:
Sent automatically by the game when a teamkill occurs
Teamkill happened
{
"command": "TeamkillHappened",
"target": "game",
"args": [
120,
1,
"victim",
2,
"teamkiller"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game sends an ICE negotiation message to forward to a peer
Available only on servers:
Accepts the following message:
ICE negotiation message to be forwarded to a peer via the server
Send ICE message to peer
{
"command": "IceMsg",
"target": "game",
"args": [
2,
"{\"candidatesGathered\": true}"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports a desynchronization event
Available only on servers:
Accepts the following message:
Sent when a desynchronization is detected in the game
Desync detected
{
"command": "Desync",
"target": "game",
"args": []
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports launch status (e.g. Rejected for mismatched settings)
Available only on servers:
Accepts the following message:
Reports launch status. "Rejected" indicates a matchmaker game failed due to differing settings.
Launch rejected
{
"command": "LaunchStatus",
"target": "game",
"args": [
"Rejected"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports a data bottleneck (player falling behind)
Available only on servers:
Accepts the following message:
Sent when a player is getting behind on data, slowing down the game
Bottleneck detected
{
"command": "Bottleneck",
"target": "game",
"args": [
1
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports that a bottleneck has been resolved
Available only on servers:
Accepts the following message:
Sent when the game is no longer being slowed down by a data bottleneck
Bottleneck cleared
{
"command": "BottleneckCleared",
"target": "game",
"args": []
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports a player disconnection
Available only on servers:
Accepts the following message:
Sent when a player disconnects from the game
Player disconnected
{
"command": "Disconnected",
"target": "game",
"args": []
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports a chat message from the game lobby
Available only on servers:
Accepts the following message:
Sent when a player sends a chat message in the game lobby
Chat message
{
"command": "Chat",
"target": "game",
"args": [
"Hello everyone!"
]
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports that all game slots are full
Available only on servers:
Accepts the following message:
Game is full
{
"command": "GameFull",
"target": "game",
"args": []
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports that the simulation has ended
Available only on servers:
Accepts the following message:
Signals that the game simulation has ended
Game ended
{
"command": "GameEnded",
"target": "game",
"args": []
}
These messages are wrapped inside the lobby WebSocket connection with "target": "game".
The game command is in the command field and arguments in the args array.
Game reports that the user has rehosted the game
Available only on servers:
Accepts the following message:
Signals that the user has rehosted the game
Game rehosted
{
"command": "Rehost",
"target": "game",
"args": []
}
These messages are sent to the game client with "target": "game".
The game command is in the command field and arguments in the args array.
Server tells game to start hosting and listening for connections
Available only on servers:
Accepts the following message:
Tells the game to start listening for incoming connections as a host
Host game on map
{
"command": "HostGame",
"target": "game",
"args": [
"scmp_007"
]
}
These messages are sent to the game client with "target": "game".
The game command is in the command field and arguments in the args array.
Server tells game to join the host
Available only on servers:
Accepts the following message:
Join game hosted by test
{
"command": "JoinGame",
"target": "game",
"args": [
"test",
1
]
}
These messages are sent to the game client with "target": "game".
The game command is in the command field and arguments in the args array.
Server tells game to connect to a peer for syncing
Available only on servers:
Accepts the following message:
Tells the game to establish a connection with another player for syncing
Connect to peer (offer)
{
"command": "ConnectToPeer",
"target": "game",
"args": [
"Rhiza",
3,
true
]
}
These messages are sent to the game client with "target": "game".
The game command is in the command field and arguments in the args array.
Server tells game to disconnect from a peer
Available only on servers:
Accepts the following message:
Tells the game to disconnect from a specific peer
Disconnect from peer
{
"command": "DisconnectFromPeer",
"target": "game",
"args": [
3
]
}
These messages are sent to the game client with "target": "game".
The game command is in the command field and arguments in the args array.
Server forwards an ICE negotiation message from another peer
Available only on servers:
Accepts the following message:
Forwards an ICE negotiation message from another peer
ICE message from peer
{
"command": "IceMsg",
"target": "game",
"args": [
2,
"{\"candidatesGathered\": true}"
]
}
Reconnect to an existing game that is still in lobby or live state
Exactly one of friend or foe must be provided.
Exactly one of friend or foe must be provided.
Requires appropriate server permissions (ADMIN_KICK_SERVER, ADMIN_BROADCAST_MESSAGE, ADMIN_JOIN_CHANNEL)
Server responds with one coop_info message per mission
DEPRECATED: Use the FAF API instead
DEPRECATED: ICE servers are handled outside of the lobby server. Response will always be an empty list.
Sent immediately after successful authentication. Contains the player's own info.
Sent after login with all online players, and periodically broadcast when player data changes (ratings, avatar, state, etc.)
Sent after login with all visible open games, and periodically broadcast when game data changes (players join/leave, state changes, etc.)
Sent after login with friend/foe lists and auto-join channels
Tells the client to launch the game executable. Sent when hosting, joining, or starting a matchmaker game.
Sent in response to matchmaker_info request and periodically broadcast
Sent when players have violations that prevent them from searching
Sent when a player fails to connect to a matchmaker game
Sent to all players in a match when the matchmaker finds a game
Sent when a matchmaker game fails to start (e.g. player didn't connect in time)
Broadcast to all party members when party state changes
Sent when veto state changes or is requested
One message per co-op mission, sent in response to coop_list request
Sent in response to avatar list_avatar request
DEPRECATED: Use the FAF API instead
DEPRECATED: IRC passwords are handled outside of the lobby server. The password field is meaningless.
DEPRECATED: ICE servers are handled outside of the lobby server. The list is always empty.
Generic notification message. The style field indicates severity:
Sent when the server encounters an unhandled exception processing a command
Sent when a client sends a command that is currently disabled on the server
Server asks the client if it is ready for a tournament or galactic war game. Client should respond with is_ready_response. NOTE: Not currently sent by the server (reserved for future use).
Sent by the game when the state of LobbyComm changes
Sent by the host to set a game option
Sent by the host to report active mods
Sent by the host to set a player option (e.g. Team, Faction, StartSpot)
Sent by the host to set an AI player option
Sent by the host to clear a game slot
Reports the result for an army. The result string format is: "[metadata...] result_type score" (space-separated). Result types include: victory, defeat, draw, mutual_draw, etc.
Sent when a co-op mission is completed
Game army statistics in JSON format
Signals that the game's rating should be enforced
Sent when a player clicks the "Report" button after being teamkilled
Sent automatically by the game when a teamkill occurs
ICE negotiation message to be forwarded to a peer via the server
Sent when a desynchronization is detected in the game
Reports launch status. "Rejected" indicates a matchmaker game failed due to differing settings.
Sent when a player is getting behind on data, slowing down the game
Sent when the game is no longer being slowed down by a data bottleneck
Sent when a player disconnects from the game
Sent when a player sends a chat message in the game lobby
Sent when all game slots are occupied
Signals that the game simulation has ended
Signals that the user has rehosted the game
Tells the game to start listening for incoming connections as a host
Tells the game to establish a connection with another player for syncing
Tells the game to disconnect from a specific peer
Forwards an ICE negotiation message from another peer
Player information object
Game information object
Matchmaker queue information