package org.async.rmi;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
/**
* Created by Barak Bar Orion
* 12/17/14.
*/
@SuppressWarnings("WeakerAccess")
public class CancelCounterServer implements CancelCounter {
private volatile List<CompletableFuture<Void>> futures;
public CancelCounterServer() {
futures = new ArrayList<>();
}
//@Trace(TraceType.DETAILED)
@Override
public CompletableFuture<Void> get() {
CompletableFuture<Void> res = new CompletableFuture<>();
futures.add(res);
res.exceptionally(throwable -> {
if (throwable instanceof CancellationException) {
futures.remove(res);
}
return null;
});
return res;
}
@Override
public int getFutures() {
return futures.size();
}
}