daily pastebin goal
33%
SHARE
TWEET

Untitled

a guest Dec 12th, 2015 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. * [Client -> Meta-Server](#client---meta-server)
  2.   * [Core](#core)
  3.     * [x] [Init](#init)
  4.   * [Account](#account)
  5.     * [x] [Login](#login)
  6.     * [x] [Registrierung](#registrierung)
  7.     * [x] [Passwort Reset](#passwort-reset)
  8.   * [User](#user)
  9.     * [x] [Kontoinformationen](#kontoinformationen)
  10.     * [x] [Kontostand Zurücksetzen](#kontostand-zur%C3%BCcksetzen)
  11.     * [ ] [E-Mail ändern](#e-mail-adresse-%C3%A4ndern)
  12.   * [Meta](#meta)
  13.     * [x] [Matches abrufen](#matches-abrufen)
  14.     * [x] [Spiel erstellen](#spiel-erstellen)
  15.   * [Chat](#chat)
  16.     * [X] [Globaler Chat](#globaler-chat)
  17. * [Meta-Server -> Client](#meta-server---client)
  18.   * [Chat](#chat-1)
  19.     * [X] [Globaler Chat](#globaler-chat-1)
  20. * [Client -> Game-Server](#client---game-server)
  21.   * [Meta](#meta-1)
  22.     * [x] [Spiel beitreten](#spiel-beitreten)
  23.   * [Game](#game)
  24.     * [x] [Spieleraktionen](#spieleraktionen)
  25.   * [Chat](#chat-2)
  26.     * [x] [Tisch Chat](#tisch-chat)
  27. * [Game-Server -> Client](#game-server---client)
  28.   * [Meta](#meta-2)
  29.     * [x] [Spiel beitreten](#spiel-beitreten-1)
  30.     * [x] [Spiel verlassen](#spiel-verlassen)
  31.   * [Game](#game-1)
  32.     * [x] [Spieleraktionen](#spieleraktionen-1)
  33.   * [Chat](#chat-3)
  34.     * [x] [Tisch Chat](#tisch-chat-1)
  35.  
  36. ## Client -> Meta-Server
  37.  
  38. ### Core
  39.  
  40. Core-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 10.000 <= x < 20.000 zurück.
  41.  
  42. #### Init
  43. Wird als erstes gesendet zwecks Versionsüberprüfung.
  44.  
  45. ```json
  46. {
  47.         "module": "core",
  48.         "action": "init",
  49.         "content": {
  50.                 "clientVersion": "0.1.0",
  51.                 "clientName": "Pokerspiel"
  52.         }
  53. }
  54. ```
  55.  
  56. ##### Rückgabe
  57.  
  58. ```json
  59. {
  60.         "module": "core",
  61.         "action": "init",
  62.         "success": true,
  63.         "code": 100
  64. }
  65. ```
  66.  
  67. oder bei falscher Version:
  68.  
  69. ```json
  70. {
  71.         "module": "core",
  72.         "action": "init",
  73.         "status": false,
  74.         "code": 200,
  75.         "description": "Outdated version"
  76. }
  77. ```
  78.  
  79. ### Account
  80.  
  81. Account-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 10.000 <= x < 20.000 zurück.
  82.  
  83. #### Login
  84.  
  85. ```json
  86. {
  87.         "module": "account",
  88.         "action": "login",
  89.         "content": {
  90.                 "username": "Peter",
  91.                 "password": "12345678"
  92.         }
  93. }
  94. ```
  95.  
  96. ##### Rückgabe
  97.  
  98. ```json
  99. {
  100.         "module": "account",
  101.         "action": "login",
  102.         "success": true,
  103.         "code": 100,
  104.         "content": {
  105.                 "key": "kjdhfg791bfi1n819hfBFKAF",
  106.                 "playerID": 123
  107.         }
  108. }
  109. ```
  110.  
  111. oder bei falschem Benutzername:
  112.  
  113. ```json
  114. {
  115.         "module": "account",
  116.         "action": "login",
  117.         "success": false,
  118.         "code": 10100
  119. }
  120. ```
  121.  
  122. oder bei falschem Passwort:
  123.  
  124. ```json
  125. {
  126.         "module": "account",
  127.         "action": "login",
  128.         "success": false,
  129.         "code": 10110
  130. }
  131. ```
  132.  
  133. oder wenn der Benutzer bereits online ist:
  134.  
  135. ```json
  136. {
  137.         "module": "account",
  138.         "action": "login",
  139.         "success": false,
  140.         "code": 10115
  141. }
  142. ```
  143.  
  144. oder falls der Benutzer seine E-Mail noch nicht bestätigt hat:
  145.  
  146. ```json
  147. {
  148.         "module": "account",
  149.         "action": "login",
  150.         "success": false,
  151.         "code": 10120
  152. }
  153. ```
  154.  
  155. #### Registrierung
  156.  
  157. ```json
  158. {
  159.         "module": "account",
  160.         "action": "register",
  161.         "content": {
  162.                 "email": "test@test.de",
  163.                 "username": "test",
  164.                 "password": "123456"
  165.         }
  166. }
  167. ```
  168.  
  169. ##### Rückgabe
  170.  
  171. ```json
  172. {
  173.         "module": "account",
  174.         "action": "register",
  175.         "success": true,
  176.         "code": 100
  177. }
  178. ```
  179.  
  180. oder bei fehlerhaften Daten:
  181.  
  182. ```json
  183. {
  184.         "module": "account",
  185.         "action": "register",
  186.         "success": "false",
  187.         "code": 10200,
  188.         "description": "Invalid email format"
  189. }
  190. ```
  191.  
  192. ```json
  193. {
  194.         "module": "account",
  195.         "action": "register",
  196.         "success": "false",
  197.         "code": 10205,
  198.         "description": "Email already exists"
  199. }
  200. ```
  201. ```json
  202. {
  203.         "module": "account",
  204.         "action": "register",
  205.         "success": "false",
  206.         "code": 10210,
  207.         "description": "Invalid username format"
  208. }
  209. ```
  210.  
  211. ```json
  212. {
  213.         "module": "account",
  214.         "action": "register",
  215.         "success": "false",
  216.         "code": 10215,
  217.         "description": "Username already exists"
  218. }
  219. ```
  220.  
  221. ```json
  222. {
  223.         "module": "account",
  224.         "action": "register",
  225.         "success": "false",
  226.         "code": 10220,
  227.         "description": "Invalid password format"
  228. }
  229. ```
  230.  
  231. #### Passwort Reset
  232.  
  233. ```json
  234. {
  235.         "module": "account",
  236.         "action": "password_reset",
  237.         "content": {
  238.                 "email": "test@test.de"
  239.         }
  240. }
  241. ```
  242.  
  243. ##### Rückgabe
  244.  
  245. Die Methode meldet immer einen erfolg, egal ob die E-Mail Adresse existiert oder nicht.
  246.  
  247. ```json
  248. {
  249.         "module": "account",
  250.         "action": "password_reset",
  251.         "success": true,
  252.         "code": 100
  253. }
  254. ```
  255.  
  256. ### User
  257.  
  258. User-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 50.000 <= x < 60.000 zurück.
  259.  
  260. #### Kontoinformationen
  261.  
  262. ```json
  263. {
  264.         "module": "user",
  265.         "action": "information"
  266. }
  267. ```
  268.  
  269. ##### Rückgabe
  270.  
  271. ```json
  272. {
  273.         "module": "user",
  274.         "action": "information",
  275.         "success": true,
  276.         "code": 100,
  277.         "content": {
  278.                 "balance": 1321,
  279.                 "email": "jens@example.com"
  280.         }
  281. }
  282. ```
  283.  
  284. #### Kontostand zurücksetzen
  285.  
  286. ```json
  287. {
  288.         "module": "user",
  289.         "action": "refill"
  290. }
  291. ```
  292.  
  293. ##### Rückgabe
  294.  
  295. ```json
  296. {
  297.         "module": "user",
  298.         "action": "refill",
  299.         "success": true,
  300.         "code": 100,
  301.         "content": {
  302.                 "balance": 75000
  303.         }
  304. }
  305. ```
  306.  
  307. #### E-Mail Adresse ändern
  308.  
  309. 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.
  310.  
  311. ```json
  312. {
  313.         "module": "user",
  314.         "action": "change_email",
  315.         "content": {
  316.                 "email": "new@example.com"
  317.         }
  318. }
  319. ```
  320.  
  321. ##### Rückgabe
  322.  
  323. ```json
  324. {
  325.         "module": "user",
  326.         "action": "change_email",
  327.         "success": true,
  328.         "code": 100
  329. }
  330. ```
  331.  
  332. ### Meta
  333.  
  334. Meta-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 20.000 <= x < 30.000 zurück.
  335.  
  336. #### Matches abrufen
  337.  
  338. ```json
  339. {
  340.         "module": "meta",
  341.         "action": "get_matches",
  342.         "content": {
  343.                 "gameType": 1
  344.         }
  345. }
  346. ```
  347.  
  348. In `gameType` kann das Spiel gewählt werden - im Verlaufe des Projektes wird dies immer 1 (TexasHoldEm) sein.  
  349.  
  350. ##### Rückgabe
  351.  
  352. ```json
  353. {
  354.         "module": "meta",
  355.         "action": "get_matches",
  356.         "success": true,
  357.         "code": 100,
  358.         "content": {
  359.                 "gameType": 1,
  360.                 "matches": [
  361.                         {
  362.                                 "matchID": 9,
  363.                                 "matchName": "Pokertisch deluxe",
  364.                                 "maxPlayers": 8,
  365.                                 "currentPlayers": 7,
  366.                                 "creationDate": "2015.01.01 22:12:37",
  367.                                 "lastModified": "2015.01.01 22:12:37",
  368.                                 "gameMode": 1,
  369.                                 "buyin": 800,
  370.                                 "smallBlind": 2,
  371.                                 "bigBlind": 4,
  372.                                 "passwordProtected": false,
  373.                                 "serverID": 1,
  374.                                 "playerID": 3
  375.                         },
  376.                         {
  377.                                 "matchID": 48,
  378.                                 "matchName": "Hinterstube",
  379.                                 "maxPlayers": 3,
  380.                                 "currentPlayers": 3,
  381.                                 "creationDate": "2015.01.01 19:47:12",
  382.                                 "lastModified": "2015.01.01 19:50:12",
  383.                                 "gameMode": 1,
  384.                                 "buyin": 4000,
  385.                                 "smallBlind": 2,
  386.                                 "bigBlind": 4,
  387.                                 "passwordProtected": true,
  388.                                 "serverID": 2,
  389.                                 "playerID": 2
  390.                         }
  391.                 ],
  392.                 "servers": [
  393.                         {
  394.                                 "serverID": 1,
  395.                                 "serverName": "Europa #1",
  396.                                 "ip": "31.221.90.13",
  397.                                 "port": 4321
  398.                         }
  399.                 ]
  400.         }
  401. }
  402. ```
  403.  
  404. #### Spiel erstellen
  405.  
  406. ```json
  407. {
  408.         "module": "meta",
  409.         "action": "match_create",
  410.         "content": {
  411.                 "matchID": 2,
  412.                 "matchName": "Pokertisch deluxe",
  413.                 "maxPlayers": 8,
  414.                 "currentPlayers": 0,
  415.                 "gameMode": 2,
  416.                 "gameType": 1,
  417.                 "gameType": 1,
  418.                 "buyin": 800,
  419.                 "smallBlind": 2,
  420.                 "bigBlind": 4,
  421.                 "password": "",
  422.                 "serverID": 1,
  423.                 "playerID": 1
  424.         },
  425. }
  426. ```
  427.  
  428. `gameType` ermöglicht die Auswahl des Spiels - im Verlaufe des Projektes wird dies immer 1 (TexasHoldem) sein.  
  429. (optional)`password` - bei Fehlen kann jeder Spieler beitreten.  
  430. (optional)`maxPlayers` wird bei Fehlen auf einen sinnvollen Wert gesetzt.  
  431.  
  432. Je nach `gameType` sind noch weitere Felder erforderlich - für TexasHoldem sind dies Folgende:  
  433. `buyin` muss bezahlt werden, um diesem Tisch beizutreten  
  434. `gameMode` 1: offener Tisch, 2: Turniertisch
  435.  
  436. ##### Rückgabe
  437.  
  438. ```json
  439. {
  440.         "module": "meta",
  441.         "action": "match_create",
  442.         "success": true,
  443.         "code": 100,
  444.         "content": {
  445.                 "matchID": 9,
  446.                 "matchName": "Pokertisch deluxe",
  447.                 "maxPlayers": 8,
  448.                 "currentPlayers": 0,
  449.                 "creationDate": "2015.01.01 22:12:37",
  450.                 "lastModified": "2015.01.01 22:12:37",
  451.                 "gameMode": 1,
  452.                 "buyin": 800,
  453.                 "smallBlind": 2,
  454.                 "bigBlind": 4,
  455.                 "passwordProtected": true,
  456.                 "serverID": 1,
  457.                 "playerID": 9
  458.         }
  459. }
  460. ```
  461.  
  462. ### Chat
  463.  
  464. Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 90.000 <= x < 100.000 zurück.
  465.  
  466. #### Globaler Chat
  467.  
  468. ```json
  469. {
  470.     "module": "chat",
  471.     "action": "broadcast",
  472.     "content": {
  473.         "msg": "Schnittstellendefinitionen sind super!"
  474.     }
  475. }
  476. ```
  477.  
  478. ## Meta-Server -> Client
  479.  
  480. ### Chat
  481.  
  482. Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 100.000 <= x < 110.000 zurück.
  483.  
  484. #### Globaler Chat
  485.  
  486. ```json
  487. {
  488.     "module": "chat",
  489.     "action": "broadcast",
  490.     "content": {
  491.         "playerID": 5,
  492.         "playerName": "peter",
  493.         "msg": "Schnittstellendefinitionen sind super!"
  494.     }
  495. }
  496. ```
  497.  
  498. ## Client -> Game-Server
  499.  
  500. ### Account
  501.  
  502. 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.
  503.  
  504. #### Authentifizierung
  505.  
  506. ```json
  507. {
  508.         "module": "account",
  509.         "action": "auth",
  510.         "content": {
  511.                 "key": "abc123",
  512.         }
  513. }
  514. ```
  515.  
  516. Rückgabe bei einem falschen Key
  517.  
  518. ```json
  519. {
  520.         "module": "account",
  521.         "action": "auth",
  522.         "success": false,
  523.         "code": 80000
  524. }
  525. ```
  526.  
  527. ### Meta
  528.  
  529. Meta-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 80.000 <= x < 90.000 zurück.
  530.  
  531. #### Spiel beitreten
  532.  
  533. ```json
  534. {
  535.         "module": "meta",
  536.         "action": "match_join",
  537.         "content": {
  538.                 "matchID": 5,
  539.                 "password": "",
  540.                 "stash": 2000
  541.         }
  542. }
  543. ```
  544.  
  545. Das Passwort ist optional.
  546.  
  547. ##### Rückgabe
  548.  
  549. ```json
  550. {
  551.         "module": "meta",
  552.         "action": "match_join",
  553.         "success": true,
  554.         "content": {
  555.                 "players": [
  556.                         {
  557.                                 "playerID": 3,
  558.                                 "playerName": "Peter",
  559.                                 "stash": 400,
  560.                                 "slot": 0
  561.                         },
  562.                         {
  563.                                 "playerID": 3,
  564.                                 "playerName": "Peter",
  565.                                 "stash": 500,
  566.                                 "slot": 1
  567.                         },
  568.                         {
  569.                                 "playerID": 3,
  570.                                 "playerName": "Peter",
  571.                                 "stash": 972,
  572.                                 "slot": 2
  573.                         }
  574.                 ],
  575.                 "board": [
  576.                         {
  577.                                 "color": "spade",
  578.                                 "value": "5"
  579.                         },
  580.                         {
  581.                                 "color": "spade",
  582.                                 "value": "1"
  583.                         },
  584.                         {
  585.                                 "color": "heart",
  586.                                 "value": "Jack"
  587.                         }
  588.                 ],
  589.                 "pots": [
  590.                         {
  591.                                 "players": [
  592.                                         4,
  593.                                         9,
  594.                                         11
  595.                                 ],
  596.                                 "amount": 340
  597.                         }
  598.                 ],
  599.                 "running": true,
  600.                 "dealerID": 4,
  601.                 "bigBlindID": 9,
  602.                 "smallBlindID": 2,
  603.                 "matchID": 95,
  604.                 "stash": 25000,
  605.                 "smallBlind": 100,
  606.                 "bigBlind": 200,
  607.                 "maxPlayers": 8
  608.         },
  609.         "code": 100
  610. }
  611. ```
  612.  
  613. oder bei nicht existentem Spiel:
  614.  
  615. ```json
  616. {
  617.         "module": "meta",
  618.         "action": "match_join",
  619.         "success": false,
  620.         "code": 80100
  621. }
  622. ```
  623.  
  624. oder bei fehlerhaftem Passwort:
  625.  
  626. ```json
  627. {
  628.         "module": "meta",
  629.         "action": "match_join",
  630.         "success": false,
  631.         "code": 80110
  632. }
  633. ```
  634.  
  635. oder falls der Spieler dem Spiel schon beigetreten ist:
  636.  
  637. ```json
  638. {
  639.         "module": "meta",
  640.         "action": "match_join",
  641.         "success": false,
  642.         "code": 80120
  643. }
  644. ```
  645.  
  646. oder falls der Tisch schon voll ist:
  647.  
  648. ```json
  649. {
  650.         "module": "meta",
  651.         "action": "match_join",
  652.         "success": false,
  653.         "code": 80130
  654. }
  655. ```
  656.  
  657. oder falls der Spieler mehr Geld mit an den Tisch nehmen muss:
  658.  
  659. ```json
  660. {
  661.         "module": "meta",
  662.         "action": "match_join",
  663.         "success": false,
  664.         "code": 80140
  665. }
  666. ```
  667.  
  668. oder falls der Spieler nicht genügend Geld hat:
  669.  
  670. ```json
  671. {
  672.         "module": "meta",
  673.         "action": "match_join",
  674.         "success": false,
  675.         "code": 80150
  676. }
  677. ```
  678.  
  679. ### Game
  680.  
  681. Game-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 30.000 <= x < 40.000 zurück.
  682.  
  683. #### Spieleraktionen
  684.  
  685. ##### Raise
  686.  
  687. ```json
  688. {
  689.         "module": "game",
  690.         "action": "move",
  691.         "content": {
  692.                 "move": "raise",
  693.                 "matchID": 1,
  694.                 "amount": 200
  695.         }
  696. }
  697. ```
  698.  
  699. ##### Call
  700.  
  701. ```json
  702. {
  703.         "module": "game",
  704.         "action": "move",
  705.         "content": {
  706.                 "move": "call",
  707.                 "matchID": 4
  708.         }
  709. }
  710. ```
  711.  
  712. ##### Check
  713.  
  714. ```json
  715. {
  716.         "module": "game",
  717.         "action": "move",
  718.         "content": {
  719.                 "move": "check",
  720.                 "matchID": 4
  721.         }
  722. }
  723. ```
  724.  
  725. ##### AllIn
  726.  
  727. ```json
  728. {
  729.         "module": "game",
  730.         "action": "move",
  731.         "content": {
  732.                 "move": "allin",
  733.                 "matchID": 4
  734.         }
  735. }
  736. ```
  737.  
  738. ##### Rückgabe (alle Spielaktionen)
  739.  
  740. ```json
  741. {
  742.         "module": "game",
  743.         "action": "move",
  744.         "success": true,
  745.         "code": 100
  746. }
  747. ```
  748.  
  749. oder wenn der Spieler nicht mehr genügend Geld für die Spielaktion besitzt:
  750.  
  751. ```json
  752. {
  753.         "module": "game",
  754.         "action": "move",
  755.         "success": false,
  756.         "code": 30100,
  757. }
  758. ```
  759.  
  760. ... zu wenig raise
  761.  
  762. oder wenn der Timer abgelaufen ist bzw. der Spieler nicht (mehr) an der Reihe ist:
  763.  
  764. ```json
  765. {
  766.         "module": "game",
  767.         "action": "move",
  768.         "success": false,
  769.         "code": 30110,
  770. }
  771. ```
  772.  
  773. ### Chat
  774.  
  775. Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 110.000 <= x < 120.000 zurück.
  776.  
  777. #### Tisch Chat
  778.  
  779. ```json
  780. {
  781.         "module": "chat",
  782.         "action": "broadcast",
  783.         "content": {
  784.                 "matchID": 4,
  785.                 "playerID": 2,
  786.                 "msg": "Schnittstellendefinitionen sind super!"
  787.         }
  788. }
  789. ```
  790.  
  791. `playerId` ist optional. Zu einem späteren Zeitpunkt wird dieser Wert eventuell beim whispern (also direkten, privaten, Gesprächen zwischen zwei Personen) genutzt.
  792.  
  793. ##### Rückgabe
  794.  
  795. ```json
  796. {
  797.         "module": "chat",
  798.         "action": "broadcast",
  799.         "success": true
  800. }
  801. ```
  802.  
  803. oder wenn der Spieler nicht am Tisch sitzt bzw. der Tisch nicht existiert:
  804.  
  805. ```json
  806. {
  807.         "module": "chat",
  808.         "action": "broadcast",
  809.         "success": false,
  810.         "code": 110000
  811. }
  812. ```
  813.  
  814. ## Game-Server -> Client
  815.  
  816. 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.
  817.  
  818. ### Meta
  819.  
  820. Meta-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 140.000 <= x < 150.000 zurück.
  821.  
  822. #### Spiel beitreten
  823.  
  824. Falls ein **anderer** Spieler als man selbst den Tisch betreten hat, bekommt man dies mitgeteilt.
  825.  
  826. ```json
  827. {
  828.         "module": "meta",
  829.         "action": "match_joined",
  830.         "content": {
  831.                 "playerID": 5,
  832.                 "playerName": "uwe",
  833.                 "slot": 2,
  834.                 "stash": 4000
  835.         }
  836. }
  837. ```
  838.  
  839. #### Spiel verlassen
  840.  
  841. Falls ein **anderer** Spieler als man selbst den Client geschlossen hat, aber weiterhin mitspielt (Nur checken).
  842.  
  843. ```json
  844. {
  845.         "module": "meta",
  846.         "action": "player_disconnected",
  847.         "content": {
  848.                 "playerID": 4
  849.         }
  850. }
  851. ```
  852.  
  853. 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:
  854.  
  855. ```json
  856. {
  857.         "module": "meta",
  858.         "action": "player_left",
  859.         "content": {
  860.                 "playerID": 4
  861.         }
  862. }
  863. ```
  864.  
  865. ### Game
  866.  
  867. Game-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 120.000 <= x < 130.000 zurück.
  868.  
  869. #### Spieleraktionen
  870.  
  871. ##### Spielbeginn
  872.  
  873. 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.
  874.  
  875. ```json
  876. {
  877.         "module": "game",
  878.         "action": "move",
  879.         "content": {
  880.                 "move": "init",
  881.                 "cards": [
  882.                         {
  883.                                 "color": "spade",
  884.                                 "value": "2"
  885.                         },
  886.                         {
  887.                                 "color": "heart",
  888.                                 "value": "9"
  889.                         }
  890.                 ],
  891.                 "dealerID": 4,
  892.                 "bigBlindID": 5,
  893.                 "smallBlindID": 6
  894.         }
  895. }
  896. ```
  897.  
  898. ##### Spieler am Zug
  899.  
  900. 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.
  901.  
  902. ```json
  903. {
  904.         "module": "game",
  905.         "action": "move",
  906.         "content": {
  907.                 "move": "timer_start",
  908.                 "playerID": 73,
  909.                 "t": 15,
  910.                 "amountToCall": 500,
  911.                 "amountToRaise": 1000
  912.         }
  913. }
  914. ```
  915.  
  916. `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.
  917.  
  918. ##### Check / Call
  919.  
  920. ```json
  921. {
  922.         "module": "game",
  923.         "action": "move",
  924.         "content": {
  925.                 "move": "call",
  926.                 "playerID": 73,
  927.                 "amount": 400
  928.         }
  929. }
  930. ```
  931.  
  932. ##### Raise
  933.  
  934. ```json
  935. {
  936.         "module": "game",
  937.         "action": "move",
  938.         "content": {
  939.                 "move": "raise",
  940.                 "playerID": 73,
  941.                 "amount": 400,
  942.                 "raisedBy": 800
  943.         }
  944. }
  945. ```
  946.  
  947. ##### Flop / Turn / River
  948.  
  949. Bei Aufdeckung einer oder mehrerer *Community Cards* wird der Spieler darüber informiert und darf die Karte sofort anzeigen.
  950.  
  951. ```json
  952. {
  953.         "module": "game",
  954.         "action": "move",
  955.         "content": {
  956.                 "move": "flop",
  957.                 "cards": [
  958.                         {
  959.                                 "color": "spade",
  960.                                 "value": "3"
  961.                         },
  962.                         {
  963.                                 "color": "heart",
  964.                                 "value": "10"
  965.                         },
  966.                         {
  967.                                 "color": "heart",
  968.                                 "value": "jack"
  969.                         }
  970.                 ],
  971.                 "pots": [
  972.                         {
  973.                                 "amount": 12000,
  974.                                 "players": [
  975.                                         1,
  976.                                         7
  977.                                 ]
  978.                         }
  979.                 ]
  980.         }
  981. }
  982. ```
  983.  
  984. `cards` besteht bei der `move` `flop` aus einem Array mit drei Karten, bei `turn` oder `river` aus einem Array mit einer Karte.
  985.  
  986. ##### Gewinnverteilung
  987.  
  988. 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.
  989.  
  990. ```json
  991. {
  992.         "module": "game",
  993.         "action": "move",
  994.         "content": {
  995.                 "move": "pots",
  996.                 "players": [
  997.                         {
  998.                                 "playerID": 7,
  999.                                 "stash": 19800
  1000.                         },
  1001.                         {
  1002.                                 "playerID": 1,
  1003.                                 "stash": 20200
  1004.                         }
  1005.                 ],
  1006.                 "pots": [
  1007.                         {
  1008.                                 "amount": 12000,
  1009.                                 "hand": "One Pair",
  1010.                                 "cards": [
  1011.                                         {
  1012.                                                 "color": "heart",
  1013.                                                 "value": "6"
  1014.                                         },
  1015.                                         {
  1016.                                                 "color": "spade",
  1017.                                                 "value": "6"
  1018.                                         },
  1019.                                         {
  1020.                                                 "color": "diamond",
  1021.                                                 "value": "K"
  1022.                                         },
  1023.                                         {
  1024.                                                 "color": "heart",
  1025.                                                 "value": "J"
  1026.                                         },
  1027.                                         {
  1028.                                                 "color": "heart",
  1029.                                                 "value": "7"
  1030.                                         }
  1031.                                 ],
  1032.                                 "players": [
  1033.                                         1,
  1034.                                         7
  1035.                                 ]
  1036.                         }
  1037.                 ]
  1038.         }
  1039. }
  1040. ```
  1041.  
  1042. ##### Karten aufdecken
  1043.  
  1044. 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.
  1045.  
  1046. ```json
  1047. {
  1048.         "module": "game",
  1049.         "action": "move",
  1050.         "content": {
  1051.                 "move": "showdown",
  1052.                 "players": [
  1053.                         {
  1054.                                 "playerID": 4,
  1055.                                 "cards": [
  1056.                                         {
  1057.                                                 "color": "spade",
  1058.                                                 "value": "3"
  1059.                                         },
  1060.                                         {
  1061.                                                 "color": "heart",
  1062.                                                 "value": "10"
  1063.                                         }
  1064.                                 ]
  1065.                         },
  1066.                         {
  1067.                                 "playerID": 9,
  1068.                                 "cards": [
  1069.                                         {
  1070.                                                 "color": "spade",
  1071.                                                 "value": "4"
  1072.                                         },
  1073.                                         {
  1074.                                                 "color": "heart",
  1075.                                                 "value": "9"
  1076.                                         }
  1077.                                 ]
  1078.                         }
  1079.                 ]
  1080.         }
  1081. }
  1082. ```
  1083.  
  1084. ### Chat
  1085.  
  1086. Chat-Funktionen geben im Erfolgsfall den Status-Code 100 und im Fehlerfall einen Statuscode 130.000 <= x < 140.000 zurück.
  1087.  
  1088. #### Tisch Chat
  1089.  
  1090. ```json
  1091. {
  1092.         "module": "chat",
  1093.         "action": "broadcast",
  1094.         "content": {
  1095.                 "matchID": 4,
  1096.                 "playerID": 2,
  1097.                 "playerName": "uwe",
  1098.                 "msg": "Schnittstellendefinitionen sind super!"
  1099.         }
  1100. }
  1101. ```
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand