package org.limewire.nio;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import org.limewire.nio.observer.ConnectObserver;
import org.limewire.nio.observer.Shutdownable;
/**
* Abstract class that allows a <code>Socket</code> to provide
* a connection method that takes a {@link ConnectObserver}.
*/
public abstract class NBSocket extends Socket {
/**
* Connects to the specified address within the given timeout (in milliseconds).
* The given <code>ConnectObserver</code> will be notified of success or failure.
* In the event of success, <code>observer.handleConnect</code> is called.
* In a failure, <code>observer.shutdown</code> is called.
* <code>observer.handleIOException</code> is never called.
* <p>
* Returns true if this was able to connect immediately. The observer is still
* notified about the success even it it was immediate.
* Returns false if it was unable to connect immediately. The observer will
* receive the connection events.
* <p>
* This method always returns immediately.
*/
public abstract boolean connect(SocketAddress addr, int timeout, ConnectObserver observer);
/**
* Sets an arbitrary <code>Shutdownable</code> as a shutdown observer.
* This observer is useful for being notified if the socket is shutdown prior to
* connect being called.
*/
public abstract void setShutdownObserver(Shutdownable observer);
// a bunch of Constructors.
public NBSocket() {
super();
}
public NBSocket(InetAddress addr, int port) throws IOException {
super(addr, port);
}
public NBSocket(InetAddress addr, int port, InetAddress localAddr, int localPort) throws IOException {
super(addr, port, localAddr, localPort);
}
public NBSocket(String addr, int port) throws UnknownHostException, IOException {
super(addr, port);
}
public NBSocket(String addr, int port, InetAddress localAddr, int localPort) throws IOException {
super(addr, port, localAddr, localPort);
}
}