package resa.evaluation.topology.tomVLD;

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.tomVLD.Constants.FIELD_SIGNAL_TYPE;
import static resa.evaluation.topology.tomVLD.Constants.SIGNAL_STREAM;

/**
 * Updated on Aug 5,  the way to handle frame sampling issue is changed, this is pre-processed by the spout not to
 * send out unsampled frames to the patch generation bolt.
 * also binding to ImageSenderFox!
 */
public class SignalSpoutFromRedis extends RedisQueueSpout {

    public SignalSpoutFromRedis(String host, int port, String queue) {
        super(host, port, queue, false);
    }

    @Override
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
        super.open(conf, context, collector);
        this.collector = collector;
    }

    @Override
    protected void emitData(Object data) {
        long now = System.currentTimeMillis();
        collector.emit(SIGNAL_STREAM, new Values(data), now);
        System.out.printf("SendoutSignal: " + now + "," + data.toString());
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declareStream(SIGNAL_STREAM, new Fields(FIELD_SIGNAL_TYPE));
    }
}
