Skip to content
Snippets Groups Projects
Schnittstellendefinition_1.md 3.83 KiB
Newer Older
  • Learn to ignore specific revisions
  • # 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