Server.java

package fr.umlv.ji.tcp.server;
import java.net.InetSocketAddress;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
/**
 * Classe abstraite d'un serveur rendant un service. 
 */ 
public abstract class Server {
  /** Adresse de la socket locale. */
  InetSocketAddress localAddress;
  /** Maximum de connexions pendantes. */
  int max = -1;
  /** Socket serveur. */
  protected ServerSocket serverSocket;
  /** Service rendu par le serveur. */
  protected Service service;
  /** Préférences du serveur. */
  final protected Preferences preferences;
  /** Journaliseur du serveur. */
  final protected Logger logger;
  /** Constructeur du serveur. */
  public Server(Logger log, Preferences prefs) {
    logger = log;
    preferences = prefs;
  }
  /** Méthode affectant l'adresse locale du server. */
  public void setLocalAddress(InetSocketAddress addr) {localAddress=addr;}
  /** Méthode affectant le maximum de connexions pendantes. */
  public void setMaxPending(int max) { this.max = max; }
  /** Méthode affectant la socket serveur à utiliser. */
  public void setServerSocket(ServerSocket ss) { serverSocket = ss; }
  /** Méthode fixant le service.  */
  public void setService(Service s) { service = s; }
  /** Méthode récupérant les préférences du serveur. */
  public Preferences getPreferences() { return preferences; }
  /** Méthode récupérant le journaliseur du serveur */
  public Logger getLogger() { return logger; }
  /** Méthode d'attachement du serveur. */
  protected void bind() throws IOException {
    if (serverSocket==null) 
      serverSocket = new ServerSocket();
    if (!serverSocket.isBound()) {
      if (localAddress==null)
    localAddress=new InetSocketAddress(preferences.getInt("port",0));
      serverSocket.bind(localAddress,max);
    } else {
      localAddress=
    (InetSocketAddress) serverSocket.getLocalSocketAddress();
    }
    // Affichage des caractéristiques du serveur
    logger.info("Démarrage du serveur : " + getClass() + 
        "\nPort d'attachement : " + serverSocket.getLocalPort());
  }
  /** Méthode abstraite de démarrage du serveur. */
  public abstract void launch();
}