package eu.hgross.blaubot.core; import java.util.Timer; import java.util.TimerTask; import eu.hgross.blaubot.messaging.BlaubotChannelManager; import eu.hgross.blaubot.messaging.BlaubotMessage; /** * Helper object managing the keep alive message delivery at a fixed rate. * * @author Henning Gross {@literal (mail.to@henning-gross.de)} * */ public class KeepAliveSender { protected static final String LOG_TAG = "KeepAliveSender"; private final int keepAliveInterval; private final TimerTask timerTask; private Timer timer; public KeepAliveSender(final IBlaubotDevice device, final BlaubotChannelManager channelManager, int keepAliveInterval) { this.keepAliveInterval = keepAliveInterval; this.timerTask = new TimerTask() { @Override public void run() { final BlaubotMessage keepAliveMsg = new BlaubotMessage(); keepAliveMsg.getMessageType().setIsAdminMessage(false).setIsKeepAliveMessage(true).setContainsPayload(false).setIsFirstHop(false); channelManager.publishToSingleDevice(keepAliveMsg, device.getUniqueDeviceID()); } }; } public void stop() { if (this.timer != null) { this.timer.cancel(); this.timer = null; } } public void start() { if (this.timer != null) { stop(); } this.timer = new Timer(); this.timer.scheduleAtFixedRate(timerTask, keepAliveInterval, keepAliveInterval); } }