package code; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.time.LocalTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Executor; import org.eclipse.paho.client.mqttv3.MqttException; import org.json.JSONException; import org.json.JSONObject; public class Esecutore /* extends Thread */ { private final Luci luci; static Timer timer; public Boolean running; private static Esecutore istanza = null;// static ArrayList<Luce> j = new ArrayList<Luce>(); // arraylist mi serve per sapere se una luce era accesa manualmente. Se la era // non la spengo quando scade il timer private Esecutore(Luci luci) throws IOException, JSONException { this.luci = luci; } public static Esecutore istanziatore(Luci l) throws IOException, JSONException { if (istanza == null) { istanza = new Esecutore(l); } return istanza; } class AccendiTutto extends TimerTask { // boolean running=false; int durata = 5; ArrayList<Luce> j; public AccendiTutto(ArrayList j) { this.j = j; } public void run() { System.out.println("-----" + durata); if (durata > 0) { String req = "{cmd:1}"; for (Luce k : Luci.luciList) { try { luci.sendMqttMessage(Luci.getMqttTree("to", "gpio/" + k.getOUT()), req); } catch (MqttException e) { // TODO Auto-generated catch block e.printStackTrace(); } } durata--; } else { System.out.println("FINE!" + running); String req = "{cmd:0}"; for (Luce k : Luci.luciList) { if (!j.contains(k)) { k.setStato(false); try { luci.sendMqttMessage(Luci.getMqttTree("to", "gpio/" + k.getOUT()), req); } catch (MqttException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } j.clear(); timer.cancel(); timer.purge(); Subscriber.runningEsec = false; } } } public void run(Boolean running) { timer = new Timer(); AccendiTutto a = new AccendiTutto(j); this.running = running; timer.schedule(a, 0, 1000); } }