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:
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.
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.
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
.
Comment s'appelle le design pattern que nous venons d'introduire ?
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.
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
.
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.