Skip to content
Snippets Groups Projects
Esecutore.java 2.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • Elisa Giglio's avatar
    Elisa Giglio committed
    import java.io.IOException;
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    import java.time.Duration;
    import java.time.LocalDateTime;
    
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    
    public class Esecutore extends Thread {
    	
    	private MyQueue<Integer> codaVal; // coda in cui vengono mantenuti i valori da sommare alla variabile valore
    	private int valore; // variabile numerica cumulativa inizialmente impostata a 0
    	public final int SOGLIA = 100;
    	private Publisher publisher;
    	private Automa automa;
    	private String outputSuono; // nome logico dell'interruttore che fa scattare il suono dell'allarme 
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    	private LocalDateTime tempoAllarme; //valorizzato solo quando l'allarme sta suonando. Contiene l'ora in cui l'allarme ha iniziato a suonare 
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    	
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    	public Esecutore(Publisher publisher, MyQueue<Integer> codaVal, Automa automa, String outputSuono) throws JSONException, IOException {
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    		this.codaVal = codaVal;
    		this.automa = automa;
    		this.publisher = publisher;
    		this.outputSuono = outputSuono;
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    		
    		JSONObject statoJson = new JSONObject(Helper.leggiFile(Automa.FILE_STATO));
    		this.valore = statoJson.getInt("valore");
    		if(statoJson.getInt("stato")==2)
    			this.tempoAllarme = LocalDateTime.parse(statoJson.getString("tempoAllarme"));
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    	}
    	
    	
    	public void run() {
    		final long DURATA_SUONO = 5; // l'allarme dura 5 minuti e poi smette di suonare
    		int delta;
    		while(true) {
    			while(automa.antifurtoAttivo()) { System.out.println("VALORE = "+ valore);
    				delta = codaVal.receive();
    				valore = valore + delta;
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    				
    				try {
    					Helper.modificaFileStato(codaVal, false, delta, valore, Automa.FILE_STATO);
    					if(valore >= SOGLIA && (!automa.allarme()) ) {	
    						publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+outputSuono, "{cmd:1}");
    						tempoAllarme = LocalDateTime.now();
    						JSONObject statoJson = new JSONObject(Helper.leggiFile(Automa.FILE_STATO));
    						Helper.scriviFile(statoJson.put("tempoAllarme",tempoAllarme.toString()), Automa.FILE_STATO);
    					}
    					else {
    						if(automa.allarme()) {
    							LocalDateTime tempoAttuale = LocalDateTime.now();
    							long durata = Math.abs(Duration.between(tempoAllarme, tempoAttuale).toMinutes());
    							if(valore < SOGLIA || durata >= DURATA_SUONO || !automa.antifurtoAttivo() ) {
    								publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+outputSuono, "{cmd:0}"); // l'allarme viene disattivato
    							}
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    						}
    					}
    				}
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    				catch (JSONException e) {
    					e.printStackTrace();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    				
    			}
    			if(!automa.antifurtoAttivo()) {
    				reset();
    			}
    		}
    	}
    
    	
    	public void aggiungiVal(int n) {
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    		Helper.modificaFileStato(true, n, Automa.FILE_STATO);
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    		codaVal.send(n);
    	}
    	
    	public void reset() {
    		valore = 0;
    		codaVal.removeAll();
    	}
    	
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    	
    	
    
    Elisa Giglio's avatar
    Elisa Giglio committed
    }