/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.platform; import com.happydroids.HappyDroidConsts; import com.happydroids.droidtowers.gamestate.server.RunnableQueue; import com.happydroids.droidtowers.gamestate.server.TowerGameService; import org.apach3.http.HttpResponse; public class PlatformConnectionMonitor { protected RunnableQueue postConnectRunnables; private boolean networkState; public PlatformConnectionMonitor() { postConnectRunnables = new RunnableQueue(); monitorThread.start(); } public boolean isConnectedOrConnecting() { return networkState; } public void withConnection(Runnable runnable) { if (postConnectRunnables == null) { postConnectRunnables = new RunnableQueue(); } if (isConnectedOrConnecting()) { runnable.run(); } else { postConnectRunnables.push(runnable); } } protected void runAllPostConnectRunnables() { postConnectRunnables.runAll(); } public void dispose() { monitorThread = null; } @SuppressWarnings("FieldCanBeLocal") protected Thread monitorThread = new Thread(PlatformConnectionMonitor.class.getSimpleName()) { @Override public void run() { while (monitorThread == Thread.currentThread()) { try { HttpResponse response = TowerGameService.instance() .makeGetRequest(HappyDroidConsts.HAPPYDROIDS_URI + "/ping", null, false, -1); if (response != null) { networkState = response.getStatusLine().getStatusCode() == 200; if (networkState) { runAllPostConnectRunnables(); } } } catch (Throwable ignored) { networkState = false; } finally { try { Thread.sleep(HappyDroidConsts.HAPPYDROIDS_PING_FREQUENCY); } catch (InterruptedException ignored) { monitorThread = null; } } } } }; }