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 newest message and discards all older messages. */ public class DiscardOldPickerStrategy implements IBlaubotMessagePickerStrategy { @Override public BlaubotMessage pickNextMessage(BlockingQueue<BlaubotMessage> messageQueue) { List<BlaubotMessage> oldmessages = new ArrayList<>(); BlaubotMessage blaubotMessage; try { blaubotMessage = messageQueue.poll(POLL_TIMEOUT, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { return null; } if (blaubotMessage == null) { return null; } oldmessages.add(blaubotMessage); messageQueue.drainTo(oldmessages); BlaubotMessage queuedMessage = null; if (!oldmessages.isEmpty()) { queuedMessage = oldmessages.get(oldmessages.size() - 1); } return queuedMessage; } @Override public BlaubotChannelConfig.MessagePickerStrategy getConstant() { return BlaubotChannelConfig.MessagePickerStrategy.DISCARD_OLD; } }