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.
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.
Die ersten Versuche (Anschrift am Whiteboard), sind als Protocol sketch gespeichert.
Änderungen werden im Working draft des Protokolls gemacht.
Thread 1 +--------+ | poll() | Thread 2 + - - - -+ ---> +--------+ | Aktion | -> | poll() | | | / + - - - -+ | | / | Aktion | +--------+ -' | | | | +--------+
Aktion kann ohne kontextwechsel ausgeführt werden, sobald blokiert wird, kann weitergearbeitet werden (da mindestens poll() wieder läuft)
Beim schreiben locks auf buffer verwenden, da mehrere threads schreiben können sowie mehrere schreiben und einer lesen kann.
immer ein non blocking write versuchen (damit es sofort los geht), alles was nicht geschrieben werden konnte in buffer einfügen. Sollte der buffer voll sein, müssen alle reads des games beendet werden
Wann sollen erzeugungs/löschungs aufgaben durchgeführt werden (ausnamne die notfallerzeugung beim rausnehmen, wenn keine wartenden)?
Ein Thread sollte speichern welche FDs hinzugefügt und entfernt werden sollen von der poll queue.