package org.limewire.net; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import org.limewire.nio.NBSocketFactory; import org.limewire.nio.observer.ConnectObserver; /** * Allows sockets to be connected by arbitrary means. * One example implementation could immediately connecting the Socket, * whereas another might queue sockets so that only a certain amount * can connect at a given time. */ public interface SocketController { /** * Enqueue's this socket for wanting a connection. * @param factory the factory which will create the socket. * @param remoteAddress the address the socket will connect to. * @param localAddress the local address this should be to. (null allowed) * @param timeout the amount of time to wait before timing out the connection. * @param observer the ConnectObserver to notify about success or failure. */ Socket connect(NBSocketFactory factory, InetSocketAddress remoteAddress, InetSocketAddress localAddress, int timeout, ConnectObserver observer) throws IOException; /** * Dequeues any connections enqueued by the given ConnectObserver. * Returns true if a connection was successfully dequeued. */ boolean removeConnectObserver(ConnectObserver observer); /** * Returns the number of sockets this controller is allowed to connect at once. * Any connection attempts enqueued beyond this amount will wait until a prior * attempt has finished. */ int getNumAllowedSockets(); /** Returns the number of sockets currently in queue, waiting to begin connecting. */ int getNumWaitingSockets(); }