====== Protocol sketch ====== ... Abschrieb vom Whiteboard. Kommunikation zwischen //Protocol adapter// und //Dings 1//. C: register(gameId, playerNr, key, aboState, aboPlayer, aboToPlayer, keepAlive/autoUnregster, Timeout 1, Timeout 2) key: Wenn kein key beim Server für den Player hinterlegt ist (z.B. weil der client einen time out hatte), dann ignoriere den übergebenen key und weise einen neuen zu. S: ticket(gameData, playerID, key)/ERR key nicht in to Player, damit keiner Schummeln kann wirklich alles in gameData nötig? (eigentlich nur für web Player) ------ Ab hier ist die Verbindung aufgebaut und folgende Nachrichten können folgen C: unregister Geschlossene Verbindung nicht hinreichen, da HTTP player auch ohne Verbindung aktiv bleiben muss. Daher "auto unregister" für Protokolle oder "keep alive" für HTTP player. S: OK/ERR C: move(s) Kann player jeder Zeit senden. Aufforderung zum move, muss Protokoll Adapter anhand von state() erkennen. Zwischen move() und OK/ERR alles state/player()/toPlayer(). S: OK/ERR Ist das nötig? S: state(nr, data) S: player(nr, data) Vor toPlayer(), damit sich state machine drauf einstellen kann. Kann "geheime" infos, wie verdekte Karten der Gegner, beinhalten. S: toPlayer(data) Flexibler, damit können auch daten zwichen den Zügen an die Player gesendet werden. key => (type, value) "next" -> int(3) "board" -> array(...) C: requestState/Player ??? S: quit(reason)