/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package pt.isel.mpd14.alerter;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
/**
*
* @author Miguel Gamboa at CCISEL
*/
public class Alarm {
/*
* Cada evento é representado por um instante de tempo em Milisegundos
*/
private final SortedSet<Long> events = new TreeSet<>();
private final List<AlarmHandler> handlers = new LinkedList<>();
private int eventNr;
public void addEvent(long time) {
events.add(time);
}
public void start() {
Iterator<Long> iter = events.iterator();
Long instant = iter.hasNext() ? iter.next() : null;
while (instant != null) {
if (System.currentTimeMillis() >= instant) {
eventNr++;
notifyHanders();
iter.remove();
instant = iter.hasNext() ? iter.next() : null;
}
}
}
private void notifyHanders() {
handlers.stream().forEach(
h -> h.alert(new AlarmArgs(eventNr, System.currentTimeMillis()))
);
}
public void addHandler(AlarmHandler h){
handlers.add(h);
}
}