asyncapi: 3.0.0 info: title: Game Server version: 0.0.1 description: | This is the Websocket Specification for the Tower Defence Game.
Because of the limitations of Async API, we expect that the actual json, which is send as payload to always contain a field called `$id` with the corresponding `messageId`.
The `messageId` should be handled case sensitive. defaultContentType: application/json servers: localhost: host: localhost:8080 protocol: ws pathname: /ws security: - $ref: "#/components/securitySchemes/JwtAuth" channels: connection: title: Connection description: | The Base Channel used for: - Authentication - Receiving Tokens for other channels - Reconnection messages: RequestConnectionToken: description: | A Message telling the Server, that you want an Connection Token for a Specific Channel payload: type: object additionalProperties: false properties: $id: type: string format: messageId channel: $ref: "#/components/schemas/Channel" required: - $id - channel ProvidedConnectionToken: description: | A Message telling the Server, that you want an Connection Token for a Specific Channel payload: type: object additionalProperties: false properties: $id: type: string format: messageId channel: $ref: "#/components/schemas/Channel" token: $ref: "#/components/schemas/JWT" required: - $id - channel - token matchmaking: title: Matchmaking description: | A Channel used to search for a match and to receive one messages: MatchSetSearchState: payload: type: object additionalProperties: false properties: $id: type: string format: messageId searching: type: boolean required: - $id - searching MatchFound: payload: type: object additionalProperties: false properties: $id: type: string format: messageId matchId: type: string created: description: "Unix Timestamp describing when this Match was found" type: integer format: int64 ttl: description: "Time in Milliseconds, how long this Match is open for accepting" type: integer format: int64 required: - $id - matchId - created - ttl MatchAccepted: payload: type: object additionalProperties: false properties: $id: type: string format: messageId matchId: type: string accepted: type: boolean required: - $id - matchId - accepted MatchAborted: payload: type: object additionalProperties: false properties: $id: type: string format: messageId matchId: type: string required: - $id - matchId MatchEstablished: payload: type: object additionalProperties: false properties: $id: type: string format: messageId matchId: type: string opponentName: type: string token: $ref: "#/components/schemas/JWT" required: - $id - matchId - opponentName - token match: title: Match description: | Channel for managing an active match messages: RequestTowerPlacing: description: Requesting a placement of a tower payload: type: object additionalProperties: false properties: $id: type: string format: messageId x: type: integer y: type: integer required: - $id - x - y TowerPlaced: description: A tower was placed payload: type: object additionalProperties: false properties: $id: type: string format: messageId x: type: integer y: type: integer map: type: string enum: - player - opponent required: - $id - x - y - map InvalidPlacement: description: A tower was placed payload: type: object additionalProperties: false properties: $id: type: string format: messageId x: type: integer y: type: integer reason: type: string enum: - "match-not-started" - "out-of-bounds" - "location-used" - "not-enough-money" required: - $id - x - y - reason PlayerMoney: description: Money a player currently has payload: type: object additionalProperties: false properties: $id: type: string format: messageId playerMoney: type: integer required: - $id - playerMoney operations: requestConnectionToken: title: RequestConnectionToken action: send channel: $ref: "#/channels/connection" messages: - $ref: "#/channels/connection/messages/RequestConnectionToken" reply: channel: $ref: "#/channels/connection" messages: - $ref: "#/channels/connection/messages/ProvidedConnectionToken" searchMatch: title: SearchMatch action: send channel: $ref: "#/channels/matchmaking" messages: - $ref: "#/channels/matchmaking/messages/MatchSetSearchState" setPlayerMatchSearching: title: SetPlayerMatchSearching action: receive channel: $ref: "#/channels/matchmaking" messages: - $ref: "#/channels/matchmaking/messages/MatchSetSearchState" foundMatch: title: FoundGame action: receive channel: $ref: "#/channels/matchmaking" messages: - $ref: "#/channels/matchmaking/messages/MatchFound" reply: channel: $ref: "#/channels/matchmaking" messages: - $ref: "#/channels/matchmaking/messages/MatchAccepted" abortedMatch: title: AbortedMatch action: receive channel: $ref: "#/channels/matchmaking" messages: - $ref: "#/channels/matchmaking/messages/MatchAborted" establishedMatch: title: EstablishedMatch action: receive channel: $ref: "#/channels/matchmaking" messages: - $ref: "#/channels/matchmaking/messages/MatchEstablished" towerPlacing: title: TowerPlacing action: send channel: $ref: "#/channels/match" messages: - $ref: "#/channels/match/messages/RequestTowerPlacing" reply: channel: $ref: "#/channels/match" messages: - $ref: "#/channels/match/messages/TowerPlaced" - $ref: "#/channels/match/messages/InvalidPlacement" enemyPlacedTower: title: EnemyPlacedTower action: receive channel: $ref: "#/channels/match" messages: - $ref: "#/channels/match/messages/TowerPlaced" playerMoney: title: PlayerMoney action: receive channel: $ref: "#/channels/match" messages: - $ref: "#/channels/match/messages/PlayerMoney" components: securitySchemes: JwtAuth: name: Authorization description: | A JWT Token has to be provided in the Handshake Header.
This Field is expected to be called `Authorization`.
It is expected to not have a prefix like `bearer`. type: httpApiKey in: header schemas: JWT: type: string format: jwt Channel: type: string enum: - matchmaking