X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Freactor%2Fengine%2FEngine.java;h=64544194e8cd105731d7647dca84b2e59625b81b;hb=346b1359e97918e3ee8ef29240c7709abd9edd85;hp=123781f0d04af1bb7282c043f4e47dfe008d24d0;hpb=631eb5a4e09bea50955554b982c67fc9a0ff3abd;p=rhynodge.git diff --git a/src/main/java/net/pterodactylus/reactor/engine/Engine.java b/src/main/java/net/pterodactylus/reactor/engine/Engine.java index 123781f..6454419 100644 --- a/src/main/java/net/pterodactylus/reactor/engine/Engine.java +++ b/src/main/java/net/pterodactylus/reactor/engine/Engine.java @@ -22,10 +22,12 @@ import java.util.Set; import java.util.SortedMap; import java.util.concurrent.TimeUnit; +import net.pterodactylus.reactor.Filter; import net.pterodactylus.reactor.Query; import net.pterodactylus.reactor.Reaction; import net.pterodactylus.reactor.Trigger; import net.pterodactylus.reactor.states.AbstractState; +import net.pterodactylus.reactor.states.FailedState; import org.apache.log4j.Logger; @@ -121,6 +123,9 @@ public class Engine extends AbstractExecutionThreadService { try { logger.debug("Querying system..."); state = query.state(); + if (state == null) { + state = FailedState.INSTANCE; + } logger.debug("System queried."); } catch (Throwable t1) { logger.warn("Querying system failed!", t1); @@ -129,12 +134,23 @@ public class Engine extends AbstractExecutionThreadService { }; } logger.debug(String.format("State is %s.", state)); - reactionExecution.addState(state); + + /* convert states. */ + for (Filter filter : nextReaction.filters()) { + if (state.success()) { + net.pterodactylus.reactor.State newState = filter.filter(state); + logger.debug(String.format("Old state is %s, new state is %s.", state, newState)); + state = newState; + } + } + if (state.success()) { + reactionExecution.addState(state); + } /* only run trigger if we have collected two states. */ + Trigger trigger = nextReaction.trigger(); boolean triggerHit = false; if (reactionExecution.previousState() != null) { - Trigger trigger = nextReaction.trigger(); logger.debug("Checking Trigger for changes..."); triggerHit = trigger.triggers(reactionExecution.currentState(), reactionExecution.previousState()); } @@ -143,8 +159,9 @@ public class Engine extends AbstractExecutionThreadService { logger.debug(String.format("Trigger was hit: %s.", triggerHit)); if (triggerHit) { logger.info("Executing Action..."); - nextReaction.action().execute(reactionExecution.currentState(), reactionExecution.previousState()); + nextReaction.action().execute(trigger.trigger()); } + } }