From c3fb92d6eb1fef17b022db419d0eb2b9acf8f8ee Mon Sep 17 00:00:00 2001 From: lukas-heiligenbrunner Date: Sun, 12 Jan 2020 13:22:31 +0100 Subject: [PATCH] * changed city zone handling to server instead of pcb --- src/java/com/wasteinformationserver/main.java | 22 +++---- .../mqtt/MqttService.java | 66 +++++++++++-------- 2 files changed, 48 insertions(+), 40 deletions(-) diff --git a/src/java/com/wasteinformationserver/main.java b/src/java/com/wasteinformationserver/main.java index e1b163f..0e168e9 100644 --- a/src/java/com/wasteinformationserver/main.java +++ b/src/java/com/wasteinformationserver/main.java @@ -14,7 +14,7 @@ public class main { Log.setLevel(Log.DEBUG); Log.info("startup of WasteInformationServer"); - Log.info("mem: "+Runtime.getRuntime().totalMemory()); + Log.info("mem: " + Runtime.getRuntime().totalMemory()); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { @@ -33,15 +33,13 @@ public class main { //initial connect to db Log.message("initial login to db"); - new Thread(() -> { - try { - JDCB.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306); - //JDCB.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306); - } catch (IOException e) { - //e.printStackTrace(); - Log.error("no connection to db"); - } - }).start(); + try { + JDCB.init("ingproject", "Kb9Dxklumt76ieq6", "ingproject", "db.power4future.at", 3306); + //JDCB.init("users", "kOpaIJUjkgb9ur6S", "wasteinformation", "192.168.65.15", 3306); + } catch (IOException e) { + //e.printStackTrace(); + Log.error("no connection to db"); + } //startup web server @@ -52,12 +50,12 @@ public class main { //startup mqtt service Log.message("starting mqtt service"); try { - MqttService m = new MqttService("mqtt.heili.eu","1883"); + MqttService m = new MqttService("mqtt.heili.eu", "1883"); m.startupService(); } catch (Exception e) { Log.error("An error occured in the class mqtt"); } - Log.info("mem: "+Runtime.getRuntime().totalMemory()); + Log.info("mem: " + Runtime.getRuntime().totalMemory()); } } \ No newline at end of file diff --git a/src/java/com/wasteinformationserver/mqtt/MqttService.java b/src/java/com/wasteinformationserver/mqtt/MqttService.java index 999dc31..c5cee33 100644 --- a/src/java/com/wasteinformationserver/mqtt/MqttService.java +++ b/src/java/com/wasteinformationserver/mqtt/MqttService.java @@ -14,9 +14,15 @@ import java.util.Date; public class MqttService { private MqttClient client = null; private String serveruri; + JDCB db; public MqttService(String serverurl, String port) { - serveruri= "tcp://"+serverurl+":"+port; + serveruri = "tcp://" + serverurl + ":" + port; + try { + db = JDCB.getInstance(); + } catch (IOException e) { + e.printStackTrace(); + } } public void startupService() { @@ -31,6 +37,7 @@ public class MqttService { @Override public void connectionLost(Throwable throwable) { Log.error("connection lost"); + // TODO: 12.01.20 reconnect } @Override @@ -38,11 +45,27 @@ public class MqttService { String message = new String(mqttMessage.getPayload()); Log.info("received Request from PCB"); - Log.debug("received message"); - String[] split = message.split(","); - String wastetyp = getTyp(Integer.parseInt(split[2])); - // TODO: 12.01.20 check if id is in db -- save when not - checkDatabase(wastetyp, Integer.parseInt(split[0]), split[1], Integer.parseInt(split[3])); + ResultSet res = db.executeQuery("SELECT * from devices WHERE DeviceID=" + message); + try { + res.last(); + if (res.getRow() != 0) { + //existing device + res.first(); + int cityid = res.getInt("CityID"); + if (cityid == -1) { + //device not configured yet + tramsmitMessage(message + ",-1"); + } else { + checkDatabase(Integer.parseInt(message)); + } + } else { + //new device + db.executeUpdate("INSERT INTO devices (DeviceID) VALUES (" + message + ")"); + tramsmitMessage(message + ",-1"); + } + } catch (SQLException e) { + e.printStackTrace(); + } } @Override @@ -56,26 +79,15 @@ public class MqttService { } } - public void checkDatabase(String wastetyp, int clientidentify, String cityname, int zone) { - Log.debug(wastetyp); - Log.debug(clientidentify); - - JDCB Database = null; - try { - Database = JDCB.getInstance(); - } catch (IOException e) { - Log.error("No Connection to the databank"); - } - int wastenumber = getIntTyp(wastetyp); - - ResultSet result = Database.executeQuery("SELECT pickupdates.pickupdate FROM pickupdates WHERE pickupdates.citywastezoneid=(SELECT cities.id FROM cities WHERE cities.name='" + cityname + "' AND cities.wastetype='" + wastetyp + "' AND cities.zone=" + zone + ")"); + public void checkDatabase(int deviceid) { + ResultSet result = db.executeQuery("SELECT pickupdates.pickupdate FROM pickupdates WHERE pickupdates.citywastezoneid=" + deviceid); try { result.last(); - if (result.getRow() == 0){ + if (result.getRow() == 0) { //if not found in db --> send zero Log.debug("not found in db"); - tramsmitMessage(clientidentify + "," + wastenumber + "," + 0); - }else{ + tramsmitMessage(deviceid + "," + "Plastic" + "," + 0); + } else { Log.debug(result.getString("pickupdate")); result.first(); @@ -87,16 +99,14 @@ public class MqttService { if (timestamp == timestampnow || timestamp == timestampnow + 86400000) { // 86400000 == one day // valid time - tramsmitMessage(clientidentify + "," + wastenumber + "," + 1); + tramsmitMessage(deviceid + "," + "Plastic" + "," + 1); Log.debug("valid time"); return; } - }while(result.next()); - tramsmitMessage(clientidentify + "," + wastenumber + "," + 0); //transmit zero if not returned before + } while (result.next()); + tramsmitMessage(deviceid + "," + "Plastic" + "," + 0); //transmit zero if not returned before } - } catch (SQLException e) { - e.printStackTrace(); - } catch (ParseException e) { + } catch (SQLException | ParseException e) { e.printStackTrace(); } }