Build docker image
docker build -t cardsity-game-server .
Run docker image
docker run -it -p 9012:9012 --rm --name cardsity-game-server cardsity-game-server
To compile this yourself you will need to link websocketpp and cpr. It's recommended to install these through vcpkg.
Note: To get everything running you have to change the card-deck server endpoint in the "addDeck" function found in the Lobby.cpp unless you are running the deck-server on the same network
Content
This is a websocket server that runs on port 9012.
Packets are always sent in json format.
For every packet you send you are expected to specify a requestId - which should always be unique.
The vue-client uses the library websocket-as-promised which implements requestId's by default.
All packets you receive will have the requestId you specified in them.
The first packet you are expected to send is a LoginRequest.
Then you can send a LobbyListRequest.
Then a CreateGameRequest or a JoinGameRequest.
List of packets that can be sent while in a lobby:
- Regardless of Lobby-State
- KickRequest * Only works as host
- LeaveLobbyRequest
- SendChatMessageRequest
- While in lobby state
- StartGameRequest * Only works as host
- While in game
- CardPlayRequest * Only works as player
- JokerCardRequest
- CzarPickRequest * Only works as czar
int: id
int: lobbyId
string: name
string: color
string: text
int: ownerId
string: text
int: blanks
Connection: owner
int: points
string: name
arrayOf(Player): players
arrayOf(DeckInfo): decks
BlackCard: blackCard
int: currentRound
string: name
Player: czar
int: id
float: pickLimit
int: maxPlayers
int: maxRounds
int: maxPoints
int: id
bool: password
int: maxPlayers
string: name
int: playerCount
string: hostName
Packet | Content | Allowed in Lobby | Allowed In-Game | Allowed as Player | Allowed as Czar | Only as Host |
---|---|---|---|---|---|---|
LoginRequest | string: name (^[a-zA-Z_-0-9äüö ]{3,16}$) string: color [in Hex] (^#[A-F0-9]{6}$) |
❌ | ❌ | ❌ | ❌ | ❌ |
CreateGameRequest | string: name (^[a-zA-Z_-0-9äüö ]{3,16}$) string: password [empty string if none] (^[a-zA-Z_-0-9äüö]{0,16}$) float: pickLimit (min: 0.5, max: 5) int: maxPlayers (min: 3, max: 15) int: maxRounds (min: 5, max 20) int: maxPoints (min: 5, max: 25) arrayOf(string): decks (contains the deckIds as string) |
❌ | ❌ | ❌ | ❌ | ❌ |
JoinGameRequest | int: lobbyId string: password [empty string if none] (^[a-zA-Z_-0-9äüö]{0,16}$) |
❌ | ❌ | ❌ | ❌ | ❌ |
LobbyListRequest | int: pageNumber int: pageSize |
❌ | ❌ | ❌ | ❌ | ❌ |
KickRequest | int: playerId string: message (^.{1,64}$) |
✔️ | ✔️ | ❌ | ❌ | ✔️ |
CardPlayRequest | arrayOf(string): cards (Text of the cards you want to play - you have to own them though) | ❌ | ✔️ | ✔️ | ❌ | ❌ |
JokerCardRequest | string: text (^.{1,64}$) | ❌ | ✔️ | ✔️ | ✔️ | ❌ |
CzarPickRequest | int: winnerId - Id of the selected card owner | ❌ | ✔️ | ❌ | ✔️ | ❌ |
SendChatMessageRequest | string: message (^.{1,64}$) | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
LogoutRequest | bool: confirmLogout | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
LeaveLobbyRequest | bool: confirmLeave | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
StartGameRequest | bool: startGame | ✔️ | ❌ | ❌ | ❌ | ✔️ |
Packet | Content | Sent In Lobby | Sent In-Game | Contains requestId | Answer to |
---|---|---|---|---|---|
Status | string: message bool: success |
✔️ | ✔️ | ✔️ | On Error: Everything On Success: KickRequest, CardPlayRequest, JokerCardRequest, CzarPickRequest, SendChatMessageRequest, LeaveLobbyRequest, StartGameRequest |
Welcome | Connection: you | ❌ | ❌ | ✔️ | Login Request |
UnrevealedCard | int: unrevealedCardOwnerId | ❌ | ✔️ | ❌ | None |
RevealCards | arrayOf(WhiteCard): cards | ❌ | ✔️ | ❌ | None |
CzarPickNotify | int: winnerId | ❌ | ✔️ | ❌ | None |
SentChatMessage | Connection: sender string: message |
✔️ | ✔️ | ❌ | None |
HandUpdate | arrayOf(WhiteCard): newHand | ❌ | ✔️ | ❌ | None |
GameEnd | Player: winner arrayOf(tuple(Connection, BlackCard, arrayOf(WhiteCard))) cardHistory |
❌ | ✔️ | ❌ | None |
KickNotify | string: kickReason | ✔️ | ✔️ | ❌ | None |
LobbyListResponse | arrayOf(LobbyInfo): lobbies int: totalRows |
❌ | ❌ | ✔️ | LobbyListRequest |