package edu.usc.enl.dynamicmeasurement.algorithms.transform; import edu.usc.enl.dynamicmeasurement.data.DataPacket; import edu.usc.enl.dynamicmeasurement.data.FinishPacket; import edu.usc.enl.dynamicmeasurement.process.EpochPacket; import edu.usc.enl.dynamicmeasurement.process.PacketUser; /** * Created with IntelliJ IDEA. * User: masoud * Date: 8/4/13 * Time: 4:58 PM <br/> * A special packet pipe that generates epoch messages based on the timestamp of input packets. * It uses the timestamp of the first packet as the base and generates steps if the incoming packets have timestamp * diff larger than stepsDuration */ public class EpochPacer extends PacketPipe { private long stepsDuration = -1; private long lastTime = -1; private int step = 0; public EpochPacer(PacketUser nextUser, long stepsDuration) { super(nextUser); this.stepsDuration = stepsDuration; } @Override protected void process2(DataPacket p) { if (lastTime < 0) { lastTime = (p.getTime() / stepsDuration) * stepsDuration; } while (p.getTime() >= lastTime + stepsDuration) { // System.out.println("Epoch: " + step); passPacket(new EpochPacket(lastTime + stepsDuration, step)); lastTime = lastTime + stepsDuration; step++; } passPacket(p); } @Override protected void step(EpochPacket p) { System.err.println("Epoch pacer got Epoch packet!! " + p); } @Override public void finish(FinishPacket p) { //System.out.println("Epoch: " + step); passPacket(new EpochPacket(p.getTime(), step)); super.finish(p); } }