package resa.evaluation.topology.vld; 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 static resa.evaluation.topology.vld.Constant.*; /** * Created by ding on 14-7-3. */ public class ImageSource extends RedisQueueSpout { private long frameId; private String idPrefix; public ImageSource(String host, int port, String queue) { super(host, port, queue, true); } @Override public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) { super.open(conf, context, collector); this.collector = collector; frameId = 0; idPrefix = String.format("s-%02d-", context.getThisTaskIndex() + 1); } @Override protected void emitData(Object data) { String id = idPrefix + frameId++; collector.emit(STREAM_IMG_OUTPUT, new Values(id, data), id); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declareStream(STREAM_IMG_OUTPUT, new Fields(FIELD_FRAME_ID, FIELD_IMG_BYTES)); } }