diff --git a/pom.xml b/pom.xml index 2f9c3e710d4477723661310f9d7d24e446d8a0e0..4ab66f33e3ed2b30813206e3f249f645b3128753 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,18 @@ <artifactId>mariadb-java-client</artifactId> <version>2.5.2</version> </dependency> - + <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>4.5.10</version> + </dependency> + <!-- https://mvnrepository.com/artifact/org.json/json --> + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20190722</version> + </dependency> </dependencies> <build> <plugins> diff --git a/src/main/java/Enigma/Main.java b/src/main/java/Enigma/Main.java index 6adb9204e8eda602b491142bacbe98185c6c0eaa..53b9f3becf1ccb85df23add6b945f89a081ea878 100644 --- a/src/main/java/Enigma/Main.java +++ b/src/main/java/Enigma/Main.java @@ -1,13 +1,25 @@ package Enigma; -import Enigma.model.DatenbankSqlite; -import Enigma.model.Morsecode; +import Enigma.model.Funkraum; -import java.sql.SQLException; +import java.io.IOException; public class Main { public static void main(String[] args) { + Funkraum fr = new Funkraum(); + try { + fr.sendeFunkspruch("Testen wir doch mal das ganze", "deisold"); + } catch (IOException e) { + e.printStackTrace(); + } + try { + String[] funkspruch = fr.empfangeFunkspruch("deisold"); + System.out.println("Empfangen: " + funkspruch[0]); + System.out.println("Nachricht: " + funkspruch[1]); + } catch (IOException e) { + e.printStackTrace(); + } App.main(args); } diff --git a/src/main/java/Enigma/model/Codebuch.java b/src/main/java/Enigma/model/Codebuch.java index c32345ed483066ea6daa01e4d0f9bc88776e49f0..a257417737d8e0d29d3751fcfda8883a0f2e4b07 100644 --- a/src/main/java/Enigma/model/Codebuch.java +++ b/src/main/java/Enigma/model/Codebuch.java @@ -20,7 +20,6 @@ public class Codebuch { private int tag; private String[] Walzenlage = new String[3]; private String[] Ringstellung = new String[3]; - private String[] Grundstellung = new String[3]; private String[] Steckverbindung = new String[10]; /** @@ -34,7 +33,6 @@ public class Codebuch { StringBuilder sb = new StringBuilder(); boolean wlLoop = false; boolean rsLoop = false; - boolean gsLoop = false; boolean svLoop = false; sb.append("Tag: ").append(this.getTag()).append("\n"); @@ -59,16 +57,6 @@ public class Codebuch { } sb.append("\n"); - sb.append("Grundstellung: "); - for (String gs : this.getGrundstellung()) { - sb.append(gs).append(","); - gsLoop = true; - } - if(gsLoop) { - sb.setLength(sb.length() - 1); - } - sb.append("\n"); - sb.append("Steckverbindung: "); for (String s : this.getSteckverbindung()) { if (!s.isEmpty()) { @@ -108,14 +96,6 @@ public class Codebuch { return Ringstellung; } - /** - * Gibt die Grundstellung dieser Instanz zurück - * @return String[] : Grundstellung - */ - public String[] getGrundstellung() { - return Grundstellung; - } - /** * Gibt die Steckverbindung dieser Instanz zurück * @return String[] : Steckverbindung @@ -148,14 +128,6 @@ public class Codebuch { Ringstellung = ringstellung; } - /** - * Setzt die Grundstellung dieser Instanz - * @param grundstellung : String[] - */ - public void setGrundstellung(String[] grundstellung) { - Grundstellung = grundstellung; - } - /** * Setzt die Steckverbindung dieser Instanz * @param steckverbindung : String[] diff --git a/src/main/java/Enigma/model/DatenbankSqlite.java b/src/main/java/Enigma/model/DatenbankSqlite.java index 6a203b58e38cca810c87d4ecf18838dd7c8168f1..d065c5292e92500800aac22f828b6518c2bafb27 100644 --- a/src/main/java/Enigma/model/DatenbankSqlite.java +++ b/src/main/java/Enigma/model/DatenbankSqlite.java @@ -55,7 +55,6 @@ public class DatenbankSqlite { cb.setTag(rs.getInt("Tag")); cb.setWalzenlage(rs.getString("Walzenlage").split(",")); cb.setRingstellung(rs.getString("Ringstellung").split(",")); - cb.setGrundstellung(rs.getString("Grundstellung").split(",")); cb.setSteckverbindung(rs.getString("Steckverbindung").split(",")); } diff --git a/src/main/java/Enigma/model/Funkraum.java b/src/main/java/Enigma/model/Funkraum.java new file mode 100644 index 0000000000000000000000000000000000000000..6abdd180950de0600b5d1a11eeb25b99bec83dbe --- /dev/null +++ b/src/main/java/Enigma/model/Funkraum.java @@ -0,0 +1,106 @@ +package Enigma.model; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONObject; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +/** + * Hier sitzt der Funker + * Der Funkraum kann Funksprüche empfangen und senden. + * Hierfür wird eine Verbindung zu einem externen Service aufgebaut. + * Dieser Servive erwartet die Nachrichten im JSON Format. Dazu wird ein k als Kenngruppe + * (Benutzername) übergeben und falls eine Nachricht gesendet werden soll, zusätzlich ein m mit der Nachricht. + * Beides wird als String gesendet. + */ +public class Funkraum { + /** + * Zum Empfangen liefert der Server, anstatt der Kenngruppe (k) den Empfangstag der Nachricht mit damit man + * die Grundeinstellungen aus dem Codebuch, für diesen Tag, raussuchen kann. + * {'m': 'Hello world', 't': '26'} + * + * @param kenngruppe : String : Kenngruppe dieser Engiam + * @return String[] : String Array wobei Index 0 dem Empfangstag entspricht und index 1 der empfangenen Nachricht + * @throws IOException + */ + public String[] empfangeFunkspruch(String kenngruppe) throws IOException { + String[] funkspruch = new String[2]; + + HttpClient httpclient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); + + // Anfrage Parameter und Encoding setzen + List<NameValuePair> params = new ArrayList<NameValuePair>(2); + params.add(new BasicNameValuePair("k", kenngruppe)); + httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + + // POST Request ausführen und Rückgabe verarbeiten + HttpResponse response = httpclient.execute(httppost); + HttpEntity entity = response.getEntity(); + + if (entity != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + JSONObject result = new JSONObject(reader.readLine()); + + if(!result.getString("m").isEmpty()) { + funkspruch[0] = result.getString("t"); + funkspruch[1] = result.getString("m"); + } + } + + return funkspruch; + } + + /** + * Dem Service senden wir unsere Nachricht als POST Parameter (m) und unsere Kenngruppe (k). + * Dieser nimmt die Daten entgegeb und hierlerlegt sie auf seinem Stapel (Datenbank) von dem die Nachrichten + * irgendwann, auf Anfrage, wieder abgerufen werden können. + * + * Darauf antworter der Server dann mit einem JSON Object in dem das Ergebnis der Anfrage zu sehen ist. + * {'result': 200} + * + * Die 200 heißt hier das alles erfolgreich durchgeführt werden konnte. Steht hier etwas anderes, ist ein Fehler + * aufgetreten und die Anfrage war nicht erfolgreich. + * In letzterem Fall sollte eine Meldung an den Benutzer ausgegeben werden und ggF später erneut versucht. + * + * @param funkspruch : String : Der zu sendede Funkspruch + * @param kenngruppe : String : Die Kenngruppe dieser Engima + * @return boolean : War das senden erfolgreich? True wenn ja, false wenn nicht erfolgreich + * @throws IOException + */ + public boolean sendeFunkspruch(String funkspruch, String kenngruppe) throws IOException { + boolean boolReturn = false; + HttpClient httpclient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost("https://enigma.itstall.de/"); + + // Anfrage Parameter und Encoding setzen + List<NameValuePair> params = new ArrayList<NameValuePair>(2); + params.add(new BasicNameValuePair("k", kenngruppe)); + params.add(new BasicNameValuePair("m", funkspruch)); + httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); + + // POST Request ausführen und Rückgabe verarbeiten + HttpResponse response = httpclient.execute(httppost); + HttpEntity entity = response.getEntity(); + + if (entity != null) { + BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent())); + JSONObject result = new JSONObject(reader.readLine()); + if(result.getInt("result") == 200) { + boolReturn = true; + } + } + + return boolReturn; + } +}