Réorganistion totale du projet pour en simplifier l'utilisation, correction de quelques bugs et oublis.

This commit is contained in:
Marino Benassai 2021-02-16 06:26:17 +01:00
parent f36198ca15
commit a6d0af1222
43 changed files with 291 additions and 228 deletions

View file

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="Projet_POO/src"/>
<classpathentry kind="output" path="Projet_POO/bin"/>
</classpath>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Projet_POO</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

Binary file not shown.

View file

@ -1,15 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<classpath> <classpath>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-14"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-14">
<attributes> <attributes>
<attribute name="module" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="lib" path="C:/Program Files/Java/mysql-connector-java-8.0.22.jar" sourcepath="C:/Users/Marin/.m2/repository/mysql/mysql-connector-java/8.0.22/mysql-connector-java-8.0.22-sources.jar"> <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes> <attributes>
<attribute name="module" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="target/classes"/>
</classpath> </classpath>

View file

@ -1 +0,0 @@
/bin/

View file

@ -10,8 +10,14 @@
<arguments> <arguments>
</arguments> </arguments>
</buildCommand> </buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures> </natures>
</projectDescription> </projectDescription>

View file

@ -0,0 +1,4 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/test/java=UTF-8
encoding/<project>=UTF-8

View file

@ -1,14 +1,8 @@
eclipse.preferences.version=1 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.targetPlatform=14
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=14 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.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=enabled org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=14 org.eclipse.jdt.core.compiler.source=14

View file

@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

115
Projet_POO/pom.xml Normal file
View file

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mbp</groupId>
<artifactId>Projet_POO</artifactId>
<version>1.0</version>
<name>Projet_POO</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>14</maven.compiler.source>
<maven.compiler.target>14</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>defaut.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<mainClass>defaut.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

View file

@ -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<GestionnaireSessionsLocales> l = new ArrayList<GestionnaireSessionsLocales>();
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<l.get(0).getSessions().size();i++) {
sessionClavardage session = l.get(0).getSessions().get(i);
String message = "Message de " + session.getIdSource() +" vers " + session.getIdDestination() +".\n";
session.send(message);
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (i = 1; i<l.size();i++) l.get(i).fermerSessions();
}
*/
/*public static void main(String[] args) {
GestionnaireListeUtilisateur glu = GestionnaireListeUtilisateur.instance();
ArrayList<TypeListeUtilisateur> list = new ArrayList<TypeListeUtilisateur>();
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");
}*/
}

View file

@ -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
}

View file

@ -14,11 +14,11 @@ public class GestionnaireHistorique {
//Instance du gestionnaire d'historique //Instance du gestionnaire d'historique
static private GestionnaireHistorique uniqueInstance = null; 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() { 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) { if (GestionnaireHistorique.uniqueInstance == null) {
GestionnaireHistorique.uniqueInstance = new GestionnaireHistorique(); GestionnaireHistorique.uniqueInstance = new GestionnaireHistorique();
@ -59,7 +59,7 @@ public class GestionnaireHistorique {
"CREATE TABLE IF NOT EXISTS " + id "CREATE TABLE IF NOT EXISTS " + id
+ "(id INT NOT NULL AUTO_INCREMENT," + "(id INT NOT NULL AUTO_INCREMENT,"
+ "expediteur VARCHAR(50)," + "expediteur VARCHAR(50),"
+ "msg VARCHAR(70)," + "msg VARCHAR(5000),"
+ "PRIMARY KEY (id) );"; + "PRIMARY KEY (id) );";
String query2 = "SELECT * FROM " + id String query2 = "SELECT * FROM " + id
@ -79,11 +79,11 @@ public class GestionnaireHistorique {
while(rs2.next()) { while(rs2.next()) {
System.out.println("Historic SUCCESS"); 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()); history.append(rs2.getString(3) + System.lineSeparator());
} }
// à mettre dans un finally // à mettre dans un finally
} }
@ -164,4 +164,5 @@ public class GestionnaireHistorique {
} }
} }
} }

View file

@ -36,7 +36,7 @@ public class GestionnaireMessagesDistants implements Runnable{
e.printStackTrace(); 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); ServletResponse res = new ServletResponse(0, null);
try { try {

View file

@ -24,7 +24,7 @@ public class GestionnaireSessionsDistantes {
//this.thread.start(); //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 { public void createSession(String name, boolean notifyRemoteClient) throws IOException {
GestionnaireNom gn = GestionnaireNom.instance(); GestionnaireNom gn = GestionnaireNom.instance();
SessionClavardageDistante session = new SessionClavardageDistante(gn.getId(), gn.idFromNom(name)); SessionClavardageDistante session = new SessionClavardageDistante(gn.getId(), gn.idFromNom(name));
@ -32,7 +32,7 @@ public class GestionnaireSessionsDistantes {
if (notifyRemoteClient) { if (notifyRemoteClient) {
EnvoiMessageDistance.envoiMessage("command", gn.getId(), gn.idFromNom(name), "startSession"); 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() { EventQueue.invokeLater(new Runnable() {
public void run() { public void run() {
try { try {

View file

@ -4,13 +4,12 @@ import java.io.IOException;
import java.net.Socket; import java.net.Socket;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import defaut.Constante;
import nom.GestionnaireNom; import nom.GestionnaireNom;
import tcp.*; import tcp.*;
import ui.DiscussionUI; import ui.DiscussionUI;
public class GestionnaireSessionsLocales implements Runnable{ 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 static GestionnaireSessionsLocales uniqueInstance = null;
private ConcurrentHashMap <String, SessionClavardageLocale> sessions = new ConcurrentHashMap <String, SessionClavardageLocale>(); private ConcurrentHashMap <String, SessionClavardageLocale> sessions = new ConcurrentHashMap <String, SessionClavardageLocale>();
private TCPServer requestServer = null; private TCPServer requestServer = null;
@ -18,7 +17,7 @@ public class GestionnaireSessionsLocales implements Runnable{
public static GestionnaireSessionsLocales instance() { public static GestionnaireSessionsLocales instance() {
if (uniqueInstance == null) { if (uniqueInstance == null) {
uniqueInstance = new GestionnaireSessionsLocales(BACKLOG); uniqueInstance = new GestionnaireSessionsLocales(Constante.BACKLOG);
} }
return GestionnaireSessionsLocales.uniqueInstance; return GestionnaireSessionsLocales.uniqueInstance;
} }
@ -28,7 +27,12 @@ public class GestionnaireSessionsLocales implements Runnable{
if (GestionnaireNom.instance().getDansReseau()) { if (GestionnaireNom.instance().getDansReseau()) {
GestionnaireNom gn = GestionnaireNom.instance(); GestionnaireNom gn = GestionnaireNom.instance();
System.out.print(gn.getIp()); 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 = new Thread(this);
this.thread.start(); this.thread.start();
} }
@ -36,13 +40,20 @@ public class GestionnaireSessionsLocales implements Runnable{
public void createSession(String name) { public void createSession(String name) {
GestionnaireNom gn = GestionnaireNom.instance(); 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); SessionClavardageLocale session = new SessionClavardageLocale(gn.getId(), gn.idFromNom(name), client, null);
this.sessions.put(gn.idFromNom(name), session); this.sessions.put(gn.idFromNom(name), session);
client.send(gn.getId()+System.lineSeparator()); 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() { EventQueue.invokeLater(new Runnable() {
public void run() { public void run() {
try { try {
@ -68,11 +79,11 @@ public class GestionnaireSessionsLocales implements Runnable{
public void run() { public void run() {
GestionnaireNom gn = GestionnaireNom.instance(); 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()) { while (gn.getDansReseau()) {
Socket ssocket = this.requestServer.accept(); 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); for (SessionClavardageLocale s : this.sessions.values()) System.out.print(s);
TCPServerThread client = new TCPServerThread(ssocket,false); TCPServerThread client = new TCPServerThread(ssocket,false);
String idClient = null; String idClient = null;
@ -91,14 +102,20 @@ public class GestionnaireSessionsLocales implements Runnable{
else if (this.sessions.get(idClient) == null) { else if (this.sessions.get(idClient) == null) {
//Il n'existe pas encore de session entre les deux utilisateurs //Il n'existe pas encore de session entre les deux utilisateurs
System.out.print("Nouvelle session sur le serveur de " + gn.getId() + "\n"); 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)); TCPClient clientEnvoi = null;
SessionClavardageLocale session = new SessionClavardageLocale(gn.getId(), idClient, clientEnvoi, client); 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); this.sessions.put(idClient, session);
clientEnvoi.send(gn.getId()+System.lineSeparator()); clientEnvoi.send(gn.getId()+System.lineSeparator());
System.out.print("Fin de la configuration de " + gn.getId() + "\n"); System.out.print("Fin de la configuration de " + gn.getId() + "\n");
System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s)."); 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() { EventQueue.invokeLater(new Runnable() {
public void run() { public void run() {
try { try {
@ -112,14 +129,14 @@ public class GestionnaireSessionsLocales implements Runnable{
} }
else if (this.sessions.get(idClient).getClientReception() == null) { else if (this.sessions.get(idClient).getClientReception() == null) {
System.out.print("Suite de la configuration sur le serveur de " + gn.getId() + "\n"); 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); this.sessions.get(idClient).setClientReception(client);
System.out.print("Fin de la configuration de " + gn.getId() + "\n"); System.out.print("Fin de la configuration de " + gn.getId() + "\n");
System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s)."); System.out.println("Il y a actuellement " + sessions.size() + " session(s) ouverte(s).");
} }
else { 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"); System.out.print("Tentative de session multiple sur le serveur de " + gn.getId() + "\n");
client.stop(); client.stop();
} }

View file

@ -61,7 +61,7 @@ public class SessionClavardageDistante extends SessionClavardage{
} }
public String toString() { 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();
} }

View file

@ -34,8 +34,8 @@ public class SessionClavardageLocale extends SessionClavardage{
@Override @Override
public String toString() { public String toString() {
return "Session locale entre " + this.idSource + " à l'adresse " + this.clientEmission.getAdresseSource() return "Session locale entre " + this.idSource + " à l'adresse " + this.clientEmission.getAdresseSource()
+ ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + System.lineSeparator(); + ", et " + this.idDestination + " à l'adresse " + this.clientEmission.getAdresseCible() + System.lineSeparator();
} }
public TCPClient getClientReception() { public TCPClient getClientReception() {
@ -58,7 +58,7 @@ public class SessionClavardageLocale extends SessionClavardage{
@Override @Override
public void addPropertyChangeListener(PropertyChangeListener p) { 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);; this.getClientReception().addPropertyChangeListener(p);;
} }

View file

@ -23,7 +23,7 @@ public class ServletResponse {
public String toString (){ public String toString (){
if (this.messageList != null) { 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 { else {
return "Status code: " + this.statusCode; return "Status code: " + this.statusCode;

View file

@ -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;
}

View file

@ -5,13 +5,13 @@ import ui.Login_RegisterUI;
public class Main { 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) { public static void main(String[] args) {
// les méthode finissant par 2 sont le double de celle sans 2, servant à tester en local. // 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 //Elles sont utilisés lorsque la constante debug vaut true
//on lance le UI //on lance le UI

View file

@ -11,17 +11,17 @@ import servlet.Post;
public class GestionnaireListeUtilisateur { public class GestionnaireListeUtilisateur {
//contient la liste Utilisateur à jour //contient la liste Utilisateur à jour
private ArrayList<TypeListeUtilisateur> listeUtilisateur = new ArrayList<TypeListeUtilisateur>(); private ArrayList<TypeListeUtilisateur> listeUtilisateur = new ArrayList<TypeListeUtilisateur>();
//Instance du gestionnaire de liste //Instance du gestionnaire de liste
static private GestionnaireListeUtilisateur uniqueInstance = null; 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() { 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) { if (GestionnaireListeUtilisateur.uniqueInstance == null) {
GestionnaireListeUtilisateur.uniqueInstance = new GestionnaireListeUtilisateur(); 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() { public void majListe() {
if (GestionnaireNom.instance().getDansReseau()) { if (GestionnaireNom.instance().getDansReseau()) {
envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " ");
@ -57,7 +57,7 @@ public class GestionnaireListeUtilisateur {
+ GestionnaireNom.instance().getStatut() ); + GestionnaireNom.instance().getStatut() );
} }
catch (IOException e) { catch (IOException e) {
//TODO aussi traiter l'erreur //TODO aussi traiter l'erreur
} }
} }
@ -72,11 +72,11 @@ public class GestionnaireListeUtilisateur {
+ GestionnaireNom.instance().getStatut() ); + GestionnaireNom.instance().getStatut() );
} }
catch (IOException e) { catch (IOException e) {
//TODO aussi traiter l'erreur //TODO 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 ?? public void ecoute() { //static ??
Thread ecouteThread = new Thread(new UdpBroadcastServer(Constante.NUM_PORT_SERVER_UDP)); Thread ecouteThread = new Thread(new UdpBroadcastServer(Constante.NUM_PORT_SERVER_UDP));
ecouteThread.start(); ecouteThread.start();

View file

@ -26,7 +26,7 @@ public class TraitementCmdListe implements Runnable{
public void run() { public void run() {
try { try {
//On décompose la cmd //On décompose la cmd
String ordre = cmd[0]; // add / delete / listRequest / statut String ordre = cmd[0]; // add / delete / listRequest / statut
String id = cmd[1]; String id = cmd[1];
String nom = cmd[2]; String nom = cmd[2];
@ -67,7 +67,7 @@ public class TraitementCmdListe implements Runnable{
changeStatut(id, statut); changeStatut(id, statut);
} }
//System.out.println("libéré"); //System.out.println("libéré");
semaphore.release(); semaphore.release();
@ -84,7 +84,7 @@ public class TraitementCmdListe implements Runnable{
private void envoyerNom() { //localHost TODO (gerer IP, unhandle exception ...) private void envoyerNom() { //localHost TODO (gerer IP, unhandle exception ...)
GestionnaireListeUtilisateur.instance().envoie( GestionnaireListeUtilisateur.instance().envoie(
"add"+ "$$$" + GestionnaireNom.instance().getId() + "$$$" + "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 ...) private void envoyerNom2(int port) { //localHost TODO (gerer IP, unhandle exception ...)
GestionnaireListeUtilisateur.instance().envoie2( GestionnaireListeUtilisateur.instance().envoie2(
"add"+ "$$$" + GestionnaireNom.instance().getId() + "$$$" + "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) { private void ajouteUtilisateur(String id, String nom, String ip, String statut, boolean local) {
boolean inListe = false; boolean inListe = false;
@ -121,7 +121,7 @@ public class TraitementCmdListe implements Runnable{
} }
//mise à jour des graphismes //mise à jour des graphismes
ListUI.update(); ListUI.update();
} }
@ -139,12 +139,12 @@ public class TraitementCmdListe implements Runnable{
} }
} }
//mise à jour des graphismes //mise à jour des graphismes
ListUI.update(); ListUI.update();
} }
// Met à jour le Statut d'un utilisateur // Met à jour le Statut d'un utilisateur
private void changeStatut(String id, String statut) { private void changeStatut(String id, String statut) {
for (TypeListeUtilisateur user : GestionnaireListeUtilisateur.instance().getListeUtilisateur()) { for (TypeListeUtilisateur user : GestionnaireListeUtilisateur.instance().getListeUtilisateur()) {
if (user.id.equals(id)) { if (user.id.equals(id)) {
@ -153,7 +153,7 @@ public class TraitementCmdListe implements Runnable{
} }
} }
//mise à jour des graphismes //mise à jour des graphismes
ListUI.update(); ListUI.update();
} }

View file

@ -46,7 +46,7 @@ public class UdpBroadcastClient implements Runnable{
try { try {
serverSocket.close(); serverSocket.close();
} catch (Exception e) { } 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(); e.printStackTrace();
} }
} }

View file

@ -50,7 +50,7 @@ public class UdpBroadcastServer implements Runnable{
try { try {
serverSocket.close(); serverSocket.close();
} catch (Exception e) { } 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(); e.printStackTrace();
} }

View file

@ -20,11 +20,11 @@ public class GestionnaireNom{
//Instance du gestionnaire de nom //Instance du gestionnaire de nom
static private GestionnaireNom uniqueInstance = null; 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() { 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) { if (GestionnaireNom.uniqueInstance == null) {
GestionnaireNom.uniqueInstance = new GestionnaireNom(); 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) { public String nomFromId(String id) {
for (int i=0; i<GestionnaireListeUtilisateur.instance().getListeUtilisateur().size(); i++) { for (int i=0; i<GestionnaireListeUtilisateur.instance().getListeUtilisateur().size(); i++) {
if (GestionnaireListeUtilisateur.instance().getListeUtilisateur().get(i).id.equals(id) ) { if (GestionnaireListeUtilisateur.instance().getListeUtilisateur().get(i).id.equals(id) ) {
@ -157,7 +157,7 @@ public class GestionnaireNom{
// Associe un nom à l'utilisateur et prévient les autres. // Associe un nom à l'utilisateur et prévient les autres.
public void nommer(String nom) { public void nommer(String nom) {
setNom(nom); setNom(nom);
if (GestionnaireNom.instance().getDansReseau()) { if (GestionnaireNom.instance().getDansReseau()) {
@ -191,7 +191,7 @@ public class GestionnaireNom{
// Supprime l'utilisateur et prévient les autres. // Supprime l'utilisateur et prévient les autres.
public void supprimer() { public void supprimer() {
if (GestionnaireNom.instance().getDansReseau()) { if (GestionnaireNom.instance().getDansReseau()) {
GestionnaireListeUtilisateur.instance().envoie("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau() + "$$$" + getStatut()); GestionnaireListeUtilisateur.instance().envoie("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau() + "$$$" + getStatut());

View file

@ -156,9 +156,9 @@ public class TCPClient {
//TCPClient client = new TCPClient("LAPTOP-944OJJB9", 19999); //TCPClient client = new TCPClient("LAPTOP-944OJJB9", 19999);
TCPClient client = new TCPClient("srv-gei-tomcat.insa-toulouse.fr", 19999); TCPClient client = new TCPClient("srv-gei-tomcat.insa-toulouse.fr", 19999);
String message = "Bonjour."; String message = "Bonjour.";
System.out.printf("Message envoyé: %s", message); System.out.printf("Message envoyé: %s", message);
client.send(message); client.send(message);
System.out.printf("Message reçu: %s"+System.lineSeparator(), client.receive()); System.out.printf("Message reçu: %s"+System.lineSeparator(), client.receive());
client.stop(); client.stop();
} }
} }

View file

@ -11,7 +11,7 @@ import nom.GestionnaireNom;
public class TCPServerThread extends TCPClient implements Runnable{ public class TCPServerThread extends TCPClient implements Runnable{
Thread thread; Thread thread;
boolean terminé = false; boolean terminé = false;
private Message lastMessage = null; private Message lastMessage = null;
private LinkedList <Message> messageQueue = new LinkedList <Message> (); private LinkedList <Message> messageQueue = new LinkedList <Message> ();
@ -35,7 +35,7 @@ public class TCPServerThread extends TCPClient implements Runnable{
public void stop() { public void stop() {
this.terminé = true; this.terminé = true;
try { try {
this.socket.close(); this.socket.close();
} }
@ -63,16 +63,16 @@ public class TCPServerThread extends TCPClient implements Runnable{
public void run() { public void run() {
while (!terminé) { while (!terminé) {
try { try {
Message message = this.receiveObject(); Message message = this.receiveObject();
addMessage(message); 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) { catch(EOFException e) {
//La connexion a été interrompue par l'autre client //La connexion a été interrompue par l'autre client
this.terminé = true; this.terminé = true;
System.out.println("L'interruption de la connection a eu lieu"); System.out.println("L'interruption de la connection a eu lieu");
Message messageStop = new Message(); Message messageStop = new Message();
messageStop.setType("command"); messageStop.setType("command");
@ -83,11 +83,11 @@ public class TCPServerThread extends TCPClient implements Runnable{
catch (IOException e) { catch (IOException e) {
//La connexion est interrompue par notre client/une erreur //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"); System.out.print("Connection sur le port " + this.port + " vers " + this.adresseCible +" interrompue.\n");
} }
catch (Exception e) { catch (Exception e) {
this.terminé = true; this.terminé = true;
System.out.print(e); System.out.print(e);
} }
} }

View file

@ -14,10 +14,12 @@ import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.io.IOException; import java.io.IOException;
import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.ArrayList;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import clavardage.*; import clavardage.*;
import data.Message; import data.Message;
import defaut.Constante;
import nom.GestionnaireNom; import nom.GestionnaireNom;
public class DiscussionUI extends JFrame implements PropertyChangeListener{ public class DiscussionUI extends JFrame implements PropertyChangeListener{
@ -54,13 +56,14 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{
ArrayList <Message> list = session.getNewMessages(); ArrayList <Message> list = session.getNewMessages();
for (Message msg : list) { for (Message msg : list) {
if (msg.getType().equals("command") && msg.getBody().equals("stopSession")) { 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(); this.finDeSession();
} }
else else
{ {
System.out.print(msg); 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()); historicField.setText(historicField.getText() + message + System.lineSeparator());
} }
@ -68,7 +71,7 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{
} }
public void finDeSession() { 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); GestionnaireSessionsLocales.instance().deleteSession(session);
this.setSession(null); this.setSession(null);
System.out.println(this.session); System.out.println(this.session);
@ -83,17 +86,18 @@ public class DiscussionUI extends JFrame implements PropertyChangeListener{
message.setSender(this.session.getIdSource()); message.setSender(this.session.getIdSource());
message.setRecipient(this.session.getIdDestination()); message.setRecipient(this.session.getIdDestination());
textField.setText(""); 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 { try {
session.sendObject(message); session.sendObject(message);
} catch (IOException e) { } catch (IOException e) {
System.out.println("Echec lors de l'envoi de l'objet message."); 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())); 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); historicField.setEditable(false);
scrollPane.setViewportView(historicField); scrollPane.setViewportView(historicField);
historicField.setColumns(10); historicField.setColumns(10);
this.récupérerHistorique(); this.récupérerHistorique();
textField = new JTextField(); textField = new JTextField();

View file

@ -103,7 +103,7 @@ public class ListUI extends JFrame implements Runnable{
// Titre // Titre
setTitle("List : " + GestionnaireNom.instance().getId()); setTitle("List : " + GestionnaireNom.instance().getId());
// Operation par défaut // Operation par défaut
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Dimension //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<String> liste) { private void ajouterNomListe(DefaultTableModel dtm, ArrayList<String> liste) {
for (String t : liste) { for (String t : liste) {
if (!t.equals(GestionnaireNom.instance().getNom())) { if (!t.equals(GestionnaireNom.instance().getNom())) {
@ -288,8 +288,8 @@ public class ListUI extends JFrame implements Runnable{
// mise à jour des graphismes // mise à jour des graphismes
public static void update() { //TODO à refaire en plus jolie (observer ou autre) public static void update() { //TODO à refaire en plus jolie (observer ou autre)
ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur(); ArrayList<TypeListeUtilisateur> listeUtilisateur = GestionnaireListeUtilisateur.instance().getListeUtilisateur();
DefaultListModel<TypeListeUtilisateur> defaultListModel = new DefaultListModel<TypeListeUtilisateur>(); DefaultListModel<TypeListeUtilisateur> defaultListModel = new DefaultListModel<TypeListeUtilisateur>();
@ -309,7 +309,7 @@ public class ListUI extends JFrame implements Runnable{
String item = (String) comboBox.getSelectedItem(); String item = (String) comboBox.getSelectedItem();
System.out.println(item); // debug System.out.println(item); // debug
GestionnaireNom.instance().setStatut(item); GestionnaireNom.instance().setStatut(item);
// on envoie l'info à la servlet // on envoie l'info à la servlet
try { try {
Post.sendPOST("statut$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$" Post.sendPOST("statut$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$" + GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"

View file

@ -79,7 +79,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
//titre //titre
setTitle("Login"); setTitle("Login");
//opération par défaut //opération par défaut
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//dimension //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() { private void enter2() {
String id = idField.getText(); String id = idField.getText();
String pwd = String.valueOf(passwordField.getPassword()); 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)) //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 ) if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après )
GestionnaireSessionsLocales.instance(); GestionnaireSessionsLocales.instance();
GestionnaireSessionsDistantes.instance(); GestionnaireSessionsDistantes.instance();
@ -243,7 +243,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
dispose(); dispose();
//2eme Méthode avec Thread //2eme Méthode avec Thread
Thread t = new Thread(new NomUI()); Thread t = new Thread(new NomUI());
t.start(); t.start();
@ -278,12 +278,12 @@ public class Login_RegisterUI extends JFrame implements Runnable{
GestionnaireNom.instance().setId(id); 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 (GestionnaireNom.instance().getDansReseau()) {
if (defaut.Constante.debug) { 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 { } else {
GestionnaireListeUtilisateur.instance().ecoute(); GestionnaireListeUtilisateur.instance().ecoute();
@ -300,7 +300,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
GestionnaireSessionsDistantes.instance(); GestionnaireSessionsDistantes.instance();
GestionnaireMessagesDistants.instance(); GestionnaireMessagesDistants.instance();
//On met à jour la liste des utilisateurs //On met à jour la liste des utilisateurs
if (Constante.debug) { if (Constante.debug) {
GestionnaireListeUtilisateur.instance().majListe2(); GestionnaireListeUtilisateur.instance().majListe2();
} }
@ -320,7 +320,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
passwordField.setText(""); passwordField.setText("");
} }
// à mettre dans un finally // à mettre dans un finally
rs.close(); rs.close();
st.close(); st.close();
con.close(); con.close();

View file

@ -115,12 +115,12 @@ public class NomUI extends JFrame implements Runnable{
/** /**
* Méthode * Méthode
*/ */
// On choisit son Username // On choisit son Username
private void nommer(String nom) { 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()) ) ) { if( (GestionnaireNom.instance().getNom() != null) && ( nom.isBlank() || nom.equals(GestionnaireNom.instance().getNom()) ) ) {
dispose(); dispose();
@ -131,7 +131,7 @@ public class NomUI extends JFrame implements Runnable{
else { else {
//Sinon on essaye de prendre un nom //Sinon on essaye de prendre un nom
if (GestionnaireNom.instance().verifierDisponibiliteNom(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 (!nom.isBlank() && !nom.contains("$$$")) {
if (defaut.Constante.debug) { if (defaut.Constante.debug) {

View file

@ -1,5 +0,0 @@
module projet_POO {
requires java.desktop;
requires java.sql;
requires mysql.connector.java;
}

View file

@ -1,8 +1,11 @@
# Projet_POO # 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". 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 lien git COO : https://git.etud.insa-toulouse.fr/benassai/Projet_COO.git