Gravwell-Online/docs/events.md
2022-03-08 13:23:59 -06:00

145 lines
3.8 KiB
Markdown

# Events
Every event in this document has two forms, a request and a response, the event
type can be differentiated by the event prefix, `req` is an event going to the
server, and `res` is a response coming from the server to the client. Some events
may only have one of these types, if this is the case, it will be denoted in the
relevant section.
**Important**: Events with the `Broadcasted` event type, must be listened to
even if you don't send any `Request` events of that type. This is because other
clients connected to the server may trigger the server in such a way that the
event response gets sent to multiple clients. **Broadcasted events will use the**
`res` **event type prefix.**
Most request payload types inherit from `ServerRequest`, and all response
payloads inherit from the `ServerResponse` type.
---
## `error`
The event that is sent to clients when they cause a significant error to happen
in the server. When this is sent, the status property will never be set to a
value in the success range.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| No | Yes | No
### Payloads
Request Payload: N/A
Response Payload: `ServerResponse`
---
## `server.info`
Retrieves information about the server that the client is currently connected
to.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | No
### Payloads
Request Payload: N/A
Response Payload: `IServerInfo`
---
## `lobby.info`
Retrieves information about the lobby. In order for this event to return without
error, the client requesting the information **must** be in the lobby already.
This event is broadcasted to clients who are already in the lobby when the
player list or a player's design gets updated.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | Yes
### Payloads
Request Payload: `IGetLobbyInfo`
Response Payload: `ILobbyInfo`
---
## `lobby.create`
Creates a game lobby that allows for online play.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | No
### Payloads
Request Payload: `ICreateLobby`
Response Payload: `ILobbyInfo`
---
## `lobby.delete`
Deletes the game lobby, clearing all players from the lobby and preventing
others from joining the lobby. This endpoint errors whenever a client that isn't
the host tries to call the endpoint.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | Yes
### Payloads
Request Payload: `IDeleteLobby`
Response Payload: `ServerResponse`
---
## `lobby.players.join`
Allows a player to join a lobby based on the lobby identifier.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | No, causes `lobby.info` broadcast
### Payloads
Request Payload: `IJoinLobby`
Response Payload: `ILobbyInfo`
---
## `lobby.players.leave`
This allows non-host players to leave the lobby without destroying it entirely.
This endpoint errors when the client that created the lobby attempts to use the
endpoint.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | No, causes `lobby.info` broadcast
### Payloads
Request Payload: `ILeaveLobby`
Response Payload: `ServerResponse`
---
## `lobby.players.update`
Allows the player to update their own information, this is primarily used for
updating the ship design.
### Supported Event Types
| Request | Response | Broadcasted
| ------- | -------- | -----------
| Yes | Yes | No, causes `lobby.info` broadcast
### Payloads
Request Payload: `IUpdatePlayer`
Response Payload: `ServerResponse`