package org.limewire.net.address; import java.io.IOException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.limewire.concurrent.OnewayExchanger; import org.limewire.io.Address; /** * This class provides a blocking {@link AddressResolutionObserver}. */ public class BlockingAddressResolutionObserver implements AddressResolutionObserver { private final OnewayExchanger<Address, IOException> exchanger = new OnewayExchanger<Address, IOException>(); @Override public void resolved(Address address) { exchanger.setValue(address); } @Override public void handleIOException(IOException iox) { exchanger.setException(iox); } @Override public void shutdown() { exchanger.setException(new IOException("shut down")); } public Address getAddress() throws IOException { try { return exchanger.get(); } catch (InterruptedException e) { throw new IOException(e); } } public Address getAddress(long timeout, TimeUnit timeUnit) throws IOException, TimeoutException { try { return exchanger.get(timeout, timeUnit); } catch (InterruptedException e) { throw new IOException(e); } } }