package org.example.client; import java.util.Timer; import java.util.TimerTask; public abstract class AckWithTimeout implements Ack { private final long timeout; private final Timer timer = new Timer(); /** * * @param timeout delay in milliseconds */ public AckWithTimeout(long timeout) { this.timeout = timeout; } @Override public final void call(Object... args) { this.timer.cancel(); this.onSuccess(args); } public final void schedule(TimerTask task) { this.timer.schedule(task, this.timeout); } public final void cancelTimer() { this.timer.cancel(); } public abstract void onSuccess(Object... args); public abstract void onTimeout(); }