import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
import net.pterodactylus.rhynodge.Reaction;
+import net.pterodactylus.rhynodge.actions.EmailAction;
import net.pterodactylus.rhynodge.states.StateManager;
/**
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
+@Singleton
public class Engine {
private final StateManager stateManager;
private final ScheduledExecutorService executorService;
private final Map<String, Future<?>> scheduledFutures = new ConcurrentHashMap<>();
+ private final EmailAction errorEmailAction;
- /**
- * Creates a new engine.
- *
- * @param stateManager
- * The state manager
- */
- public Engine(StateManager stateManager) {
+ @Inject
+ public Engine(StateManager stateManager, EmailAction errorEmailAction) {
this.stateManager = stateManager;
- executorService = new ScheduledThreadPoolExecutor(10);
+ this.errorEmailAction = errorEmailAction;
+ executorService = new ScheduledThreadPoolExecutor(1);
}
//
Optional<net.pterodactylus.rhynodge.State> lastState = reactionState.loadLastState();
long lastExecutionTime = lastState.map(net.pterodactylus.rhynodge.State::time).orElse(0L);
long nextExecutionTime = lastExecutionTime + reaction.updateInterval();
- ReactionRunner reactionRunner = new ReactionRunner(reaction, reactionState);
+ ReactionRunner reactionRunner = new ReactionRunner(reaction, reactionState, errorEmailAction);
ScheduledFuture<?> future = executorService.scheduleWithFixedDelay(reactionRunner, nextExecutionTime - currentTimeMillis(), reaction.updateInterval(), MILLISECONDS);
scheduledFutures.put(name, future);
}