diff --git a/POO_Server/src/communication/CommunicationUDP.java b/POO_Server/src/communication/CommunicationUDP.java index 99cacc6..9d6a942 100644 --- a/POO_Server/src/communication/CommunicationUDP.java +++ b/POO_Server/src/communication/CommunicationUDP.java @@ -1,6 +1,7 @@ package communication; import java.io.IOException; +import java.io.PrintWriter; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; @@ -103,6 +104,12 @@ public class CommunicationUDP extends Thread { return -1; } + public void printActiveUsersUDP(PrintWriter out) { + for (Utilisateur uIn : users) { + out.println(" " + uIn.getPseudo() + ","); + } + } + protected synchronized void addUser(String idClient, String pseudoClient, InetAddress ipClient, int port) throws IOException { users.add(new Utilisateur(idClient, pseudoClient, ipClient, port)); diff --git a/POO_Server/src/main/ServletPresence.java b/POO_Server/src/main/ServletPresence.java index 700efd8..2301cd0 100644 --- a/POO_Server/src/main/ServletPresence.java +++ b/POO_Server/src/main/ServletPresence.java @@ -22,8 +22,7 @@ import messages.Message.TypeMessage; @WebServlet("/ServletPresence") //Faire un publish (get) séparé en utilisant les cookies pour stocker les modifications : pose problème au niveau de la synchro des pseudos (à dire rapport) -// BUG 1 : problème des conflits de pseudo -//Transmission de la liste des locaux direct du serveur aux externes ? à voir (direct dans le doPost du coup) + public class ServletPresence extends HttpServlet implements Observer { private static final long serialVersionUID = 1L; @@ -65,6 +64,75 @@ public class ServletPresence extends HttpServlet implements Observer { return false; } + //Fonctions d'affichage + + //Affiche la liste des utilisateurs actifs + private void printActiveUsers(PrintWriter out) { + out.println( "" ); + out.println(""); + for (Utilisateur uExt : remoteUsers) { + out.println(""); + } + comUDP.printActiveUsersUDP(out); + out.println( "
Utilisateurs connectés : " + uExt.getPseudo() + ",
" ); + } + + //Affiche la liste des utilisateurs actifs, seule sur la page + private void printActiveUsersOnly(PrintWriter out) { + out.println( "" ); + out.println( ""); + out.println( "Serveur de présence" ); + out.println( "" ); + out.println( "" ); + printActiveUsers(out); + out.println( "" ); + out.println( "" ); + } + + //Affiche la page d'accueil + private void printHomePage(PrintWriter out) { + out.println( "" ); + out.println( ""); + out.println( "Serveur de présence - Accueil" ); + out.println( "" ); + out.println( "" ); + out.println( "

Bienvenue sur le service de connexion à distance

" ); + out.println( "

Vous pouvez taper votre requête dans la barre de navigation

" ); + out.println( "

Requêtes (à ajouter derrière l'URL) :

" ); + out.println( "

Se connecter : ?type=POST&id=[votre id]&pseudo=[pseudo voulu]&port=[port utilisé]

" ); + out.println( "

Se déconnecter : ?type=DELETE&id=[votre id]

" ); + out.println( "

Changer de pseudo : ?type=PUT&id=[votre id]&pseudo=[pseudo voulu]

" ); + out.println( "" ); + out.println( "" ); + } + + //Affiche un message d'erreur en cas de pseudo déjà utilisé + private void printErrorUsedPseudo(PrintWriter out){ + out.println( "" ); + out.println( ""); + out.println( "Erreur pseudo déjà utilisé" ); + out.println( "" ); + out.println( "" ); + out.println( "

Erreur : Ce pseudo est déjà utilisé

" ); + out.println( "

Veuillez choisir un autre pseudo

" ); + out.println( "" ); + printActiveUsers(out); + out.println( "" ); + } + + //Affiche un message d'erreur en cas de requête invalide + private void printErrorInvalidRequest(PrintWriter out) { + out.println( "" ); + out.println( ""); + out.println( "Erreur requête invalide" ); + out.println( "" ); + out.println( "" ); + out.println( "

Erreur : nous n'avons pas compris votre requête

" ); + out.println( "

Veuillez vérifier votre syntaxe et réessayer

" ); + out.println( "" ); + out.println( "" ); + } + //Informe de la modification de la liste tous les utilisateurs internes et externes private void snotify(MessageSysteme message, Utilisateur user) { @@ -93,20 +161,12 @@ public class ServletPresence extends HttpServlet implements Observer { int port = Integer.parseInt(request.getParameter("port")); InetAddress ip = InetAddress.getByName(request.getRemoteAddr()); + response.setContentType( "text/html" ); + PrintWriter out = response.getWriter(); + //Si le pseudo est déjà pris : génère du html pour en informer l'utilisateur if (comUDP.containsUserFromPseudo(pseudo)||remoteContainsUserFromPseudo(pseudo)) { - response.setContentType( "text/html" ); - PrintWriter out = response.getWriter(); - out.println( "" ); - out.println( ""); - out.println( "Erreur pseudo déjà utilisé" ); - out.println( "" ); - out.println( "" ); - out.println( "

Erreur : Ce pseudo est déjà utilisé

" ); - out.println( "

Veuillez choisir un autre pseudo

" ); - out.println( "" ); - out.println( "" ); - out.close(); + printErrorUsedPseudo(out); } //Sinon @@ -119,7 +179,9 @@ public class ServletPresence extends HttpServlet implements Observer { // TODO Auto-generated catch block e.printStackTrace(); } + printActiveUsersOnly(out); } + out.close(); } protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ @@ -133,6 +195,10 @@ public class ServletPresence extends HttpServlet implements Observer { // TODO Auto-generated catch block e.printStackTrace(); } + response.setContentType( "text/html" ); + PrintWriter out = response.getWriter(); + printHomePage(out); + out.close(); } //Permet de dire si on a changé de pseudo (pour les utilisateurs externes) @@ -141,20 +207,12 @@ public class ServletPresence extends HttpServlet implements Observer { String pseudo = request.getParameter("pseudo"); int index = getIndexByID(id); + response.setContentType( "text/html" ); + PrintWriter out = response.getWriter(); + //Si le pseudo est déjà pris : génère du html pour en informer l'utilisateur if (comUDP.containsUserFromPseudo(pseudo)||remoteContainsUserFromPseudo(pseudo)) { - response.setContentType( "text/html" ); - PrintWriter out = response.getWriter(); - out.println( "" ); - out.println( ""); - out.println( "Erreur pseudo déjà utilisé" ); - out.println( "" ); - out.println( "" ); - out.println( "

Erreur : Ce pseudo est déjà utilisé

" ); - out.println( "

Veuillez choisir un autre pseudo

" ); - out.println( "" ); - out.println( "" ); - out.close(); + printErrorUsedPseudo(out); } else { @@ -166,7 +224,9 @@ public class ServletPresence extends HttpServlet implements Observer { // TODO Auto-generated catch block e.printStackTrace(); } + printActiveUsersOnly(out); } + out.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ @@ -191,15 +251,7 @@ public class ServletPresence extends HttpServlet implements Observer { default : response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); - out.println( "" ); - out.println( ""); - out.println( "Erreur requête invalide" ); - out.println( "" ); - out.println( "" ); - out.println( "

Erreur : nous n'avons pas compris votre requête

" ); - out.println( "

Veuillez vérifier votre syntaxe et réessayer

" ); - out.println( "" ); - out.println( "" ); + printErrorInvalidRequest(out); out.close(); } } @@ -207,19 +259,7 @@ public class ServletPresence extends HttpServlet implements Observer { catch (java.lang.NullPointerException e) { response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); - out.println( "" ); - out.println( ""); - out.println( "Serveur de présence - Accueil" ); - out.println( "" ); - out.println( "" ); - out.println( "

Bienvenue sur le service de connexion à distance

" ); - out.println( "

Vous pouvez taper votre requête dans la barre de navigation

" ); - out.println( "

Requêtes (à ajouter derrière l'URL) :

" ); - out.println( "

Se connecter : ?type=POST&id=[votre id]&pseudo=[pseudo voulu]&port=[port utilisé]

" ); - out.println( "

Se déconnecter : ?type=DELETE&id=[votre id]

" ); - out.println( "

Changer de pseudo : ?type=PUT&id=[votre id]&pseudo=[pseudo voulu]

" ); - out.println( "" ); - out.println( "" ); + printHomePage(out); out.close(); }