uni:ba:start
This is an old revision of the document!
Table of Contents
Bachelor Arbeit
Komponenten
Client Protocol adapter Dings 1 Game State +--------------+ +---------------+ Unix Socket +---------------+ +------+ | | TCP/IP | | ---------------> | State Machine | Funktionsaufruf | | | Black Box | <----------> | State machine | | | <-----------------> |Object| | (Von Studis) | messages | | <--------------- | Buffer | | | +--------------+ +---------------+ messages +---------------+ +------+ +-- Prozess ---+ +--- Prozess ---+ +-------------------- Prozess ---------------+ +-- Maschiene -+ +-------------------------------------- Maschiene ------------------------------+ +--------------------------------------------------- System --------------------------------------------------+
Die Kommunikation wird immer enger/direkter.
- Zwischen Prozessen auf verschiedenen Maschienen
- Zwischen Prozessen auf der selben Maschiene
- Innerhalb eines Prozesses
Verliert der Protokoll adapter die Verbindung zum master und wartet er noch auf eine Antwort von ihm, so ist vmtl. er am Absturz schuld und baut keine erneute Verbindung auf.
Protokoll
Erste Versuche
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)
Geordnet
Protocol adapter
ticket
toPlayer
state
player
Dings 1
register
unregister
move
;move %%:%% str :Der move als text beschreibung. Das spiel muss damit umgehen können. Es wird hier einfach nur durchgereicht.
requestPlayer
requestState
uni/ba/start.1395363292.txt.gz · Last modified: 2020-11-18 18:10 (external edit)