package ibis.ipl.support.vivaldi;
import ibis.ipl.support.Connection;
import ibis.smartsockets.virtual.VirtualServerSocket;
import ibis.util.ThreadPool;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConnectionHandler implements Runnable {
private static final Logger logger = LoggerFactory
.getLogger(ConnectionHandler.class);
private final VirtualServerSocket serverSocket;
private final VivaldiClient vivaldi;
ConnectionHandler(VirtualServerSocket socket, VivaldiClient vivaldi)
throws IOException {
this.serverSocket = socket;
this.vivaldi = vivaldi;
ThreadPool.createNew(this, "Vivaldi Connection handler");
}
public void run() {
while (true) {
try {
Connection connection = new Connection(serverSocket);
vivaldi.handleConnection(connection);
} catch (IOException e) {
if (serverSocket.isClosed()) {
return;
} else {
logger.error("Accept failed, waiting a second, will retry",
e);
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// IGNORE
}
}
}
}
}
}