package fr.umlv.ji.tcp.server;
import java.net.*;
import javax.net.*;
import java.io.*;
import java.util.logging.*;
import java.util.prefs.*;
public class Concurrent extends Server {
public Concurrent(Logger log, Preferences prefs) {
super(log,prefs);
}
public void launch() {
try {
bind();
} catch(IOException e) {
logger.log(Level.SEVERE,"bind",e);
return;
}
Socket socket;
while(true) {
try { socket = serverSocket.accept();
} catch (IOException e) {
logger.log(Level.SEVERE,"Accept",e);
break;
}
Thread t = new Thread(runnableService(socket));
t.setDaemon(true);
t.start();
}
}
Runnable runnableService(final Socket serviceSocket) {
return new Runnable() {
public void run() {
try {
logger.info(Thread.currentThread().getName() +
" traite le service " +
service.getClass().getName());
service.serve(serviceSocket);
serviceSocket.close();
} catch (IOException e) {
logger.log(Level.WARNING,e.toString());
} catch(NullPointerException e) {
logger.log(Level.SEVERE,"service",e);
}
}
};
}
}