package fi.iki.mkuokkanen.seda.timed;
import fi.iki.mkuokkanen.seda.queue.QueueIn;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Schedules events. At this time only broadcast events.
*
* @author mkuokkanen
*/
class EventSchedulerImpl implements EventScheduler {
private static final int POOL_SIZE = 5;
private static Logger logger = LoggerFactory.getLogger(EventSchedulerImpl.class);
private final ScheduledThreadPoolExecutor stpe;
private final QueueIn queue;
/**
* Default constructor
*
* @param queue
*/
@Inject
public EventSchedulerImpl(QueueIn queue) {
this.queue = checkNotNull(queue);
this.stpe = new ScheduledThreadPoolExecutor(POOL_SIZE);
}
@Override
public void start() {
logger.info("start() - timed operations");
stpe.scheduleAtFixedRate(
new BroadcastPublisher(queue),
5,
1,
TimeUnit.SECONDS);
}
@Override
public void stop() {
logger.info("stop() - timed operations");
stpe.shutdownNow();
logger.info("scheduler shut down: {}", stpe.isShutdown());
}
}