⬆️ Update a bunch of dependencies
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / engine / Engine.java
index 5c289c5..99eff2f 100644 (file)
@@ -28,7 +28,11 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+
 import net.pterodactylus.rhynodge.Reaction;
+import net.pterodactylus.rhynodge.actions.EmailAction;
 import net.pterodactylus.rhynodge.states.StateManager;
 
 /**
@@ -36,21 +40,19 @@ 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);
        }
 
        //
@@ -70,7 +72,7 @@ public class Engine {
                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);
        }