diff --git a/.classpath b/.classpath deleted file mode 100644 index 9821ca9..0000000 --- a/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/.project b/.project deleted file mode 100644 index 9caddaa..0000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - Projet_POO - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/Projet_POO-1.0-jar-with-dependencies.jar b/Projet_POO-1.0-jar-with-dependencies.jar new file mode 100644 index 0000000..2d9f300 Binary files /dev/null and b/Projet_POO-1.0-jar-with-dependencies.jar differ diff --git a/Projet_POO/.classpath b/Projet_POO/.classpath index ecb69e6..b6e3819 100644 --- a/Projet_POO/.classpath +++ b/Projet_POO/.classpath @@ -1,15 +1,27 @@ - + + + + + + + + + + + + + - + - + - + - + diff --git a/Projet_POO/.gitignore b/Projet_POO/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/Projet_POO/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/Projet_POO/.project b/Projet_POO/.project index 9caddaa..ba5e4ea 100644 --- a/Projet_POO/.project +++ b/Projet_POO/.project @@ -10,8 +10,14 @@ + + org.eclipse.m2e.core.maven2Builder + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature diff --git a/Projet_POO/.settings/org.eclipse.core.resources.prefs b/Projet_POO/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..f9fe345 --- /dev/null +++ b/Projet_POO/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/Projet_POO/.settings/org.eclipse.jdt.core.prefs b/Projet_POO/.settings/org.eclipse.jdt.core.prefs index 910a770..9989e10 100644 --- a/Projet_POO/.settings/org.eclipse.jdt.core.prefs +++ b/Projet_POO/.settings/org.eclipse.jdt.core.prefs @@ -1,14 +1,8 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=14 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=14 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=14 diff --git a/Projet_POO/.settings/org.eclipse.m2e.core.prefs b/Projet_POO/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/Projet_POO/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/Projet_POO/pom.xml b/Projet_POO/pom.xml new file mode 100644 index 0000000..de3db29 --- /dev/null +++ b/Projet_POO/pom.xml @@ -0,0 +1,115 @@ + + + + 4.0.0 + + mbp + Projet_POO + 1.0 + + Projet_POO + + + + UTF-8 + 14 + 14 + + + + + junit + junit + 4.11 + test + + + + + mysql + mysql-connector-java + 8.0.23 + + + + + + + + + + maven-assembly-plugin + 3.3.0 + + + jar-with-dependencies + + + + defaut.Main + + + + + + make-assembly + package + + single + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + true + + defaut.Main + + + + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + diff --git a/Projet_POO/src/clavardage/test.java b/Projet_POO/src/clavardage/test.java deleted file mode 100644 index e543b36..0000000 --- a/Projet_POO/src/clavardage/test.java +++ /dev/null @@ -1,74 +0,0 @@ -package clavardage; - -import java.awt.EventQueue; -import java.io.DataOutputStream; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; - -import liste.GestionnaireListeUtilisateur; -import liste.TypeListeUtilisateur; -import nom.GestionnaireNom; -import ui.DiscussionUI; - -public class test { - - public test() { - - } -/* - public static void main2(String[] args) { - ArrayList l = new ArrayList(); - int i; - for (i = 0; i < 15; i++) { - GestionnaireSessionsLocales gc = new GestionnaireSessionsLocales(i * 10 + 4, 5, "localhost"); - l.add(gc); - if (i>=1) gc.createSession(4); - } - - try { - Thread.sleep(100); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - System.out.print("Nb de sessions de gc0: " + l.get(0).getSessions().size() + "\n"); - l.get(0).printSessions(); - System.out.print("Nb de sessions de gc2: " + l.get(1).getSessions().size() + "\n"); - l.get(1).printSessions(); - for (i=0; i list = new ArrayList(); - list.add(new TypeListeUtilisateur("10", "User1", "localhost", "online")); - list.add(new TypeListeUtilisateur("11", "User2", "localhost", "online")); - glu.setListeUtilisateur(list); - GestionnaireNom gn = GestionnaireNom.instance(); - gn.setId("11"); - gn.setIp("localhost"); - gn.setNom("User2"); - GestionnaireSessionsLocales gc = GestionnaireSessionsLocales.instance(); - gc.createSession("User1"); - - - }*/ - - -} - diff --git a/Projet_POO/src/defaut/Constante.java b/Projet_POO/src/defaut/Constante.java deleted file mode 100644 index 5546b27..0000000 --- a/Projet_POO/src/defaut/Constante.java +++ /dev/null @@ -1,19 +0,0 @@ -package defaut; - - -public class Constante { - - public static final String IP_BROADCAST = "255.255.255.255"; - public static final int SIZE_ORDRE = 100; - public static final int NUM_PORT_SERVER_UDP = 2000; - - - public static final String URL_SERVLET_MESSAGES = "https://srv-gei-tomcat.insa-toulouse.fr/Servlet_MBP/messageServlet"; - public static final String URL_SERVLET_PRESENCE = "https://srv-gei-tomcat.insa-toulouse.fr/Servlet_MBP/Servlet"; - - //Intervalle, en seconde, entre les requêtes envoyés périodiquement par chaque client au servlet - public static final float POLL_FREQUENCY = 1; - - - public static final boolean debug = true; // indique si l'on debug en local sur un seul ordinateur -} diff --git a/Projet_POO/src/bdd/GestionnaireHistorique.java b/Projet_POO/src/main/java/bdd/GestionnaireHistorique.java similarity index 93% rename from Projet_POO/src/bdd/GestionnaireHistorique.java rename to Projet_POO/src/main/java/bdd/GestionnaireHistorique.java index 4e29577..d6ec25b 100644 --- a/Projet_POO/src/bdd/GestionnaireHistorique.java +++ b/Projet_POO/src/main/java/bdd/GestionnaireHistorique.java @@ -14,11 +14,11 @@ public class GestionnaireHistorique { //Instance du gestionnaire d'historique static private GestionnaireHistorique uniqueInstance = null; - //Renvoie le gestionnaire d'historique, ou le crée s'il n'existe pas encore + //Renvoie le gestionnaire d'historique, ou le crée s'il n'existe pas encore static public GestionnaireHistorique instance() { - //Si l'instance n'existe pas, on la crée + //Si l'instance n'existe pas, on la crée if (GestionnaireHistorique.uniqueInstance == null) { GestionnaireHistorique.uniqueInstance = new GestionnaireHistorique(); @@ -59,7 +59,7 @@ public class GestionnaireHistorique { "CREATE TABLE IF NOT EXISTS " + id + "(id INT NOT NULL AUTO_INCREMENT," + "expediteur VARCHAR(50)," - + "msg VARCHAR(70)," + + "msg VARCHAR(5000)," + "PRIMARY KEY (id) );"; String query2 = "SELECT * FROM " + id @@ -79,11 +79,11 @@ public class GestionnaireHistorique { while(rs2.next()) { System.out.println("Historic SUCCESS"); - history.append(GestionnaireNom.instance().nomFromId(rs2.getString(2)) + ": "); //indice commence à 1 + history.append(GestionnaireNom.instance().nomFromId(rs2.getString(2)) + ": "); //indice commence à 1 history.append(rs2.getString(3) + System.lineSeparator()); } - // à mettre dans un finally + // à mettre dans un finally } @@ -164,4 +164,5 @@ public class GestionnaireHistorique { } } + } diff --git a/Projet_POO/src/bdd/Liaison.java b/Projet_POO/src/main/java/bdd/Liaison.java similarity index 100% rename from Projet_POO/src/bdd/Liaison.java rename to Projet_POO/src/main/java/bdd/Liaison.java diff --git a/Projet_POO/src/clavardage/EnvoiMessageDistance.java b/Projet_POO/src/main/java/clavardage/EnvoiMessageDistance.java similarity index 100% rename from Projet_POO/src/clavardage/EnvoiMessageDistance.java rename to Projet_POO/src/main/java/clavardage/EnvoiMessageDistance.java diff --git a/Projet_POO/src/clavardage/GestionnaireMessagesDistants.java b/Projet_POO/src/main/java/clavardage/GestionnaireMessagesDistants.java similarity index 96% rename from Projet_POO/src/clavardage/GestionnaireMessagesDistants.java rename to Projet_POO/src/main/java/clavardage/GestionnaireMessagesDistants.java index abe5e6c..41fbe11 100644 --- a/Projet_POO/src/clavardage/GestionnaireMessagesDistants.java +++ b/Projet_POO/src/main/java/clavardage/GestionnaireMessagesDistants.java @@ -36,7 +36,7 @@ public class GestionnaireMessagesDistants implements Runnable{ e.printStackTrace(); } - //On essai de récupérer les nouveaux messages qui nous sont destinés sur le serveur, si il y en a. + //On essai de récupérer les nouveaux messages qui nous sont destinés sur le serveur, si il y en a. ServletResponse res = new ServletResponse(0, null); try { diff --git a/Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java b/Projet_POO/src/main/java/clavardage/GestionnaireSessionsDistantes.java similarity index 94% rename from Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java rename to Projet_POO/src/main/java/clavardage/GestionnaireSessionsDistantes.java index 1661fb2..dd1a967 100644 --- a/Projet_POO/src/clavardage/GestionnaireSessionsDistantes.java +++ b/Projet_POO/src/main/java/clavardage/GestionnaireSessionsDistantes.java @@ -24,7 +24,7 @@ public class GestionnaireSessionsDistantes { //this.thread.start(); } - //notifyRemoteClient vaut true si la fonction doit notifier le client distant de la création de la session, false sinon. + //notifyRemoteClient vaut true si la fonction doit notifier le client distant de la création de la session, false sinon. public void createSession(String name, boolean notifyRemoteClient) throws IOException { GestionnaireNom gn = GestionnaireNom.instance(); SessionClavardageDistante session = new SessionClavardageDistante(gn.getId(), gn.idFromNom(name)); @@ -32,7 +32,7 @@ public class GestionnaireSessionsDistantes { if (notifyRemoteClient) { EnvoiMessageDistance.envoiMessage("command", gn.getId(), gn.idFromNom(name), "startSession"); } - //Lancement de la fenêtre de session + //Lancement de la fenêtre de session EventQueue.invokeLater(new Runnable() { public void run() { try { diff --git a/Projet_POO/src/clavardage/GestionnaireSessionsLocales.java b/Projet_POO/src/main/java/clavardage/GestionnaireSessionsLocales.java similarity index 70% rename from Projet_POO/src/clavardage/GestionnaireSessionsLocales.java rename to Projet_POO/src/main/java/clavardage/GestionnaireSessionsLocales.java index 5608361..a944e0e 100644 --- a/Projet_POO/src/clavardage/GestionnaireSessionsLocales.java +++ b/Projet_POO/src/main/java/clavardage/GestionnaireSessionsLocales.java @@ -4,13 +4,12 @@ import java.io.IOException; import java.net.Socket; import java.util.concurrent.ConcurrentHashMap; +import defaut.Constante; import nom.GestionnaireNom; import tcp.*; import ui.DiscussionUI; public class GestionnaireSessionsLocales implements Runnable{ - public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999; - public static final int BACKLOG = 10; private static GestionnaireSessionsLocales uniqueInstance = null; private ConcurrentHashMap sessions = new ConcurrentHashMap (); private TCPServer requestServer = null; @@ -18,7 +17,7 @@ public class GestionnaireSessionsLocales implements Runnable{ public static GestionnaireSessionsLocales instance() { if (uniqueInstance == null) { - uniqueInstance = new GestionnaireSessionsLocales(BACKLOG); + uniqueInstance = new GestionnaireSessionsLocales(Constante.BACKLOG); } return GestionnaireSessionsLocales.uniqueInstance; } @@ -28,7 +27,12 @@ public class GestionnaireSessionsLocales implements Runnable{ if (GestionnaireNom.instance().getDansReseau()) { GestionnaireNom gn = GestionnaireNom.instance(); System.out.print(gn.getIp()); - this.requestServer = new TCPServer(gn.getIp(), backlog, PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.getId())); + if (Constante.debug) { + this.requestServer = new TCPServer(gn.getIp(), backlog, Constante.PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.getId())); + } + else { + this.requestServer = new TCPServer(gn.getIp(), backlog, Constante.PORT_REQUETE_NOUVELLE_SESSION); + } this.thread = new Thread(this); this.thread.start(); } @@ -36,13 +40,20 @@ public class GestionnaireSessionsLocales implements Runnable{ public void createSession(String name) { GestionnaireNom gn = GestionnaireNom.instance(); - TCPClient client = new TCPClient(gn.ipFromNom(name), PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.idFromNom(name))) ; + TCPClient client = null; + if (Constante.debug) { + client = new TCPClient(gn.ipFromNom(name), Constante.PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(gn.idFromNom(name))) ; + } + else + { + client = new TCPClient(gn.ipFromNom(name), Constante.PORT_REQUETE_NOUVELLE_SESSION) ; + } SessionClavardageLocale session = new SessionClavardageLocale(gn.getId(), gn.idFromNom(name), client, null); this.sessions.put(gn.idFromNom(name), session); client.send(gn.getId()+System.lineSeparator()); - System.out.print("Paramètres de session envoyée à " + gn.idFromNom(name) + "\n"); + System.out.print("Paramètres de session envoyée à " + gn.idFromNom(name) + "\n"); - //Lancement de la fenêtre de session + //Lancement de la fenêtre de session EventQueue.invokeLater(new Runnable() { public void run() { try { @@ -68,11 +79,11 @@ public class GestionnaireSessionsLocales implements Runnable{ public void run() { GestionnaireNom gn = GestionnaireNom.instance(); - //On ne lance pas le thread pour les clients à distance + //On ne lance pas le thread pour les clients à distance while (gn.getDansReseau()) { Socket ssocket = this.requestServer.accept(); - System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n"); + System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n"); for (SessionClavardageLocale s : this.sessions.values()) System.out.print(s); TCPServerThread client = new TCPServerThread(ssocket,false); String idClient = null; @@ -91,14 +102,20 @@ public class GestionnaireSessionsLocales implements Runnable{ else if (this.sessions.get(idClient) == null) { //Il n'existe pas encore de session entre les deux utilisateurs System.out.print("Nouvelle session sur le serveur de " + gn.getId() + "\n"); - TCPClient clientEnvoi = new TCPClient(client.getAdresseCible(), PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(idClient)); - SessionClavardageLocale session = new SessionClavardageLocale(gn.getId(), idClient, clientEnvoi, client); + TCPClient clientEnvoi = null; + if (Constante.debug) { + clientEnvoi = new TCPClient(client.getAdresseCible(), Constante.PORT_REQUETE_NOUVELLE_SESSION + Integer.parseInt(idClient)); + } + else { + clientEnvoi = new TCPClient(client.getAdresseCible(), Constante.PORT_REQUETE_NOUVELLE_SESSION); + } + SessionClavardageLocale session = new SessionClavardageLocale(gn.getId(), idClient, clientEnvoi, client); this.sessions.put(idClient, session); clientEnvoi.send(gn.getId()+System.lineSeparator()); System.out.print("Fin de la configuration de " + gn.getId() + "\n"); System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s)."); - //Lancement de la fenêtre de session + //Lancement de la fenêtre de session EventQueue.invokeLater(new Runnable() { public void run() { try { @@ -112,14 +129,14 @@ public class GestionnaireSessionsLocales implements Runnable{ } else if (this.sessions.get(idClient).getClientReception() == null) { System.out.print("Suite de la configuration sur le serveur de " + gn.getId() + "\n"); - //il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée + //il existe une session entre les deux utilisateurs, mais la phase de configuration n'est pas terminée this.sessions.get(idClient).setClientReception(client); System.out.print("Fin de la configuration de " + gn.getId() + "\n"); System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s)."); } else { - //Il existe déjà une connexion établie entre les deux machines + //Il existe déjà une connexion établie entre les deux machines System.out.print("Tentative de session multiple sur le serveur de " + gn.getId() + "\n"); client.stop(); } diff --git a/Projet_POO/src/clavardage/SessionClavardage.java b/Projet_POO/src/main/java/clavardage/SessionClavardage.java similarity index 100% rename from Projet_POO/src/clavardage/SessionClavardage.java rename to Projet_POO/src/main/java/clavardage/SessionClavardage.java diff --git a/Projet_POO/src/clavardage/SessionClavardageDistante.java b/Projet_POO/src/main/java/clavardage/SessionClavardageDistante.java similarity index 94% rename from Projet_POO/src/clavardage/SessionClavardageDistante.java rename to Projet_POO/src/main/java/clavardage/SessionClavardageDistante.java index 534b690..cf0a31c 100644 --- a/Projet_POO/src/clavardage/SessionClavardageDistante.java +++ b/Projet_POO/src/main/java/clavardage/SessionClavardageDistante.java @@ -61,7 +61,7 @@ public class SessionClavardageDistante extends SessionClavardage{ } public String toString() { - return "Session à distance entre " + this.getIdSource() + " et " + this.getIdDestination() + System.lineSeparator(); + return "Session à distance entre " + this.getIdSource() + " et " + this.getIdDestination() + System.lineSeparator(); } diff --git a/Projet_POO/src/clavardage/SessionClavardageLocale.java b/Projet_POO/src/main/java/clavardage/SessionClavardageLocale.java similarity index 88% rename from Projet_POO/src/clavardage/SessionClavardageLocale.java rename to Projet_POO/src/main/java/clavardage/SessionClavardageLocale.java index fef03a4..3ebdc8a 100644 --- a/Projet_POO/src/clavardage/SessionClavardageLocale.java +++ b/Projet_POO/src/main/java/clavardage/SessionClavardageLocale.java @@ -34,8 +34,8 @@ public class SessionClavardageLocale extends SessionClavardage{ @Override public String toString() { - return "Session locale entre " + this.idSource + " à l'adresse " + this.clientEmission.getAdresseSource() - + ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + System.lineSeparator(); + return "Session locale entre " + this.idSource + " à l'adresse " + this.clientEmission.getAdresseSource() + + ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + System.lineSeparator(); } public TCPClient getClientReception() { @@ -58,7 +58,7 @@ public class SessionClavardageLocale extends SessionClavardage{ @Override public void addPropertyChangeListener(PropertyChangeListener p) { - while (this.getClientReception() == null); //On attends que le client soit configuré + while (this.getClientReception() == null); //On attends que le client soit configuré this.getClientReception().addPropertyChangeListener(p);; } diff --git a/Projet_POO/src/data/Message.java b/Projet_POO/src/main/java/data/Message.java similarity index 100% rename from Projet_POO/src/data/Message.java rename to Projet_POO/src/main/java/data/Message.java diff --git a/Projet_POO/src/data/ServletResponse.java b/Projet_POO/src/main/java/data/ServletResponse.java similarity index 94% rename from Projet_POO/src/data/ServletResponse.java rename to Projet_POO/src/main/java/data/ServletResponse.java index a6ee73b..5e2db65 100644 --- a/Projet_POO/src/data/ServletResponse.java +++ b/Projet_POO/src/main/java/data/ServletResponse.java @@ -23,7 +23,7 @@ public class ServletResponse { public String toString (){ if (this.messageList != null) { - return "Status code: " + this.statusCode +", " + this.messageList.size() + " messages reçus."; + return "Status code: " + this.statusCode +", " + this.messageList.size() + " messages reçus."; } else { return "Status code: " + this.statusCode; diff --git a/Projet_POO/src/main/java/defaut/Constante.java b/Projet_POO/src/main/java/defaut/Constante.java new file mode 100644 index 0000000..81a7ea6 --- /dev/null +++ b/Projet_POO/src/main/java/defaut/Constante.java @@ -0,0 +1,25 @@ +package defaut; + +import java.time.ZoneOffset; + +public class Constante { + + public static final String IP_BROADCAST = "255.255.255.255"; + public static final int SIZE_ORDRE = 100; + public static final int NUM_PORT_SERVER_UDP = 2000; + + //URL du serveur sur lequel se trouve le servlet + public static final String URL_SERVLET = "https://srv-gei-tomcat.insa-toulouse.fr/Servlet_MBP"; + public static final String URL_SERVLET_MESSAGES = URL_SERVLET + "/messageServlet"; + public static final String URL_SERVLET_PRESENCE = URL_SERVLET + "/Servlet"; + + public static final boolean debug = true; // indique si l'on debug en local sur un seul ordinateur + + //Port sur lequelle le serveur TCP reçoit les demandes d'ouverture de sessions + public static final int PORT_REQUETE_NOUVELLE_SESSION = 19999; + //Nombre maximal de demandes dans la file d'attente du serveur + public static final int BACKLOG = 10; + + //écart par rapport au fuseau horraire UTC + public static final ZoneOffset TIME_ZONE_OFFSET = ZoneOffset.UTC; +} diff --git a/Projet_POO/src/defaut/Main.java b/Projet_POO/src/main/java/defaut/Main.java similarity index 50% rename from Projet_POO/src/defaut/Main.java rename to Projet_POO/src/main/java/defaut/Main.java index 8e309de..c03216e 100644 --- a/Projet_POO/src/defaut/Main.java +++ b/Projet_POO/src/main/java/defaut/Main.java @@ -5,13 +5,13 @@ import ui.Login_RegisterUI; public class Main { - public static final int UDP_SERVER_PORT_DEBUG = 2004; + public static final int UDP_SERVER_PORT_DEBUG = 2000; public static void main(String[] args) { - // les méthode finissant par 2 sont le double de celle sans 2, servant à tester en local. - //Elles sont utilisés lorsque la constante debug vaut true + // les méthode finissant par 2 sont le double de celle sans 2, servant à tester en local. + //Elles sont utilisés lorsque la constante debug vaut true //on lance le UI diff --git a/Projet_POO/src/liste/GestionnaireListeUtilisateur.java b/Projet_POO/src/main/java/liste/GestionnaireListeUtilisateur.java similarity index 89% rename from Projet_POO/src/liste/GestionnaireListeUtilisateur.java rename to Projet_POO/src/main/java/liste/GestionnaireListeUtilisateur.java index 9b21af6..8ed5691 100644 --- a/Projet_POO/src/liste/GestionnaireListeUtilisateur.java +++ b/Projet_POO/src/main/java/liste/GestionnaireListeUtilisateur.java @@ -11,17 +11,17 @@ import servlet.Post; public class GestionnaireListeUtilisateur { - //contient la liste Utilisateur à jour + //contient la liste Utilisateur à jour private ArrayList listeUtilisateur = new ArrayList(); //Instance du gestionnaire de liste static private GestionnaireListeUtilisateur uniqueInstance = null; - //Renvoie le gestionnaire de liste, ou le crée s'il n'existe pas encore + //Renvoie le gestionnaire de liste, ou le crée s'il n'existe pas encore static public GestionnaireListeUtilisateur instance() { - //Si l'instance n'existe pas, on la crée + //Si l'instance n'existe pas, on la crée if (GestionnaireListeUtilisateur.uniqueInstance == null) { GestionnaireListeUtilisateur.uniqueInstance = new GestionnaireListeUtilisateur(); } @@ -46,7 +46,7 @@ public class GestionnaireListeUtilisateur { - //Demande à tout le monde d'envoyer leur infos (TypeListeUtilisateur) --> Uniquement lors de la connexion + //Demande à tout le monde d'envoyer leur infos (TypeListeUtilisateur) --> Uniquement lors de la connexion public void majListe() { if (GestionnaireNom.instance().getDansReseau()) { envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); @@ -57,7 +57,7 @@ public class GestionnaireListeUtilisateur { + GestionnaireNom.instance().getStatut() ); } catch (IOException e) { - //TODO Là aussi traiter l'erreur + //TODO Là aussi traiter l'erreur } } @@ -72,11 +72,11 @@ public class GestionnaireListeUtilisateur { + GestionnaireNom.instance().getStatut() ); } catch (IOException e) { - //TODO Là aussi traiter l'erreur + //TODO Là aussi traiter l'erreur } } - //ecoute le port de broadcast pour recevoir le message personnalisé + //ecoute le port de broadcast pour recevoir le message personnalisé public void ecoute() { //static ?? Thread ecouteThread = new Thread(new UdpBroadcastServer(Constante.NUM_PORT_SERVER_UDP)); ecouteThread.start(); diff --git a/Projet_POO/src/liste/TraitementCmdListe.java b/Projet_POO/src/main/java/liste/TraitementCmdListe.java similarity index 91% rename from Projet_POO/src/liste/TraitementCmdListe.java rename to Projet_POO/src/main/java/liste/TraitementCmdListe.java index 11629b1..7cf8e93 100644 --- a/Projet_POO/src/liste/TraitementCmdListe.java +++ b/Projet_POO/src/main/java/liste/TraitementCmdListe.java @@ -26,7 +26,7 @@ public class TraitementCmdListe implements Runnable{ public void run() { try { - //On décompose la cmd + //On décompose la cmd String ordre = cmd[0]; // add / delete / listRequest / statut String id = cmd[1]; String nom = cmd[2]; @@ -67,7 +67,7 @@ public class TraitementCmdListe implements Runnable{ changeStatut(id, statut); } - //System.out.println("libéré"); + //System.out.println("libéré"); semaphore.release(); @@ -84,7 +84,7 @@ public class TraitementCmdListe implements Runnable{ private void envoyerNom() { //localHost TODO (gerer IP, unhandle exception ...) GestionnaireListeUtilisateur.instance().envoie( "add"+ "$$$" + GestionnaireNom.instance().getId() + "$$$" + - GestionnaireNom.instance().getNom() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() ); + GestionnaireNom.instance().getNom() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + GestionnaireNom.instance().getStatut() ); } @@ -92,13 +92,13 @@ public class TraitementCmdListe implements Runnable{ private void envoyerNom2(int port) { //localHost TODO (gerer IP, unhandle exception ...) GestionnaireListeUtilisateur.instance().envoie2( "add"+ "$$$" + GestionnaireNom.instance().getId() + "$$$" + - GestionnaireNom.instance().getNom() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() ); + GestionnaireNom.instance().getNom() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + GestionnaireNom.instance().getStatut()); } - //Ajoute les utilisateurs à la listeUtilisateur + //Ajoute les utilisateurs à la listeUtilisateur private void ajouteUtilisateur(String id, String nom, String ip, String statut, boolean local) { boolean inListe = false; @@ -121,7 +121,7 @@ public class TraitementCmdListe implements Runnable{ } - //mise à jour des graphismes + //mise à jour des graphismes ListUI.update(); } @@ -139,12 +139,12 @@ public class TraitementCmdListe implements Runnable{ } } - //mise à jour des graphismes + //mise à jour des graphismes ListUI.update(); } - // Met à jour le Statut d'un utilisateur + // Met à jour le Statut d'un utilisateur private void changeStatut(String id, String statut) { for (TypeListeUtilisateur user : GestionnaireListeUtilisateur.instance().getListeUtilisateur()) { if (user.id.equals(id)) { @@ -153,7 +153,7 @@ public class TraitementCmdListe implements Runnable{ } } - //mise à jour des graphismes + //mise à jour des graphismes ListUI.update(); } diff --git a/Projet_POO/src/liste/TypeListeUtilisateur.java b/Projet_POO/src/main/java/liste/TypeListeUtilisateur.java similarity index 100% rename from Projet_POO/src/liste/TypeListeUtilisateur.java rename to Projet_POO/src/main/java/liste/TypeListeUtilisateur.java diff --git a/Projet_POO/src/liste/UdpBroadcastClient.java b/Projet_POO/src/main/java/liste/UdpBroadcastClient.java similarity index 94% rename from Projet_POO/src/liste/UdpBroadcastClient.java rename to Projet_POO/src/main/java/liste/UdpBroadcastClient.java index fa27428..41cb414 100644 --- a/Projet_POO/src/liste/UdpBroadcastClient.java +++ b/Projet_POO/src/main/java/liste/UdpBroadcastClient.java @@ -46,7 +46,7 @@ public class UdpBroadcastClient implements Runnable{ try { serverSocket.close(); } catch (Exception e) { - System.out.println("Erreur : pas de Client Socket à fermer (UDP)"); + System.out.println("Erreur : pas de Client Socket à fermer (UDP)"); e.printStackTrace(); } } diff --git a/Projet_POO/src/liste/UdpBroadcastServer.java b/Projet_POO/src/main/java/liste/UdpBroadcastServer.java similarity index 95% rename from Projet_POO/src/liste/UdpBroadcastServer.java rename to Projet_POO/src/main/java/liste/UdpBroadcastServer.java index f72b325..409160a 100644 --- a/Projet_POO/src/liste/UdpBroadcastServer.java +++ b/Projet_POO/src/main/java/liste/UdpBroadcastServer.java @@ -50,7 +50,7 @@ public class UdpBroadcastServer implements Runnable{ try { serverSocket.close(); } catch (Exception e) { - System.out.println("Erreur : pas de Server Socket à fermer (UDP)"); + System.out.println("Erreur : pas de Server Socket à fermer (UDP)"); e.printStackTrace(); } diff --git a/Projet_POO/src/liste/UdpUnicastClient.java b/Projet_POO/src/main/java/liste/UdpUnicastClient.java similarity index 100% rename from Projet_POO/src/liste/UdpUnicastClient.java rename to Projet_POO/src/main/java/liste/UdpUnicastClient.java diff --git a/Projet_POO/src/nom/GestionnaireNom.java b/Projet_POO/src/main/java/nom/GestionnaireNom.java similarity index 94% rename from Projet_POO/src/nom/GestionnaireNom.java rename to Projet_POO/src/main/java/nom/GestionnaireNom.java index 4321259..7366069 100644 --- a/Projet_POO/src/nom/GestionnaireNom.java +++ b/Projet_POO/src/main/java/nom/GestionnaireNom.java @@ -20,11 +20,11 @@ public class GestionnaireNom{ //Instance du gestionnaire de nom static private GestionnaireNom uniqueInstance = null; - //Renvoie le gestionnaire de nom, ou le crée s'il n'existe pas encore + //Renvoie le gestionnaire de nom, ou le crée s'il n'existe pas encore static public GestionnaireNom instance() { - //Si l'instance n'existe pas, on la crée + //Si l'instance n'existe pas, on la crée if (GestionnaireNom.uniqueInstance == null) { GestionnaireNom.uniqueInstance = new GestionnaireNom(); @@ -131,7 +131,7 @@ public class GestionnaireNom{ } - //renvoie le nom associé à un id ou "null" s'il n'existe pas (ou non en ligne) + //renvoie le nom associé à un id ou "null" s'il n'existe pas (ou non en ligne) public String nomFromId(String id) { for (int i=0; i messageQueue = new LinkedList (); @@ -35,7 +35,7 @@ public class TCPServerThread extends TCPClient implements Runnable{ public void stop() { - this.terminé = true; + this.terminé = true; try { this.socket.close(); } @@ -63,16 +63,16 @@ public class TCPServerThread extends TCPClient implements Runnable{ public void run() { - while (!terminé) { + while (!terminé) { try { Message message = this.receiveObject(); addMessage(message); - System.out.print("Terminé : " + terminé + ", message reçu : " + message + "\n"); + System.out.print("Terminé : " + terminé + ", message reçu : " + message + "\n"); } catch(EOFException e) { - //La connexion a été interrompue par l'autre client - this.terminé = true; + //La connexion a été interrompue par l'autre client + this.terminé = true; System.out.println("L'interruption de la connection a eu lieu"); Message messageStop = new Message(); messageStop.setType("command"); @@ -83,11 +83,11 @@ public class TCPServerThread extends TCPClient implements Runnable{ catch (IOException e) { //La connexion est interrompue par notre client/une erreur - this.terminé = true; + this.terminé = true; System.out.print("Connection sur le port " + this.port + " vers " + this.adresseCible +" interrompue.\n"); } catch (Exception e) { - this.terminé = true; + this.terminé = true; System.out.print(e); } } diff --git a/Projet_POO/src/ui/DiscussionUI.java b/Projet_POO/src/main/java/ui/DiscussionUI.java similarity index 84% rename from Projet_POO/src/ui/DiscussionUI.java rename to Projet_POO/src/main/java/ui/DiscussionUI.java index ca40d33..5900ca9 100644 --- a/Projet_POO/src/ui/DiscussionUI.java +++ b/Projet_POO/src/main/java/ui/DiscussionUI.java @@ -14,10 +14,12 @@ import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; +import java.time.ZoneOffset; import java.util.ArrayList; import java.awt.event.ActionEvent; import clavardage.*; import data.Message; +import defaut.Constante; import nom.GestionnaireNom; public class DiscussionUI extends JFrame implements PropertyChangeListener{ @@ -54,13 +56,14 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ ArrayList list = session.getNewMessages(); for (Message msg : list) { if (msg.getType().equals("command") && msg.getBody().equals("stopSession")) { - historicField.setText(historicField.getText() + GestionnaireNom.instance().nomFromId(session.getIdDestination()) + " s'est déconnecté(e)."+System.lineSeparator()); + historicField.setText(historicField.getText() + GestionnaireNom.instance().nomFromId(session.getIdDestination()) + " s'est déconnecté(e)."+System.lineSeparator()); this.finDeSession(); } else { System.out.print(msg); - String message = GestionnaireNom.instance().nomFromId(msg.getSender()) + ": " + msg.getBody(); + String temps = msg.getDate().atZone(Constante.TIME_ZONE_OFFSET).getHour()+":"+msg.getDate().atZone(Constante.TIME_ZONE_OFFSET).getMinute(); + String message = GestionnaireNom.instance().nomFromId(msg.getSender()) + ": " + msg.getBody() +" (" + temps + ")"; historicField.setText(historicField.getText() + message + System.lineSeparator()); } @@ -68,7 +71,7 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ } public void finDeSession() { - this.session.removePropertyChangeListener(this); //On arrête d'écouter les messages provenant du client en face + this.session.removePropertyChangeListener(this); //On arrête d'écouter les messages provenant du client en face GestionnaireSessionsLocales.instance().deleteSession(session); this.setSession(null); System.out.println(this.session); @@ -83,17 +86,18 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ message.setSender(this.session.getIdSource()); message.setRecipient(this.session.getIdDestination()); textField.setText(""); - historicField.append(GestionnaireNom.instance().nomFromId(message.getSender()) +": " + message.getBody() + System.lineSeparator()); + String temps = message.getDate().atZone(Constante.TIME_ZONE_OFFSET).getHour()+":"+message.getDate().atZone(Constante.TIME_ZONE_OFFSET).getMinute(); + historicField.append(GestionnaireNom.instance().nomFromId(message.getSender()) + ": " + message.getBody() + " (" + temps + ")" + System.lineSeparator()); try { session.sendObject(message); } catch (IOException e) { System.out.println("Echec lors de l'envoi de l'objet message."); } - GestionnaireHistorique.instance().ajouter(this.session.getIdSource(), this.session.getIdDestination(), this.session.getIdSource(), message.getBody()); + GestionnaireHistorique.instance().ajouter(this.session.getIdSource(), this.session.getIdDestination(), this.session.getIdSource(), message.getBody() + " (" + temps + ")"); } } - private void récupérerHistorique() { + private void récupérerHistorique() { historicField.append(GestionnaireHistorique.instance().recuperer(this.session.getIdSource(), this.session.getIdDestination())); } /** @@ -120,7 +124,7 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{ historicField.setEditable(false); scrollPane.setViewportView(historicField); historicField.setColumns(10); - this.récupérerHistorique(); + this.récupérerHistorique(); textField = new JTextField(); diff --git a/Projet_POO/src/ui/ListUI.java b/Projet_POO/src/main/java/ui/ListUI.java similarity index 97% rename from Projet_POO/src/ui/ListUI.java rename to Projet_POO/src/main/java/ui/ListUI.java index affc37a..7dfcb3b 100644 --- a/Projet_POO/src/ui/ListUI.java +++ b/Projet_POO/src/main/java/ui/ListUI.java @@ -103,7 +103,7 @@ public class ListUI extends JFrame implements Runnable{ // Titre setTitle("List : " + GestionnaireNom.instance().getId()); - // Operation par défaut + // Operation par défaut setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Dimension @@ -220,12 +220,12 @@ public class ListUI extends JFrame implements Runnable{ /** - * Méthode + * Méthode */ - // à améliorer ... (suppression ?) + // à améliorer ... (suppression ?) private void ajouterNomListe(DefaultTableModel dtm, ArrayList liste) { for (String t : liste) { if (!t.equals(GestionnaireNom.instance().getNom())) { @@ -288,8 +288,8 @@ public class ListUI extends JFrame implements Runnable{ - // mise à jour des graphismes - public static void update() { //TODO à refaire en plus jolie (observer ou autre) + // mise à jour des graphismes + public static void update() { //TODO à refaire en plus jolie (observer ou autre) ArrayList listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur(); DefaultListModel defaultListModel = new DefaultListModel(); @@ -309,7 +309,7 @@ public class ListUI extends JFrame implements Runnable{ String item = (String) comboBox.getSelectedItem(); System.out.println(item); // debug GestionnaireNom.instance().setStatut(item); - // on envoie l'info à la servlet + // on envoie l'info à la servlet try { Post.sendPOST("statut$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" diff --git a/Projet_POO/src/ui/Login_RegisterUI.java b/Projet_POO/src/main/java/ui/Login_RegisterUI.java similarity index 92% rename from Projet_POO/src/ui/Login_RegisterUI.java rename to Projet_POO/src/main/java/ui/Login_RegisterUI.java index c5c49e1..fc0400c 100644 --- a/Projet_POO/src/ui/Login_RegisterUI.java +++ b/Projet_POO/src/main/java/ui/Login_RegisterUI.java @@ -79,7 +79,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{ //titre setTitle("Login"); - //opération par défaut + //opération par défaut setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //dimension @@ -225,16 +225,16 @@ public class Login_RegisterUI extends JFrame implements Runnable{ /** - * Méthode + * Méthode */ - // Teste la validité des champs. //pour tester avant utilisation bdd + // Teste la validité des champs. //pour tester avant utilisation bdd private void enter2() { String id = idField.getText(); String pwd = String.valueOf(passwordField.getPassword()); - //debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main)) - if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après ) + //debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main)) + if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après ) GestionnaireSessionsLocales.instance(); GestionnaireSessionsDistantes.instance(); @@ -243,7 +243,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{ dispose(); - //2eme Méthode avec Thread + //2eme Méthode avec Thread Thread t = new Thread(new NomUI()); t.start(); @@ -278,12 +278,12 @@ public class Login_RegisterUI extends JFrame implements Runnable{ GestionnaireNom.instance().setId(id); - //On a maintenant les informations nécessaires pour initialiser l'application + //On a maintenant les informations nécessaires pour initialiser l'application - //on lance le server d'écoute de cmd pour les clients locaux + //on lance le server d'écoute de cmd pour les clients locaux if (GestionnaireNom.instance().getDansReseau()) { if (defaut.Constante.debug) { - GestionnaireListeUtilisateur.instance().ecoute2(Main.UDP_SERVER_PORT_DEBUG); + GestionnaireListeUtilisateur.instance().ecoute2(Main.UDP_SERVER_PORT_DEBUG + Integer.parseInt(GestionnaireNom.instance().getId())); } else { GestionnaireListeUtilisateur.instance().ecoute(); @@ -300,7 +300,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{ GestionnaireSessionsDistantes.instance(); GestionnaireMessagesDistants.instance(); - //On met à jour la liste des utilisateurs + //On met à jour la liste des utilisateurs if (Constante.debug) { GestionnaireListeUtilisateur.instance().majListe2(); } @@ -320,7 +320,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{ passwordField.setText(""); } - // à mettre dans un finally + // à mettre dans un finally rs.close(); st.close(); con.close(); diff --git a/Projet_POO/src/ui/NomUI.java b/Projet_POO/src/main/java/ui/NomUI.java similarity index 97% rename from Projet_POO/src/ui/NomUI.java rename to Projet_POO/src/main/java/ui/NomUI.java index 94c79ef..fd7542d 100644 --- a/Projet_POO/src/ui/NomUI.java +++ b/Projet_POO/src/main/java/ui/NomUI.java @@ -115,12 +115,12 @@ public class NomUI extends JFrame implements Runnable{ /** - * Méthode + * Méthode */ // On choisit son Username private void nommer(String nom) { - // Si l'on se renomme on peut annuler en entrant rien ou Reprendre le même Username + // Si l'on se renomme on peut annuler en entrant rien ou Reprendre le même Username if( (GestionnaireNom.instance().getNom() != null) && ( nom.isBlank() || nom.equals(GestionnaireNom.instance().getNom()) ) ) { dispose(); @@ -131,7 +131,7 @@ public class NomUI extends JFrame implements Runnable{ else { //Sinon on essaye de prendre un nom if (GestionnaireNom.instance().verifierDisponibiliteNom(nom)) { - //Celui-ci ne peut pas être "vide" + protection cmd + //Celui-ci ne peut pas être "vide" + protection cmd if (!nom.isBlank() && !nom.contains("$$$")) { if (defaut.Constante.debug) { diff --git a/Projet_POO/src/module-info.java b/Projet_POO/src/module-info.java deleted file mode 100644 index fbd19e3..0000000 --- a/Projet_POO/src/module-info.java +++ /dev/null @@ -1,5 +0,0 @@ -module projet_POO { - requires java.desktop; - requires java.sql; - requires mysql.connector.java; -} \ No newline at end of file diff --git a/README.md b/README.md index b088929..5768e28 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ # Projet_POO - +L'application est sous la forme d'un projet maven pour eclipse. Pour lancer le projet --> Lancer la Classe nommée "Main" dans le package "defaut". -(les autres mains ne servaient qu'à débuger à un moment donné) +(les autres mains ne servaient qu'à débuger à un moment donné). Pour déployer le projet : +avec maven, build le projet en utilisant le goal "package assembly:single" pour obtenir un executable +qu'il suffit ensuite de copier sur les machines de votre choix. Un exemplaire précompilé est disponible +sur le git. lien git COO : https://git.etud.insa-toulouse.fr/benassai/Projet_COO.git