Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- * [Client -> Meta-Server](#client---meta-server)
- * [Core](#core)
- * [x] [Init](#init)
- * [Account](#account)
- * [x] [Login](#login)
- * [x] [Registrierung](#registrierung)
- * [x] [Passwort Reset](#passwort-reset)
- * [User](#user)
- * [x] [Kontoinformationen](#kontoinformationen)
- * [x] [Kontostand Zurücksetzen](#kontostand-zur%C3%BCcksetzen)
- * [ ] [E-Mail ändern](#e-mail-adresse-%C3%A4ndern)
- * [Meta](#meta)
- * [x] [Matches abrufen](#matches-abrufen)
- * [x] [Spiel erstellen](#spiel-erstellen)
- * [Chat](#chat)
- * [X] [Globaler Chat](#globaler-chat)
- * [Meta-Server -> Client](#meta-server---client)
- * [Chat](#chat-1)
- * [X] [Globaler Chat](#globaler-chat-1)
- * [Client -> Game-Server](#client---game-server)
- * [Meta](#meta-1)
- * [x] [Spiel beitreten](#spiel-beitreten)
- * [Game](#game)
- * [x] [Spieleraktionen](#spieleraktionen)
- * [Chat](#chat-2)
- * [x] [Tisch Chat](#tisch-chat)
- * [Game-Server -> Client](#game-server---client)
- * [Meta](#meta-2)
- * [x] [Spiel beitreten](#spiel-beitreten-1)
- * [x] [Spiel verlassen](#spiel-verlassen)
- * [Game](#game-1)
- * [x] [Spieleraktionen](#spieleraktionen-1)
- * [Chat](#chat-3)
- * [x] [Tisch Chat](#tisch-chat-1)
- ## Client -> Meta-Server
- ### Core
- Core-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 10.000 <= x < 20.000 zurück.
- #### Init
- Wird als erstes gesendet zwecks Versionsüberprüfung.
- ```json
- {
- "module": "core",
- "action": "init",
- "content": {
- "clientVersion": "0.1.0",
- "clientName": "Pokerspiel"
- }
- }
- ```
- ##### Rückgabe
- ```json
- {
- "module": "core",
- "action": "init",
- "success": true,
- "code": 100
- }
- ```
- oder bei falscher Version:
- ```json
- {
- "module": "core",
- "action": "init",
- "status": false,
- "code": 200,
- "description": "Outdated version"
- }
- ```
- ### Account
- Account-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 10.000 <= x < 20.000 zurück.
- #### Login
- ```json
- {
- "module": "account",
- "action": "login",
- "content": {
- "username": "Peter",
- "password": "12345678"
- }
- }
- ```
- ##### Rückgabe
- ```json
- {
- "module": "account",
- "action": "login",
- "success": true,
- "code": 100,
- "content": {
- "key": "kjdhfg791bfi1n819hfBFKAF",
- "playerID": 123
- }
- }
- ```
- oder bei falschem Benutzername:
- ```json
- {
- "module": "account",
- "action": "login",
- "success": false,
- "code": 10100
- }
- ```
- oder bei falschem Passwort:
- ```json
- {
- "module": "account",
- "action": "login",
- "success": false,
- "code": 10110
- }
- ```
- oder wenn der Benutzer bereits online ist:
- ```json
- {
- "module": "account",
- "action": "login",
- "success": false,
- "code": 10115
- }
- ```
- oder falls der Benutzer seine E-Mail noch nicht bestätigt hat:
- ```json
- {
- "module": "account",
- "action": "login",
- "success": false,
- "code": 10120
- }
- ```
- #### Registrierung
- ```json
- {
- "module": "account",
- "action": "register",
- "content": {
- "email": "test@test.de",
- "username": "test",
- "password": "123456"
- }
- }
- ```
- ##### Rückgabe
- ```json
- {
- "module": "account",
- "action": "register",
- "success": true,
- "code": 100
- }
- ```
- oder bei fehlerhaften Daten:
- ```json
- {
- "module": "account",
- "action": "register",
- "success": "false",
- "code": 10200,
- "description": "Invalid email format"
- }
- ```
- ```json
- {
- "module": "account",
- "action": "register",
- "success": "false",
- "code": 10205,
- "description": "Email already exists"
- }
- ```
- ```json
- {
- "module": "account",
- "action": "register",
- "success": "false",
- "code": 10210,
- "description": "Invalid username format"
- }
- ```
- ```json
- {
- "module": "account",
- "action": "register",
- "success": "false",
- "code": 10215,
- "description": "Username already exists"
- }
- ```
- ```json
- {
- "module": "account",
- "action": "register",
- "success": "false",
- "code": 10220,
- "description": "Invalid password format"
- }
- ```
- #### Passwort Reset
- ```json
- {
- "module": "account",
- "action": "password_reset",
- "content": {
- "email": "test@test.de"
- }
- }
- ```
- ##### Rückgabe
- Die Methode meldet immer einen erfolg, egal ob die E-Mail Adresse existiert oder nicht.
- ```json
- {
- "module": "account",
- "action": "password_reset",
- "success": true,
- "code": 100
- }
- ```
- ### User
- User-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 50.000 <= x < 60.000 zurück.
- #### Kontoinformationen
- ```json
- {
- "module": "user",
- "action": "information"
- }
- ```
- ##### Rückgabe
- ```json
- {
- "module": "user",
- "action": "information",
- "success": true,
- "code": 100,
- "content": {
- "balance": 1321,
- "email": "jens@example.com"
- }
- }
- ```
- #### Kontostand zurücksetzen
- ```json
- {
- "module": "user",
- "action": "refill"
- }
- ```
- ##### Rückgabe
- ```json
- {
- "module": "user",
- "action": "refill",
- "success": true,
- "code": 100,
- "content": {
- "balance": 75000
- }
- }
- ```
- #### E-Mail Adresse ändern
- Nach dem ändern der E-Mail Adresse erhält der Benutzer eine Bestätigungsmail. Erst wenn er auf einen Link in der E-Mail geklickt hat, darf er weiterhin an Spielen teilnehmen.
- ```json
- {
- "module": "user",
- "action": "change_email",
- "content": {
- "email": "new@example.com"
- }
- }
- ```
- ##### Rückgabe
- ```json
- {
- "module": "user",
- "action": "change_email",
- "success": true,
- "code": 100
- }
- ```
- ### Meta
- Meta-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 20.000 <= x < 30.000 zurück.
- #### Matches abrufen
- ```json
- {
- "module": "meta",
- "action": "get_matches",
- "content": {
- "gameType": 1
- }
- }
- ```
- In `gameType` kann das Spiel gewählt werden - im Verlaufe des Projektes wird dies immer 1 (TexasHoldEm) sein.
- ##### Rückgabe
- ```json
- {
- "module": "meta",
- "action": "get_matches",
- "success": true,
- "code": 100,
- "content": {
- "gameType": 1,
- "matches": [
- {
- "matchID": 9,
- "matchName": "Pokertisch deluxe",
- "maxPlayers": 8,
- "currentPlayers": 7,
- "creationDate": "2015.01.01 22:12:37",
- "lastModified": "2015.01.01 22:12:37",
- "gameMode": 1,
- "buyin": 800,
- "smallBlind": 2,
- "bigBlind": 4,
- "passwordProtected": false,
- "serverID": 1,
- "playerID": 3
- },
- {
- "matchID": 48,
- "matchName": "Hinterstube",
- "maxPlayers": 3,
- "currentPlayers": 3,
- "creationDate": "2015.01.01 19:47:12",
- "lastModified": "2015.01.01 19:50:12",
- "gameMode": 1,
- "buyin": 4000,
- "smallBlind": 2,
- "bigBlind": 4,
- "passwordProtected": true,
- "serverID": 2,
- "playerID": 2
- }
- ],
- "servers": [
- {
- "serverID": 1,
- "serverName": "Europa #1",
- "ip": "31.221.90.13",
- "port": 4321
- }
- ]
- }
- }
- ```
- #### Spiel erstellen
- ```json
- {
- "module": "meta",
- "action": "match_create",
- "content": {
- "matchID": 2,
- "matchName": "Pokertisch deluxe",
- "maxPlayers": 8,
- "currentPlayers": 0,
- "gameMode": 2,
- "gameType": 1,
- "gameType": 1,
- "buyin": 800,
- "smallBlind": 2,
- "bigBlind": 4,
- "password": "",
- "serverID": 1,
- "playerID": 1
- },
- }
- ```
- `gameType` ermöglicht die Auswahl des Spiels - im Verlaufe des Projektes wird dies immer 1 (TexasHoldem) sein.
- (optional)`password` - bei Fehlen kann jeder Spieler beitreten.
- (optional)`maxPlayers` wird bei Fehlen auf einen sinnvollen Wert gesetzt.
- Je nach `gameType` sind noch weitere Felder erforderlich - für TexasHoldem sind dies Folgende:
- `buyin` muss bezahlt werden, um diesem Tisch beizutreten
- `gameMode` 1: offener Tisch, 2: Turniertisch
- ##### Rückgabe
- ```json
- {
- "module": "meta",
- "action": "match_create",
- "success": true,
- "code": 100,
- "content": {
- "matchID": 9,
- "matchName": "Pokertisch deluxe",
- "maxPlayers": 8,
- "currentPlayers": 0,
- "creationDate": "2015.01.01 22:12:37",
- "lastModified": "2015.01.01 22:12:37",
- "gameMode": 1,
- "buyin": 800,
- "smallBlind": 2,
- "bigBlind": 4,
- "passwordProtected": true,
- "serverID": 1,
- "playerID": 9
- }
- }
- ```
- ### Chat
- Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 90.000 <= x < 100.000 zurück.
- #### Globaler Chat
- ```json
- {
- "module": "chat",
- "action": "broadcast",
- "content": {
- "msg": "Schnittstellendefinitionen sind super!"
- }
- }
- ```
- ## Meta-Server -> Client
- ### Chat
- Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 100.000 <= x < 110.000 zurück.
- #### Globaler Chat
- ```json
- {
- "module": "chat",
- "action": "broadcast",
- "content": {
- "playerID": 5,
- "playerName": "peter",
- "msg": "Schnittstellendefinitionen sind super!"
- }
- }
- ```
- ## Client -> Game-Server
- ### Account
- Zuallererst muss sich der Client authentifizieren. Dies macht er mit seinem `authKey`, den er vom Metaserver beim Login erhalten hat, und diesen an `auth` schickt.
- #### Authentifizierung
- ```json
- {
- "module": "account",
- "action": "auth",
- "content": {
- "key": "abc123",
- }
- }
- ```
- Rückgabe bei einem falschen Key
- ```json
- {
- "module": "account",
- "action": "auth",
- "success": false,
- "code": 80000
- }
- ```
- ### Meta
- Meta-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 80.000 <= x < 90.000 zurück.
- #### Spiel beitreten
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "content": {
- "matchID": 5,
- "password": "",
- "stash": 2000
- }
- }
- ```
- Das Passwort ist optional.
- ##### Rückgabe
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": true,
- "content": {
- "players": [
- {
- "playerID": 3,
- "playerName": "Peter",
- "stash": 400,
- "slot": 0
- },
- {
- "playerID": 3,
- "playerName": "Peter",
- "stash": 500,
- "slot": 1
- },
- {
- "playerID": 3,
- "playerName": "Peter",
- "stash": 972,
- "slot": 2
- }
- ],
- "board": [
- {
- "color": "spade",
- "value": "5"
- },
- {
- "color": "spade",
- "value": "1"
- },
- {
- "color": "heart",
- "value": "Jack"
- }
- ],
- "pots": [
- {
- "players": [
- 4,
- 9,
- 11
- ],
- "amount": 340
- }
- ],
- "running": true,
- "dealerID": 4,
- "bigBlindID": 9,
- "smallBlindID": 2,
- "matchID": 95,
- "stash": 25000,
- "smallBlind": 100,
- "bigBlind": 200,
- "maxPlayers": 8
- },
- "code": 100
- }
- ```
- oder bei nicht existentem Spiel:
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": false,
- "code": 80100
- }
- ```
- oder bei fehlerhaftem Passwort:
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": false,
- "code": 80110
- }
- ```
- oder falls der Spieler dem Spiel schon beigetreten ist:
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": false,
- "code": 80120
- }
- ```
- oder falls der Tisch schon voll ist:
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": false,
- "code": 80130
- }
- ```
- oder falls der Spieler mehr Geld mit an den Tisch nehmen muss:
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": false,
- "code": 80140
- }
- ```
- oder falls der Spieler nicht genügend Geld hat:
- ```json
- {
- "module": "meta",
- "action": "match_join",
- "success": false,
- "code": 80150
- }
- ```
- ### Game
- Game-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 30.000 <= x < 40.000 zurück.
- #### Spieleraktionen
- ##### Raise
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "raise",
- "matchID": 1,
- "amount": 200
- }
- }
- ```
- ##### Call
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "call",
- "matchID": 4
- }
- }
- ```
- ##### Check
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "check",
- "matchID": 4
- }
- }
- ```
- ##### AllIn
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "allin",
- "matchID": 4
- }
- }
- ```
- ##### Rückgabe (alle Spielaktionen)
- ```json
- {
- "module": "game",
- "action": "move",
- "success": true,
- "code": 100
- }
- ```
- oder wenn der Spieler nicht mehr genügend Geld für die Spielaktion besitzt:
- ```json
- {
- "module": "game",
- "action": "move",
- "success": false,
- "code": 30100,
- }
- ```
- ... zu wenig raise
- oder wenn der Timer abgelaufen ist bzw. der Spieler nicht (mehr) an der Reihe ist:
- ```json
- {
- "module": "game",
- "action": "move",
- "success": false,
- "code": 30110,
- }
- ```
- ### Chat
- Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 110.000 <= x < 120.000 zurück.
- #### Tisch Chat
- ```json
- {
- "module": "chat",
- "action": "broadcast",
- "content": {
- "matchID": 4,
- "playerID": 2,
- "msg": "Schnittstellendefinitionen sind super!"
- }
- }
- ```
- `playerId` ist optional. Zu einem späteren Zeitpunkt wird dieser Wert eventuell beim whispern (also direkten, privaten, Gesprächen zwischen zwei Personen) genutzt.
- ##### Rückgabe
- ```json
- {
- "module": "chat",
- "action": "broadcast",
- "success": true
- }
- ```
- oder wenn der Spieler nicht am Tisch sitzt bzw. der Tisch nicht existiert:
- ```json
- {
- "module": "chat",
- "action": "broadcast",
- "success": false,
- "code": 110000
- }
- ```
- ## Game-Server -> Client
- Der Server erwartet von dem Client die Befehle auszuführen, wenn er diese erhalten hat. Daher ist keine Bestätigung erforderlich. Ob der Client die Nachricht erhalten hat, kann der Server selbstständig überprüfen.
- ### Meta
- Meta-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 140.000 <= x < 150.000 zurück.
- #### Spiel beitreten
- Falls ein **anderer** Spieler als man selbst den Tisch betreten hat, bekommt man dies mitgeteilt.
- ```json
- {
- "module": "meta",
- "action": "match_joined",
- "content": {
- "playerID": 5,
- "playerName": "uwe",
- "slot": 2,
- "stash": 4000
- }
- }
- ```
- #### Spiel verlassen
- Falls ein **anderer** Spieler als man selbst den Client geschlossen hat, aber weiterhin mitspielt (Nur checken).
- ```json
- {
- "module": "meta",
- "action": "player_disconnected",
- "content": {
- "playerID": 4
- }
- }
- ```
- Falls er aber, z.B. zwischen einer Runde oder falls der Spieler automatisch gefoldet wurde, endgültig den Tisch verlassen hat und auch nicht mehr im Client angezeigt werden brauch:
- ```json
- {
- "module": "meta",
- "action": "player_left",
- "content": {
- "playerID": 4
- }
- }
- ```
- ### Game
- Game-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 120.000 <= x < 130.000 zurück.
- #### Spieleraktionen
- ##### Spielbeginn
- Zum Spielbeginn bekommt jeder Spieler seine Karten mitgeteilt. Diese darf der Spieler schon einsehen, es steht aber noch nicht fest welcher Spieler beginnt. Dies geschieht mit einer separaten Nachricht die auch den Timer des Spielers startet.
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "init",
- "cards": [
- {
- "color": "spade",
- "value": "2"
- },
- {
- "color": "heart",
- "value": "9"
- }
- ],
- "dealerID": 4,
- "bigBlindID": 5,
- "smallBlindID": 6
- }
- }
- ```
- ##### Spieler am Zug
- Sobald ein Spieler am Zug ist, werden alle Spieler, inklusive des Spielers der an der Reihe ist, mit der gleichen Nachricht informiert. Der Spieler darf nie, zu keiner Zeit, annehmen das er an der Reihe ist und muss warten bis er von dem Server die Nachricht zum start bekommen hat. Erst wenn der Timer auf dem Server läuft werden seine Spielaktionen akzeptiert.
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "timer_start",
- "playerID": 73,
- "t": 15,
- "amountToCall": 500,
- "amountToRaise": 1000
- }
- }
- ```
- `seconds` sind die Anzahl der Sekunden die der Spieler Zeit hat. Diese wurden auf 15 festgelegt, es ist aber auch möglich das der Spieler mehr, oder weniger Zeit hat. Die Zeit *könnte* zum Beispiel heraufgesetzt werden wenn der Spieler über eine mobile Verbindung spielt.
- ##### Check / Call
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "call",
- "playerID": 73,
- "amount": 400
- }
- }
- ```
- ##### Raise
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "raise",
- "playerID": 73,
- "amount": 400,
- "raisedBy": 800
- }
- }
- ```
- ##### Flop / Turn / River
- Bei Aufdeckung einer oder mehrerer *Community Cards* wird der Spieler darüber informiert und darf die Karte sofort anzeigen.
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "flop",
- "cards": [
- {
- "color": "spade",
- "value": "3"
- },
- {
- "color": "heart",
- "value": "10"
- },
- {
- "color": "heart",
- "value": "jack"
- }
- ],
- "pots": [
- {
- "amount": 12000,
- "players": [
- 1,
- 7
- ]
- }
- ]
- }
- }
- ```
- `cards` besteht bei der `move` `flop` aus einem Array mit drei Karten, bei `turn` oder `river` aus einem Array mit einer Karte.
- ##### Gewinnverteilung
- Nachdem das Spiel beendet ist, bekommen die Spieler eine Nachricht mit der Gewinnverteilung und optional mit der Hand mit der sie Gewonnen haben. `hand` wird nur mitgeschickt wenn es zu einem Showdown gekommen ist, bei dem die Spieler die Karten der Mitspieler gesehen haben. In `players` kann es mehrere Spieler geben, z.B. bei einem *Split Pot*. `hand` kann für den Anfang 1 zu 1 dargestellt werden und sollte später durch eine ID der Hand ersetzt werden zwecks Lokalisierung.
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "pots",
- "players": [
- {
- "playerID": 7,
- "stash": 19800
- },
- {
- "playerID": 1,
- "stash": 20200
- }
- ],
- "pots": [
- {
- "amount": 12000,
- "hand": "One Pair",
- "cards": [
- {
- "color": "heart",
- "value": "6"
- },
- {
- "color": "spade",
- "value": "6"
- },
- {
- "color": "diamond",
- "value": "K"
- },
- {
- "color": "heart",
- "value": "J"
- },
- {
- "color": "heart",
- "value": "7"
- }
- ],
- "players": [
- 1,
- 7
- ]
- }
- ]
- }
- }
- ```
- ##### Karten aufdecken
- Bei einem *Showdown*, egal ob z.B. vor dem *Flop* oder am Ende der Runde, bekommen alle Spieler die Karten der verbliebenden Spieler mitgeteilt. Bei einem Showdown erhalten die Spieler keinen `timer_start` move mehr mitgeteilt und die Karten werden mit den Methoden `flop`, `turn`, `river` nach der Reihe aufgedeckt.
- ```json
- {
- "module": "game",
- "action": "move",
- "content": {
- "move": "showdown",
- "players": [
- {
- "playerID": 4,
- "cards": [
- {
- "color": "spade",
- "value": "3"
- },
- {
- "color": "heart",
- "value": "10"
- }
- ]
- },
- {
- "playerID": 9,
- "cards": [
- {
- "color": "spade",
- "value": "4"
- },
- {
- "color": "heart",
- "value": "9"
- }
- ]
- }
- ]
- }
- }
- ```
- ### Chat
- Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 130.000 <= x < 140.000 zurück.
- #### Tisch Chat
- ```json
- {
- "module": "chat",
- "action": "broadcast",
- "content": {
- "matchID": 4,
- "playerID": 2,
- "playerName": "uwe",
- "msg": "Schnittstellendefinitionen sind super!"
- }
- }
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement