/** * RBNBServerHelper.java * * Help for the DT server. It starts thread for: * Check if the DT server is running * Stop the DT server * Start the DT server * * @author Gesuri Ramirez, Peter Shin * @date July 2012 */ package org.cleos.dataturbine; import android.util.Log; import com.rbnb.api.Server; public class RBNBServerHelper { private String TAG = "RBNBServerHelper"; private Server rbnbServer; private boolean isRunning; public RBNBServerHelper(Server ser) { this.isRunning = false; this.rbnbServer = ser; } private void sleep(int ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { Log.d(TAG + "::sleeping", "exception caught: " + e.toString()); } } // -------------------------------- // Checking if the rbnb server is running public boolean isServerRunning(Server server) { this.server = server; new CheckIfServerIsRunning().start(); sleep(500); return isRunning; } public class CheckIfServerIsRunning extends Thread { @Override public void run() { isRunning = server != null && server.isRunning(); return; } } // --------------------------------------------------- // Stop the rbnb server Server server; public void stopRBNBServer(Server server) { this.server = server; new StopRBNBServer().run(); } private class StopRBNBServer extends Thread { private String tag = TAG + "::Stop"; @Override public void run() { if (server != null) try { server.stop(); if (server.isRunning()) { Log.i(tag, "server.stop() is called, but it's still running"); } else { Log.i(tag, "server is not running after the stop()"); } } catch (Exception e) { Log.e(tag, Log.getStackTraceString(e)); } return; } } // ------------------------------------------------- // Starting the rbnb server String[] args; public Server startRNBNServer(String[] args) { this.args = args; StartRBNBServer starter = new StartRBNBServer(); starter.start(); sleep(5000); waitUntilStart(); return this.rbnbServer; } private class StartRBNBServer extends Thread { private String tag = TAG + "::Start"; @Override public void run() { if (rbnbServer != null) { try { rbnbServer.stop(); Log.i(tag, "rbnbServer was stoped for first time."); } catch (Exception e) { Log.e(tag, "Exception in stopping (first time) a server.", e); } } try { rbnbServer = Server.launchNewServer(args); Log.i(tag, "rbnbServer was launched for first time."); } catch (Exception e) { Log.e(tag, "Exception on launchNewServer (first time)."); } waitUntilStart(); try { rbnbServer.stop(); Log.i(tag, "rbnbServer was stoped for second time."); } catch (Exception e) { Log.e(tag, "Exception in stopping (second time) a server."); } try { rbnbServer = Server.launchNewServer(args); Log.i(tag, "rbnbServer was launched for second time."); } catch (Exception e) { Log.e(tag, "Exception on launchNewServer for the second time."); } waitUntilStart(); return; } }// end class StartRBNBServer protected void waitUntilStart() { int t = 0; while (t < 20) { try { if (rbnbServer != null && rbnbServer.isRunning()) { Log.i(TAG + "::waitUntil", "rbnbServer is up and running."); break; } else { Thread.sleep(250); t++; } } catch (Exception e) { Log.e(TAG + "::waitUntil", "Exception in isRunning()." + e.toString()); break; } } } }