From c62203b6eb5e3eec390a9baebcb0f0604c549da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janek=20=C3=96zbay?= <janek.ozbay@stud.hs-hannover.de> Date: Tue, 18 Oct 2022 19:06:03 +0200 Subject: [PATCH] Erste Version des Protokolls --- Schnittstellendefinition_1.md | 176 ++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 Schnittstellendefinition_1.md diff --git a/Schnittstellendefinition_1.md b/Schnittstellendefinition_1.md new file mode 100644 index 0000000..5b9b277 --- /dev/null +++ b/Schnittstellendefinition_1.md @@ -0,0 +1,176 @@ +# Schnittstellendefinition +## Allgemeines +**Verwendete Netzwerktechnologie:** +- java.net.Socket +- java.net.ServerSocket + +**Art des Datentransfers:** +- Plaintext + +**Andere Festlegungen:** +- Semester wird direkt übetragen => Ob Spieler auf diesem spielen kann, wird nicht im Netzwerk behandelt +- Schiffe mit der Größe `8-Credits <= 0` werden aufgeteilt in einzelne Schiffe der Größe `8-Credits/2` + + + +**Semester - Schiffe** + +1. 2, 2, 2, 2, 4, 6 +2. 2, 2, 2, 2, 2, +3. 2, 2, 2, 2, 4, 6 +4. 2, 2, 2, 2, 4, 6 +5. 2, 2, 2, 3, 3, 6 +6. 2, 1, 1, 1, 6 + +## API-Definition Version 1 +### Trennzeichen +";" => Befehle auslesen durch String.split(";"); + +---- +### 1. HELLO +**Synopsis:** +``` +HELLO;<USERNAME>[;VERSION] +``` +**Description:** +Wird durch den Client bei der Verbindung an den Host gesendet. Typischerweise die erste Nachricht. +**Options:** +* *USERNAME*: Name des hostenden Spielers + * String (UTF-8) + * Maximale Länge: 255 Zeichen +* *VERSION* (optional): Versionsnummer des Programms + * int: API_VERSION + +---- +### 2. VERSION_SEND (Optional) +**Synopsis:** +``` +VERSION_SEND;<VERSION> +``` +**Seit Version:** 1 +**Description:** +Einmalig vor Spielbeginn senden um dem Peer mitzuteilen welche Version des Protokolls man benutzt. Optional. +Wird nie ein ``VERSION_SEND`` empfangen, wird per Definition Version 1 benutzt. +**Options:** + +---- +### 3. VERSION_ACK +**Synopsis:** +``` +VERSION_ACK;<VERSION> +``` +**Description:** +Einmalig vor Spielbeginn senden nachdem man das ``VERSION_SEND`` des Peers empfangen hat um sicher zu gehen dass die Version des Partners die Gleiche ist. +**Options:** +* *VERSION*: Versionsnummer des Programms + * int: API_VERSION + +---- +### 4. SEMESTER_SEND +**Synopsis:** +``` +SEMESTER_SEND;<SEMESTER> +``` +**Description:** +Einmalig vor Spielbeginn senden um dem Peer mitzuteilen in welchem Semestern man spiel. +**Options:** +* *SEMESTER*: Höchstes spielbares Semester des Sendenden + * int: Ganzzahl im Intervall [1,6] +---- +### 5. SEMESTER_ACK +**Synopsis:** +``` +SEMESTER_ACK;<SEMESTER> +``` +**Description:** +Einmalig vor Spielbeginn senden um dem Peer mitzuteilen in welchem Semestern man spiel. Es wird ``min(meinSemester, peerSemester)`` als Semester ausgewählt. Nach Empfangen von SEMESTER_ACK kann begonnen werden die Schiffe zu setzen. + +**Options:** +* *SEMESTER*: min(meinSemester, peerSemester) + * int: Ganzzahl im Intervall [1,6] + +---- +### 6. READY_CHECK +**Synopsis:** +``` +READY_CHECK +``` +**Description:** +Sendet Nachricht für Bereitschafts-Überprüfung an anderen Spieler. Erwartet eine Antwort. + +---- +### 7. READY_RESPONSE +**Synopsis:** +``` +READY_RESPONSE;<SHIPS_PLACED> +``` +**Description:** + +**Options:** +* *SHIPS_PLACED*: Anzahl der noch nicht platzierten Schiffe + * int: Zahl im Intervall [0, Anzahl der nicht platzierten Schiffe] + +---- +### 8. START +**Synopsis:** +``` +START;<WHO> +``` +**Description:** + +**Options:** +* *WHO*: String ∈ { "YOU", "ME" } + +---- +### 9. START_ACK +**Synopsis:** +``` +START_ACK;<WHO> +``` +**Description:** + +**Options:** +* *WHO*: + * String ∈ { "YOU", "ME" } + +---- +### 10. FIRE +**Synopsis:** +``` +FIRE;<ROW>;<COLUMN> +``` +**Description:** + +**Options:** +* *ROW*: Das Feld im Spielfeld welches beschossen wird + * int im Intervall [0, Spielfeldgröße-1] +* *COLUMN*: Das Feld im Spielfeld welches beschossen wird + * int im Intervall [0, Spielfeldgröße-1] + +---- +### 11. FIRE_ACK +**Synopsis:** +``` +FIRE_ACK;<ROW>;<COLUMN;<STATUS> +``` +**Description:** + +**Options:** +* *ROW*: Das Feld im Spielfeld welches beschossen wird + * int im Intervall [0, Spielfeldgröße-1] +* *COLUMN*: Das Feld im Spielfeld welches beschossen wird + * int im Intervall [0, Spielfeldgröße-1] +* *STATUS*: + * String ∈ {"HIT", "MISS", "SUNK"} + +---- +### 12. ERROR +**Synopsis:** +``` +ERROR;<MSG> +``` +**Description:** +Falls ein Fehler auftritt, diesen dem Mitspieler mitteilen um Debugging auf beiden Seiten ermöglichen +**Options:** +* *MSG*: Fehler-Nachricht + * String -- GitLab