:: Enseignements :: Master :: M1 :: 2014-2015 :: Design Pattern ::
[LOGO]

Un serveur de commandes




Exercice 1 - Retours sur vos rendus ...

Exercice 2 - Un serveur de commandes

Le but de cet exercice est de créer un serveur TCP/IP permettant d'exécuter diverses commandes.
Commme le but de cet exercice n'est pas de créer un serveur TCP/IP, nous utiliserons un code déjà écrit.

avec le main suivant:

  1. Tester le code du serveur grâce à la commande nc (pour netcat).
    					nc localhost 8888
    					hello
    				
    et utiliser Ctrl-D (Ctrl-Z sous Windows) pour terminer la communication.
  2. Modifier le code du serveur pour introduire 2 commandes
    • La commande hello doit afficher hello en retour.
    • La commande date doit afficher la date courante (en utilisant java.time.LocalDate ) en retour.
    Dans le cas où la commande n'est pas reconnu, vous devrez afficher un message d'erreur.
  3. Expliquer pourquoi modifier le code de la classe Server.java à chaque introduction d'une nouvelle commande n'est pas une bonne idée en terme de conception objet.
    Dans le but de considerer le code du serveur comme un module fermé, quelles sont les modification qui s'imposent pour que l'introduction de nouvelles commandes ne change plus le code du serveur ?
    Refactoriser le code pour pouvoir fermer la classe Server .
  4. Comment s'appelle le design pattern que nous venons d'introduire ?
  5. On souhaite maintenant ajouter de nouvelles commandes
    • La commande upperCase permet de mettre en majuscule le texte qui suit la commande.
    • La commande uniqueId renvoie un entier unique (0 puis 1 puis 2, etc) à chaque appel.
    Ecrire le code correspondant.
  6. Si vous ne l'avez pas déjà fait, modifier votre code pour que le code de chaque commande soit isolé et localisé (donc facilement modifiable) et de telle façon à ce que l'on puisse ajouter de nouvelle commande juste en changeant juste le code du main .
  7. Enfin ajouter les commandes startTimer , elapsed et stopTimer définie comme ceci:
    • startTimer démarre un timer et renvoie son id unique.
    • stopTimer timerId qui permet de stopper un timer créer au préalable avec startTimer
    • elapsed timerId qui renvoie le temps en nano seconde écoulé depuis l'exécution du startTimer correspondant.
    • Note: il existe une méthode System.nanoTime .

Exercice 3 - Récapitulatif