
/**
 * class Server.
 * Le "Context" du Strategy Pattern
 * 
 * @author Laurent Dehoey I177416 
 * @version 23/01/2003
 */

public class Server{
   
   /**
    * Notre Serveur qui pourra en fonction des besoins
    * etre un "ClassicServer" : creation d'un nouveau thread protocolaire
    * à la volée quand un client se présente (dans la limite de "queue length" = 50 ?)
    * ou un "PoolServer" : creation d'un nombre fixe de threads protocolaires
    * à la creation du serveur (prochain TP10)
    */
   private AbstractServer server;

   /** Création d'un serveur HTTP par défaut, en stratégie classique
    *  @param port le port associé
    */
    public Server(int port) throws java.io.IOException{
      final String DOC_ROOT = ".";
      Protocol httpService = new HttpProtocol(DOC_ROOT);
//      this.setVerbose(true);
      server = new ClassicServer(httpService,port);
      setVerbose(true);
    }

   /** Création d'un serveur en stratégie classique,
    *  le protocole est transmis par l'utilisateur
    *  @param protocol le protocole de communication
    *  @param port le port associé
    */
    public Server(Protocol protocol, int port) throws java.io.IOException{
      server = new ClassicServer(protocol,port);
      setVerbose(true);
    }

   /** Création d'un serveur à l'aide d'une instance 
    *  d'une classe dérivée de AbtsractServer
    *  @param s   le serveur
    */
    public Server(AbstractServer s){
      this.server   = s;
      setVerbose(true);
    }

   /** Affectation du serveur courant l'aide d'une instance 
    *  d'une classe dérivée de AbtsractServer    
    *  @param s   le serveur
    */
    public void setServer(AbstractServer s){
      this.server   = s;
      setVerbose(true);
    }

    public void setVerbose(boolean verbose){
      this.server.setVerbose(verbose);
    }

    public void interrupt(){
      this.server.interrupt();
    }
     /**
      * le point d'entrée pour les tests unitaires
      * 
      */ 
     public static void main(String[] args) throws java.io.IOException{
    // un serveur HTTP en 8111 ou en param d'appel
        Server httpServer;
        System.out.println("(java)Server 0.01a is Starting....");

        if (args.length==1)
            httpServer = new Server(Integer.parseInt(args[0])); 
            else
            httpServer = new Server(8111); 
       System.out.println("\nstatic void main from Server.java has issued all its instructions");
       System.out.println("\nJVM is waiting for the end of threads\n");
 
  }


}
