package oneapi.retriever; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import oneapi.client.impl.SMSMessagingClientImpl; import oneapi.exception.RequestException; import oneapi.listener.InboundMessageListener; import oneapi.model.common.InboundSMSMessageList; public class InboundMessageRetriever { private ScheduledExecutorService fScheduler; public void start(long interval, SMSMessagingClientImpl smsMessagingImpl) { this.stop(); if (interval <= 0) return; fScheduler = Executors.newScheduledThreadPool(1); // fire first inbound sms pull attempt after 2 sec and then each interval milliseconds Runnable poller = new PollerTask(smsMessagingImpl); fScheduler.scheduleWithFixedDelay(poller, 2000, interval, TimeUnit.MILLISECONDS); } public void stop() { if (fScheduler != null) { fScheduler.shutdown(); } } private static final class PollerTask implements Runnable { private SMSMessagingClientImpl smsMessagingImpl; public PollerTask(SMSMessagingClientImpl smsMessagingImpl) { this.smsMessagingImpl = smsMessagingImpl; } public void run() { List<InboundMessageListener> inboundMsglisteners = this.smsMessagingImpl.getInboundMessagePullListeners(); if ((inboundMsglisteners != null) && (inboundMsglisteners.size() > 0)) { // use pull method to gather incoming messages InboundSMSMessageList smsMessageList = new InboundSMSMessageList(); Throwable error = null; try { smsMessageList = smsMessagingImpl.getInboundMessages(); } catch (RequestException e) { error = e.getCause(); } if ((smsMessageList != null && smsMessageList.getInboundSMSMessage() != null && smsMessageList.getInboundSMSMessage().length > 0) || (error != null)) { this.fireMessageRetrieved(smsMessageList, inboundMsglisteners, error); } } } private void fireMessageRetrieved(InboundSMSMessageList smsMessageList, List<InboundMessageListener> listeners, Throwable error) { for (InboundMessageListener listener : listeners) { listener.onMessageRetrieved(smsMessageList, error); } } } }