diff --git a/src/se/hal/HalServer.java b/src/se/hal/HalServer.java index 92b6c2f1..37417640 100755 --- a/src/se/hal/HalServer.java +++ b/src/se/hal/HalServer.java @@ -20,12 +20,16 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; /** - * Created by Ziver on 2015-12-03. + * Main class for Hal */ public class HalServer { - - private static List daemons; - private static List pages; + + private static ScheduledExecutorService daemonExecutor; + private static List daemons = new ArrayList<>(); + + private static HttpServer http; + private static List pages = new ArrayList<>(); + public static void main(String[] args) throws Exception { @@ -53,32 +57,34 @@ public class HalServer { // init daemons - daemons = new ArrayList<>(); - for (Iterator it=pluginManager.getObjectIterator(HalDaemon.class); it.hasNext(); ) - daemons.add(it.next()); // We set only one thread for easier troubleshooting - ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - for(HalDaemon daemon : daemons){ - daemon.initiate(executor); - } + daemonExecutor = Executors.newScheduledThreadPool(1); + for (Iterator it=pluginManager.getObjectIterator(HalDaemon.class); it.hasNext(); ) + registerDaemon(it.next()); // init http server HalHttpPage.getRootNav().createSubNav("Sensors"); HalHttpPage.getRootNav().createSubNav("Events").setWeight(100); - pages = new ArrayList<>(); - for (Iterator it = pluginManager.getObjectIterator(HalJsonPage.class); it.hasNext(); ) - pages.add(it.next()); - for (Iterator it=pluginManager.getObjectIterator(HalHttpPage.class); it.hasNext(); ) - pages.add(it.next()); - HttpServer http = new HttpServer(HalContext.getIntegerProperty("http_port")); + http = new HttpServer(HalContext.getIntegerProperty("http_port")); http.setDefaultPage(new HttpFilePage(FileUtil.find("resource/web/"))); http.setPage("/", new HttpRedirectPage("/map")); http.setPage(HalAlertManager.getInstance().getUrl(), HalAlertManager.getInstance()); - for(HalHttpPage page : pages){ - http.setPage(page.getId(), page); - } + for (Iterator it = pluginManager.getObjectIterator(HalJsonPage.class); it.hasNext(); ) + registerPage(it.next()); + for (Iterator it=pluginManager.getObjectIterator(HalHttpPage.class); it.hasNext(); ) + registerPage(it.next()); http.start(); } + + + public static void registerDaemon(HalDaemon daemon){ + daemons.add(daemon); + daemon.initiate(daemonExecutor); + } + public static void registerPage(HalHttpPage page){ + pages.add(page); + http.setPage(page.getId(), page); + } } diff --git a/src/se/hal/TriggerManager.java b/src/se/hal/TriggerManager.java index 61c4a454..20d4ae53 100755 --- a/src/se/hal/TriggerManager.java +++ b/src/se/hal/TriggerManager.java @@ -9,6 +9,9 @@ import zutil.plugin.PluginManager; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; import java.util.logging.Logger; @@ -17,14 +20,28 @@ import java.util.logging.Logger; */ public class TriggerManager { private static final Logger logger = LogUtil.getLogger(); + private static final long EVALUATION_INTERVAL = 5 * 1000; private static TriggerManager instance; private ArrayList> availableTriggers = new ArrayList<>(); private ArrayList> availableActions = new ArrayList<>(); private ArrayList triggerFlows = new ArrayList<>(); + private ScheduledExecutorService executor; + public void setEvaluationInterval(long interval) { + if (executor != null) + executor.shutdownNow(); + executor = Executors.newScheduledThreadPool(1); + executor.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + evaluateAndExecute(); + } + }, 0, interval, TimeUnit.MILLISECONDS); + } + public void addAvailableTrigger(Class clazz) { if ( ! availableTriggers.contains(clazz)) @@ -48,7 +65,6 @@ public class TriggerManager { } - /** * Main execution method. * This method will go through all flows and evaluate them. If the @@ -66,25 +82,24 @@ public class TriggerManager { } - - public static void initialize(PluginManager pluginManager){ + public static void initialize(PluginManager pluginManager) { TriggerManager manager = new TriggerManager(); for (Iterator> it = pluginManager.getClassIterator(HalTrigger.class); - it.hasNext(); ){ + it.hasNext(); ) { manager.addAvailableTrigger(it.next()); } for (Iterator> it = pluginManager.getClassIterator(HalAction.class); - it.hasNext(); ){ + it.hasNext(); ) { manager.addAvailableAction(it.next()); } + manager.setEvaluationInterval(EVALUATION_INTERVAL); instance = manager; } public static TriggerManager getInstance(){ return instance; } - }