package edu.usc.enl.dynamicmeasurement.process; import edu.usc.enl.dynamicmeasurement.data.DataPacket; import edu.usc.enl.dynamicmeasurement.model.Packet; /** * Created with IntelliJ IDEA. * User: Masoud * Date: 1/31/13 * Time: 7:21 PM <br/> * A packet user that runs the step method upon receiving a packet of type EpochPacket. * * @see edu.usc.enl.dynamicmeasurement.process.EpochPacket */ public abstract class StepPacketUser extends PacketUser { public StepPacketUser() { } @Override public final void process(Packet p) { if (p instanceof EpochPacket) { doStep((EpochPacket) p); } else { process2(((edu.usc.enl.dynamicmeasurement.data.DataPacket) p)); } } /** * It is privat to force any subclass to step and reset together * * @param p */ private void doStep(EpochPacket p) { step(p); reset(); } /** * Asynchronously step and reset * * @param p */ public void forceStep(EpochPacket p) { doStep(p); } /** * Process a data packet * * @param p */ protected abstract void process2(DataPacket p); /** * An epoch is finished. * * @param p */ protected abstract void step(EpochPacket p); /** * Is called at the end of a step. Make sure you reset all the internal objects too */ protected void reset() { } }