package resa.evaluation.simulate.sleep;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import resa.topology.RedisQueueSpout;
import java.util.Map;
import java.util.Random;
public class TASentenceSpout2Path extends RedisQueueSpout {
private transient long count = 0;
private String spoutIdPrefix = "s-2Path";
private transient Random rand;
private double p;
public TASentenceSpout2Path(String host, int port, String queue, double p) {
super(host, port, queue);
this.p = p;
}
@Override
public void open(Map map, TopologyContext context, SpoutOutputCollector collector) {
super.open(map, context, collector);
spoutIdPrefix = spoutIdPrefix + context.getThisTaskId() + '-';
rand = new Random();
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
///declarer.declare(new Fields("sid", "sentence"));
declarer.declareStream("Bolt-P", new Fields("sid", "sentence"));
declarer.declareStream("Bolt-NotP", new Fields("sid", "sentence"));
}
@Override
protected void emitData(Object data) {
String id = spoutIdPrefix + count;
count++;
double prob = rand.nextDouble();
if (prob < this.p){
collector.emit("Bolt-P", new Values(id, data), id);
}
else{
collector.emit("Bolt-NotP", new Values(id, data), id);
}
}
@Override
public void ack(Object msgId) {
}
@Override
public void fail(Object msgId) {
}
}