import java.net.*;

/** La classe de réalisation du serveur.
 * Voir son <a href="Serveur.java.html">code source</a>.
 * @author Jean-Baptiste Yunès
 */
public class Serveur {
  /** Le numéro du port du service. */
  public static final int PORT = 11111;
  /** Le code principale du serveur.
   * Si la ligne de commande contient l'argument "-i", le serveur s'éxécute
   * en mode itératif (il sérialise le service, une file d'attente de client
   * ne devrait pas manquer de se constituer). Sinon il s'exécute en mode
   * concurrent/multithreadé; les clients sont servis non par le «serveur»
   * lui-même mais par un thread de service.
   */
  public static void main(String []arguments) {
    boolean iterative = false;
    iterative = arguments.length>0 && arguments[0].equals("-i");
    if (iterative) System.out.println("mode itératif");
    else System.out.println("mode concurrent");
    try {
      ServerSocket socketAttente = new ServerSocket(PORT);
      do {
        Socket service = socketAttente.accept();
        Service delegué = new Service(service);
        if (iterative)
          delegué.run(); // attention appel «normal» du service...
        else 
          new Thread(delegué).start(); // appel multithreadé...
      } while (true);
    } catch(Exception e) {
      System.err.println("Erreur sérieuse : "+e);
      e.printStackTrace(); System.exit(1);
    }
  }
}