package com.kuxhausen.huemore.net.dev; import android.os.AsyncTask; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import java.lang.ref.WeakReference; /** * For generating fake messages on either side of the IPC between DeviceManager and DeviceServices */ public class NetExerciser extends AsyncTask<Messenger, Integer, Void> { WeakReference<Messenger> targetWeakReference, replyToWeakReference; @Override protected Void doInBackground(Messenger... param) { targetWeakReference = new WeakReference<>(param[0]); replyToWeakReference = new WeakReference<>(param[1]); for (int i = 0; i < 100; i++) { sleep(100 * Math.random()); publishProgress(i); } return null; } protected void onProgressUpdate(Integer... progress) { Message msg = Message.obtain(null, IpcMaster.MSG_DEBUG_PING, progress[0], 0); msg.replyTo = replyToWeakReference.get(); try { targetWeakReference.get().send(msg); } catch (RemoteException e) { e.printStackTrace(); DevLogger.debugLog("RemoteException"); } } protected void onPostExecute() { } public static void sleep(double duration) { try { Thread.sleep((int) duration, 0); } catch (InterruptedException e) { e.printStackTrace(); throw new RuntimeException("Sleep interupted"); } } public static void simulateWork(int maxMilliseconds) { sleep(Math.random() * maxMilliseconds); } public static void simulateCrash(double probability) { if (Math.random() < probability) { throw new RuntimeException("Simulated crash"); } } }