Java_2/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt

75 lines
3.8 KiB
Plaintext

Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann,
welche Klausuren ein(e) Student/-in mitschreiben möchte.
Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B.
max.mueller@stud.hs-emden-leer.de: 34, 45, 56
peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67
axel.maier@stud.hs-emden-leer.de: 34, 56
...
Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird.
Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden.
Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf,
wobei die Kommandos groß oder klein geschrieben werden können.
Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt.
Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben
und müssen somit in einer Datei gespeichert werden.
PUT key newvalue -> 1 oldvalue
Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels.
Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden.
GET key -> 1 value oder 0
Liefert den Wert, der unter dem Schlüssel key eingetragen ist.
Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben.
Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0.
DEL key -> 1 oldvalue oder 0
Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück.
Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert.
GETALL -> 1 value oder 0
Liefert eine Auflistung aller Klausurenwahlen.
Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist,
fällt diese für diese Anfrage weg.
Beim obigen Beispiel würde die Wahl von Axel Maier entfallen,
da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden:
[34,45,56],[1,8,34,67]
Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben.
STOP -> 1
Beendet den Dienst und somit den Server.
Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server.
Der KlausurenServer arbeitet ähnlich wie ein Webserver.
Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen.
Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen.
Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen.
Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt,
die keine Informationen aus früheren Anfragen voraussetzt.
Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann.
Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden.
Das folgende Beispiel zeigt den Dialog auf einem Unix-System.
Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits.
Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet:
$ telnet localhost 2000
put max.mueller@stud.hs-emden-leer.de 34,45,56
1
$ telnet localhost 2000
put axel.maier@stud.hs-emden-leer.de 34, 56
1
$ telnet localhost 2000
getall
1 [34,45,56]
$ telnet localhost 2000
put max.mueller@stud.hs-emden-leer.de 34, 45
1 34,45,56
$ telnet localhost 2000
get max.mueller@stud.hs-emden-leer.de
1 34,45
$ telnet localhost 2000
del max.mueller@stud.hs-emden-leer.de
1 34,45
$ telnet localhost 2000
get max.mueller@stud.hs-emden-leer.de
0
$ telnet localhost 2000
stop
1