Laufzeit-Zustandsmaschine¶
Zustandskonstanten (GameMatch):
0eingeladen (STATE_INVITED)1aktiv (STATE_ACTIVE)2beendet (STATE_FINISHED)3abgelehnt (STATE_DECLINED)4abgebrochen (STATE_CANCELLED)
Übergangstabelle¶
| Von | Aktion | Akteur | Bedingung | Nach |
|---|---|---|---|---|
| none | invite | Absender | Benutzer sind berechtigt und zugelassen | eingeladen |
| eingeladen | acceptInvite | Empfänger | Empfänger ist nicht Einladender | aktiv |
| eingeladen | declineInvite | Empfänger | Empfänger ist nicht Einladender | abgelehnt |
| eingeladen | cancelInvite | Einladender | Akteur ist Einladender | abgebrochen |
| aktiv | makeMove | aktueller Zug-Benutzer | gültiger Zugs-Payload | aktiv oder beendet |
| aktiv | forfeit | Teilnehmer | Akteur ist Teilnehmer | beendet |
| eingeladen/aktiv | disable | System | Spiel deaktiviert | abgebrochen |
Erforderliche Bedingungen pro Laufzeitaktion¶
invite:
- keine Selbst-Einladung
- Zielbenutzer existiert
- Akteur und Ziel können Spiel-Einladungen empfangen
- Freundschafts- und Modulbeschränkungen auf Framework-Ebene sind erfüllt
- Verhindern doppelter offener Matches für dasselbe Paar und Spieltyp
acceptInvite, declineInvite, cancelInvite:
- Match existiert
- Akteur ist Teilnehmer
- Match gehört zum Laufzeit-
gameType - Zustand ist eingeladen
- Rollen-Bedingung (Einladender vs. Eingeladener) ist korrekt
makeMove:
- Match existiert
- Akteur ist Teilnehmer
- Match gehört zum Laufzeit-
gameType - Zustand ist aktiv
- Akteur ist aktueller Zug-Benutzer
- Payload ist strukturell gültig
- Zug ist laut Spielbrett/-zustand legal
disable:
- Eingeladene/aktive Matches des Laufzeit-Spieltyps schließen
- Zugehörige Benachrichtigungen bereinigen, falls verwendet
Idempotenz-Empfehlungen¶
Empfohlenes Verhalten:
- Wenn eine wiederholte Anfrage dem bereits angewandten Zustand entspricht, Rückgabe des aktuellen Payloads statt Fehlerausgabe, wo möglich
- Strenge Fehler für tatsächlich ungültige oder nicht autorisierte Übergänge beibehalten