Projekt:2021/WORDLE: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
1.726 Bytes hinzugefügt ,  23:28, 6. Feb. 2022
Zeile 101: Zeile 101:
-ERR wotd not finished
-ERR wotd not finished
</pre>
</pre>
== Hinweise zur Umsetzung ==
=== Nicht-blockierende Verbindungen ===
Jede Verbindung eines Clients zum Server erzeugt einen neuen <code>Thread</code>, der für die Kommunikation mit diesem Client zuständig ist. Um über eine spezifische Verbindung eine Nachricht zu empfangen, müssen daher die IP und Portnummer der Verbindung angegeben werden. Diese werden als Parameter immer einer der Methoden übergeben, die für die Verarbeitung von eingehenden Nachrichten zuständig sind. Sobald eine Nachricht eintrifft, sorgt die Server-Klasse dafür, dass die entsprechende <code>process*</code> Methode aufgerufen wird.
Wird etwa eine neue Verbindung von einem Client aufgebaut, dann wird <code>processNewConnection(String pClientIP, int pClientPort)</code> aufgerufen. Hier könnte der Server dann eine Antwort an den Client senden:
<syntaxhighlight lang="java">
@Override
public void processNewConnection( String pClientIP, int pClientPort ) {
    // Verarbeite die neue Verbindung (z.B. letzten Spielstand wiederherstellen, ...)
    send(pClientIP, pClientPort, "+OK welcome to wordle");
}
</syntaxhighlight>
=== Verbindungsspezifische Daten speichern ===
Der Server muss Daten pro Client speichern können (z.B. Spielstände). Clients können anhand der IP plus Portnummer identifiziert werden. Es müssen also abhängig von einem Schlüssel (IP+Port) Werte gespeichert werden. Eine Datenstruktur, die das erlaubt, kennen wir schon: {{Java API|java.util.HashMap||Hashtabellen}}.
=== Datenpersistenz  ===
Damit der Server Daten auch nach einem Verbindungsabbruch wiederherstellen kann, muss er sie dauerhaft speichern. Dazu können wir die Datenbank nutzen, um die Zustände abhängig von IP und Portnummer abzulegen.


== Dokumentationen ==
== Dokumentationen ==
8.581

Bearbeitungen

Navigationsmenü