package resa.evaluation.simulate;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Tuple;
import java.util.Map;
/**
* Created by ding on 14-1-27.
*/
public abstract class TASleepBolt extends BaseRichBolt {
protected transient OutputCollector collector;
private IntervalSupplier sleep;
public TASleepBolt(IntervalSupplier sleep) {
this.sleep = sleep;
}
public TASleepBolt() {
this.sleep = () -> 0L;
}
protected void setIntervalSupplier(IntervalSupplier sleep) {
this.sleep = sleep;
}
@Override
public void prepare(Map map, TopologyContext context, OutputCollector outputCollector) {
this.collector = outputCollector;
}
@Override
public void execute(Tuple tuple) {
long inter = this.sleep.get();
if (inter > 0) {
performSleep(inter);
}
}
private void performSleep(long interval) {
long stop = System.currentTimeMillis() + interval;
do {
for (int i = 0; i < 100; i++) {
Math.sqrt(Math.random() * Integer.MAX_VALUE);
}
} while (System.currentTimeMillis() < stop);
}
}