/*
* Copyright (C) 2014 TU Darmstadt, Hessen, Germany.
* Department of Computer Science Databases and Distributed Systems
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.tudarmstadt.dvs.myhealthassistant.myhealthhub.commontools;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;
import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.AbstractChannel;
import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.Event;
import de.tudarmstadt.dvs.myhealthassistant.myhealthhub.events.sensorreadings.cardiovascular.HeartRateEvent;
public class TrafficGenerator2 {
public String TAG = "TrafficGenerator2";
private boolean D = false;
private static int HR = 0;
/*private static int BP = 1;
private static int WEIGHT = 2;
private static int ACC_LEG = 3;*/
private static int SECOND = 1000;
private static Handler eventGeneratorHandler = new Handler();
private boolean isRunning;
private int round;
private int totalRound;
private int[][] messagesPerSecond;
private Context ctx;
private int eventNumber;
protected String myHealthHubReceiver = AbstractChannel.RECEIVER;
private SimpleDateFormat df = new java.text.SimpleDateFormat("dd MMM yyyy hh:mm:ss");
public TrafficGenerator2(int instance, int[][] msgsPerSecond, Context ctx) {
TAG += "_"+instance;
this.isRunning = false;
this.messagesPerSecond = msgsPerSecond;
this.ctx = ctx;
/* set time zone */
df.setTimeZone(TimeZone.getTimeZone("gmt"));
}
public void startRound(int i, int j) {
eventNumber = 0;
round = i;
totalRound = j;
//hr_counter = 0;
isRunning = true;
if(messagesPerSecond[round][HR]!=0) generateEventsHR.run();
/*if(messagesPerSecond[round][BP]!=0) generateEventsBP.run();
if(messagesPerSecond[round][WEIGHT]!=0) generateEventsWeight.run();
if(messagesPerSecond[round][ACC_LEG]!=0) generateEventsAccLeg.run();*/
}
public void stop() {
isRunning = false;
}
private Runnable generateEventsHR = new Runnable() {
public void run() {
if (isRunning) {
eventGeneratorHandler.postDelayed(generateEventsHR, SECOND
/ messagesPerSecond[round][HR]);
/* generate event */
HeartRateEvent evt = new HeartRateEvent(TAG+"_HR_"+round+"_"+eventNumber, getGMTTime(),
"EventGenerator", "EventGenerator", totalRound+"",
getRandomNumber(55, 180));
Intent i = new Intent();
i.putExtra("event_type", evt.getEventType());
i.putExtra("event", evt);
i.setAction(myHealthHubReceiver);
ctx.sendBroadcast(i);
}
}
};
public int getRandomNumber(int min, int max) {
//Random randomGenerator = new Random();
//return randomGenerator.nextInt(max-min)+min;
return eventNumber++;
}
private void injectEvent(Event evt) {
if(D)Log.d(TAG, "injectEvent of type: "+evt.getEventType());
Intent i = new Intent();
i.putExtra("event_type", evt.getEventType());
i.putExtra("event", evt);
i.setAction(myHealthHubReceiver);
ctx.sendBroadcast(i);
}
private String getGMTTime() {
return df.format(new Date());
}
}