package org.jboss.net.sockets;
import java.io.IOException;
import java.io.Serializable;
import java.rmi.server.RMIClientSocketFactory;
import java.net.Socket;
import EDU.oswego.cs.dl.util.concurrent.FIFOSemaphore;
public class QueuedClientSocketFactory
implements RMIClientSocketFactory, java.io.Externalizable
{
static final long serialVersionUID = 6566809337830221375L;
private transient FIFOSemaphore permits;
private long numPermits;
public QueuedClientSocketFactory()
{
}
public QueuedClientSocketFactory(long nPermits)
{
permits = new FIFOSemaphore(nPermits);
numPermits = nPermits;
}
public Socket createSocket(String host, int port) throws IOException
{
try
{
permits.acquire();
return new Socket(host, port);
}
catch (InterruptedException ex)
{
throw new IOException("Failed to acquire FIFOSemaphore for ClientSocketFactory");
}
finally
{
permits.release();
}
}
public boolean equals(Object obj)
{
return obj instanceof QueuedClientSocketFactory;
}
public int hashCode()
{
return getClass().getName().hashCode();
}
public void writeExternal(java.io.ObjectOutput out)
throws IOException
{
out.writeLong(numPermits);
}
public void readExternal(java.io.ObjectInput in)
throws IOException, ClassNotFoundException
{
numPermits = in.readLong();
permits = new FIFOSemaphore(numPermits);
}
}