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