package net.sf.openrocket.simulation.listeners.system;
import net.sf.openrocket.simulation.SimulationStatus;
import net.sf.openrocket.simulation.exception.SimulationCancelledException;
import net.sf.openrocket.simulation.exception.SimulationException;
import net.sf.openrocket.simulation.listeners.AbstractSimulationListener;
/**
* A simulation listener that throws a {@link SimulationCancelledException} if
* this thread has been interrupted. The conditions is checked every time a step
* is taken.
*
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
public class InterruptListener extends AbstractSimulationListener {
public static final InterruptListener INSTANCE = new InterruptListener();
@Override
public void postStep(SimulationStatus status) throws SimulationException {
if (Thread.interrupted()) {
throw new SimulationCancelledException("The simulation was interrupted.");
}
}
@Override
public boolean isSystemListener() {
return true;
}
}