package eu.hgross.blaubot.messaging; import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; /** * Picks messages from the given queue. * On each pick, it picks the oldest message and discards all newer messages. */ public class DiscardNewPickerStrategy implements IBlaubotMessagePickerStrategy { @Override public BlaubotMessage pickNextMessage(BlockingQueue<BlaubotMessage> messageQueue) { List<BlaubotMessage> messages = new ArrayList<>(); BlaubotMessage blaubotMessage; try { blaubotMessage = messageQueue.poll(POLL_TIMEOUT, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { return null; } if (blaubotMessage == null) { return null; } messageQueue.drainTo(messages); BlaubotMessage queuedMessage = null; if (!messages.isEmpty()) { queuedMessage = messages.get(0); } return queuedMessage; } @Override public BlaubotChannelConfig.MessagePickerStrategy getConstant() { return BlaubotChannelConfig.MessagePickerStrategy.DISCARD_NEW; } }