package plugins.CENO.Common; import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import freenet.client.FetchException; import freenet.client.FetchResult; import freenet.client.async.ClientContext; import freenet.client.async.ClientGetCallback; import freenet.client.async.ClientGetter; import freenet.node.RequestClient; import freenet.support.io.ResumeFailedException; public class GetSyncCallback implements ClientGetCallback { private final CountDownLatch fetchLatch = new CountDownLatch(1); private RequestClient reqClient; private byte[] fetchResult; private FetchException fe; public GetSyncCallback(RequestClient reqClient) { this.reqClient = reqClient; } public void onSuccess(FetchResult result, ClientGetter state) { try { fetchResult = result.asByteArray(); } catch (IOException e) { e.printStackTrace(); } fetchLatch.countDown(); } public void onFailure(FetchException e, ClientGetter state) { //TODO Handle local cache lookup exceptions fe = e; fetchLatch.countDown(); } public byte[] getResult(long timeout, TimeUnit unit) throws FetchException { try { fetchLatch.await(timeout, unit); } catch (InterruptedException e) { e.printStackTrace(); return null; } if (fe != null && !fe.isDNF()) { throw fe; } return fetchResult; } public void onResume(ClientContext context) throws ResumeFailedException { // Synchronous requests to local cache are unlikely to get paused } public RequestClient getRequestClient() { return reqClient; } }