From 526e64213428d3c790aeac20649c263a0d405c89 Mon Sep 17 00:00:00 2001
From: philipp023_ <Philipp.Lachowski@tu-dortmund.de>
Date: Sat, 10 Dec 2022 21:39:55 +0100
Subject: [PATCH] =?UTF-8?q?Weitestgehend=20fertig=20(ohne=20Http=20api=20s?=
 =?UTF-8?q?tuff),=20History=20Zahl=20f=C3=BCr=20viable=20Zahl=20geht=20noc?=
 =?UTF-8?q?h=20nicht?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/heimaufgaben/Client.java              | 12 +--
 .../src/heimaufgaben/Server.java              | 80 +++++++++++++++++--
 2 files changed, 80 insertions(+), 12 deletions(-)

diff --git a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
index fb6aeb0..81026c1 100644
--- a/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
+++ b/AufgabenStuff/ClientAnwendung/src/heimaufgaben/Client.java
@@ -80,16 +80,16 @@ public class Client {
                 info.close();
                 clientSocket.close();
                 break;
-            } else if (ausgabe.equals("PONG")) {
-                System.out.println(ausgabe);
-            } else if (ausgabe.substring(0, 4).equals("ECHO")) {
+            } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("ECHO")) {
                 System.out.println(ausgabe.substring(5));
-            } else if (ausgabe.substring(0, 4).equals("TIME")) {
+            } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("TIME")) {
                 System.out.println(ausgabe.substring(5));
-            } else if (ausgabe.substring(0, 4).equals("DATE")) {
+            } else if (ausgabe.length()>3 && ausgabe.substring(0, 4).equals("DATE")) {
                 System.out.println(ausgabe.substring(5));
-            } else if (ausgabe.substring(0, 5).equals("ERROR")) {
+            } else if (ausgabe.length()>4 && ausgabe.substring(0, 5).equals("ERROR")) {
                 System.out.println(ausgabe.substring(6));
+            } else {    // Bei Ping, Verlauf etc:
+                System.out.println(ausgabe);
             }
         }
     }
diff --git a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
index d2a7149..393e01b 100644
--- a/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
+++ b/AufgabenStuff/ServerAnwendung/src/heimaufgaben/Server.java
@@ -38,17 +38,18 @@ public class Server{
         Socket serverSocket = null;
         BufferedWriter zumClient;
         BufferedReader vomClient;
-        LinkedList<String> verlauf;
+        ArrayList<String> verlauf;
         try {
             ServerSocket tempSocket = new ServerSocket(2022);   // Port wird festgelegt
             System.out.println("Warte auf Client...");
             serverSocket = tempSocket.accept(); // Sobald cleint sich verbindet, geht es weiter
             System.out.println("Client hat sich verbunden!");
+            tempSocket.close();
         } catch (Exception e) {
             System.err.println("Probleme bei Verbidnungsherstellung zum CLient");
             return;
         }
-        verlauf = new LinkedList<String>();
+        verlauf = new ArrayList<String>();
         try{
             zumClient = new BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream()));
             vomClient = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
@@ -60,29 +61,96 @@ public class Server{
         // Befehle Werden aufgenommen
         System.out.println("Erwarte Eingabe...");
         boolean abbruch = false;
+        String eingabe = "";
         while(!abbruch) {
-            String eingabe = "";
             try{
                 eingabe = vomClient.readLine();
                 System.out.println("Eingabe vom Client: "+eingabe);
+                verlauf.add(eingabe);   // Jede Anfrage wird sich gemerkt
             } catch (IOException e) {
                 System.err.println("Probleme beim Lesen der Client-Eingabe");
                 abbruch = true;
+                try {
+                    zumClient.write(" 500 INTERNAL SERVER ERROR\n");
+                    zumClient.flush();
+                } catch (IOException f) {
+                    System.err.println("Zusätzlicher Fehler beim Fehler Report an Client");
+                }
             }
-            try{    // Jede mögliche Eingabe wird überprüft
+            // Jede mögliche Eingabe wird überprüft
+            try{
                 if(eingabe.equalsIgnoreCase("exit")){
                     abbruch = true;
                     runs = false;   // Server runned nicht mehr, zurück zum Konstruktor
                     zumClient.write("EXIT\n");
                     zumClient.flush();
                     System.out.println("Der Server wird neugestartet");
+                    serverSocket.close();
                 }
-                if(eingabe.equalsIgnoreCase("ping")) {
-                    zumClient.write("PONG");
+                else if(eingabe.equalsIgnoreCase("ping")) {
+                    zumClient.write("PONG\n");
                     zumClient.flush();
                 }
+                else if(eingabe.equalsIgnoreCase("current time")) {
+                    zumClient.write("TIME "+new SimpleDateFormat("hh:mm:ss").format(new Date())+"\n");
+                    zumClient.flush();
+                }
+                else if(eingabe.equalsIgnoreCase("current date")) {
+                    zumClient.write("DATE "+new SimpleDateFormat("dd.MM.yyyy").format(new Date())+"\n");
+                    zumClient.flush();
+                }
+                else if(eingabe.equalsIgnoreCase("history")) {
+                    String ausg = "Gesamter Verlauf: ";
+                    for(int i=0; i<verlauf.size()-1; i++) {
+                        ausg = ausg.concat(verlauf.get(i)+", ");
+                    }
+                    ausg = ausg.concat(verlauf.get(verlauf.size()-1)+"\n");
+                    zumClient.write(ausg);
+                    zumClient.flush();
+                }
+                else if(eingabe.length()>=9 && eingabe.substring(0,7).equalsIgnoreCase("history")) {
+                    int zahl = -1;
+                    try{
+                        zahl = Integer.parseInt(eingabe.substring(8,eingabe.length()));
+                    } catch (NumberFormatException e) {
+                        System.out.println("Der Client muss Zahlen hinter history schreiben smh");
+                        zumClient.write("ERROR 400 BAD REQUEST\n"); // Bei falschem Aufruf
+                    }
+                    if (zahl>=verlauf.size()) {
+                        String ausg = "Gesamter Verlauf: ";
+                        for(int i=0; i<verlauf.size()-1; i++) {
+                            ausg = ausg.concat(verlauf.get(i)+", ");
+                        }
+                        ausg = ausg.concat(verlauf.get(verlauf.size()-1)+"\n");
+                        zumClient.write(ausg);
+                    }
+                    else {
+                        if(zahl>0) {
+                            String ausg = "Verlauf der letzten "+zahl+" Anfragen: ";
+                            for(int i=verlauf.size()-zahl; i<verlauf.size(); i++) {
+                                ausg = ausg.concat(verlauf.get(i)+", ");
+                            }
+                            zumClient.write(ausg);
+                        }
+                        else {
+                            zumClient.write("Super witzig");
+                        }
+                    }
+                    zumClient.flush();
+                }
+                else {
+                    zumClient.write("ERROR 400 BAD REQUEST\n"); // Bei falschem Aufruf
+                    zumClient.flush();
+                }
+
             } catch (IOException | NullPointerException e) {
                 System.err.println("Fehler beim schreiben zum Client");
+                try {
+                    zumClient.write("ERROR  500 INTERNAL SERVER ERROR\n");
+                    zumClient.flush();
+                } catch (IOException f) {
+                    System.err.println("Zusätzlicher Fehler beim Fehler Report an Client");
+                }
                 abbruch = true;
                 runs = false;
             }
-- 
GitLab