/** Copyright 2015 Tim Engler, Rareventure LLC This file is part of Tiny Travel Tracker. Tiny Travel Tracker is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Tiny Travel Tracker is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Tiny Travel Tracker. If not, see <http://www.gnu.org/licenses/>. */ /** * */ package com.rareventure.android; import java.util.ArrayList; import org.acra.ErrorReporter; import android.content.Context; import com.rareventure.gps2.GTG; import com.rareventure.gps2.GTG.GTGEvent; public class ProcessThread extends WorkerThread { private DataReader[] dataReaders; private String tag; private Context context; public ProcessThread(Context context, String tag, DataReader ... dataReaders) { super(); this.context = context; this.tag = tag; this.dataReaders = dataReaders; for(DataReader dr : dataReaders) { dr.setProcessThread(this); } } public void run() { try { ArrayList<DataReader> itemsToProcess = new ArrayList<DataReader>(); while(true) { itemsToProcess.clear(); synchronized(lock) { //wait for data while(!isShutdownRequested) { for(DataReader rt : dataReaders) { if(rt.canProcess()) { itemsToProcess.add(rt); } } if(itemsToProcess.isEmpty()) { try { lock.wait(); } catch (InterruptedException e) { throw new IllegalStateException(e); //punt } } else break; } //while waiting for data } //sync lock if(isShutdownRequested) break; for(DataReader dr : itemsToProcess) { dr.process(); } } //end while running for(DataReader dr : dataReaders) { dr.notifyShutdown(); } synchronized(lock) { isShutdown = true; lock.notify(); } } catch(Exception e) { e.printStackTrace(); GTG.alert(GTGEvent.ERROR_SERVICE_INTERNAL_ERROR); ErrorReporter.getInstance().handleException(e); synchronized(lock) { isShutdown = true; lock.notify(); } return; } } // void run() }