package benchmark; import commands.ClientCommand; import commands.Command; import commands.ReplicaCommand; import process_handlers.ProcessHandler; public class DefaultProcessListener implements ProcessListener { Benchmark benchmark; Scheduler scheduler; private final MyLogger logger; public DefaultProcessListener(Benchmark benchmark, Scheduler scheduler, MyLogger logger) { this.benchmark = benchmark; this.scheduler = scheduler; this.logger = logger; } @Override public void processFinished(ProcessHandler processHandler) { logger.processStopped(processHandler); benchmark.processStopped(processHandler); checkEvent(processHandler); } @Override public void errorCaught(ProcessHandler processHandler) { logger.errorCaught(processHandler); benchmark.forceStop(); } @Override public void clientSent(ProcessHandler processHandler) { logger.clientSent(processHandler); checkEvent(processHandler); } private synchronized void checkEvent(ProcessHandler processHandler) { Command c = processHandler.getLastCommand(); if (c == null) return; String event = c.eventName(); if (event == null) return; if (c instanceof ClientCommand) { ((ClientCommand) c).numberOfTargets--; if (((ClientCommand) c).numberOfTargets == 0) { scheduler.eventOccured(event); } } else if (c instanceof ReplicaCommand) scheduler.eventOccured(event); } public void processCreated(ProcessHandler processHandler) { checkEvent(processHandler); } }