package net.tomp2p.futures; import net.tomp2p.connection2.PeerConnection; import net.tomp2p.peers.PeerAddress; public class FuturePeerConnection extends FutureDone<PeerConnection> { private final PeerAddress remotePeer; public FuturePeerConnection(PeerAddress remotePeer) { this.remotePeer = remotePeer; } public PeerAddress remotePeer() { return remotePeer; } public PeerConnection peerConnection() { return getObject(); } /** * @return The future when this close is complete. */ public FutureDone<Void> close() { final FutureDone<Void> shutdown = new FutureDone<Void>(); addListener(new BaseFutureAdapter<FutureDone<PeerConnection>>() { @Override public void operationComplete(final FutureDone<PeerConnection> future) throws Exception { if (future.isSuccess()) { future.getObject().close().addListener(new BaseFutureAdapter<FutureDone<Void>>() { @Override public void operationComplete(final FutureDone<Void> future) throws Exception { if (future.isSuccess()) { shutdown.setDone(); } else { shutdown.setFailed("could not close (1)", future); } } }); } else { shutdown.setFailed("could not close (2)", future); } } }); return shutdown; } }