Compare commits
No commits in common. "860d3febbf7df015a964c32fac551d49f87ec32c" and "114e9fd8bf5eb8d036764bd906ee83009ad68d20" have entirely different histories.
860d3febbf
...
114e9fd8bf
7 changed files with 87 additions and 184 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
chatapp/Model/ListUtilisateurs.java
|
||||||
|
chatapp.Model.ListUtilisateurs
|
||||||
|
chatapp/Model/MessageHorodate.java
|
||||||
|
chatapp.Model.MessageHorodate
|
||||||
|
chatapp/Model/Utilisateur.java
|
||||||
|
chatapp.Model.Utilisateur
|
||||||
|
chatapp/Launcher.java
|
||||||
|
chatapp.Launcher
|
||||||
|
chatapp/Model/DataBase.java
|
||||||
|
chatapp.Model.DataBase
|
||||||
chatapp/Protocol/RunnerEcouteTCP.java
|
chatapp/Protocol/RunnerEcouteTCP.java
|
||||||
chatapp.Protocol.RunnerEcouteTCP
|
chatapp.Protocol.RunnerEcouteTCP
|
||||||
chatapp/View/FenetreSession.java
|
chatapp/View/FenetreSession.java
|
||||||
|
@ -5,21 +15,13 @@ chatapp/View/FenetreSession.java
|
||||||
chatapp.View.FenetreSession$1
|
chatapp.View.FenetreSession$1
|
||||||
chatapp/Controller/ChatApp.java
|
chatapp/Controller/ChatApp.java
|
||||||
chatapp.Controller.ChatApp
|
chatapp.Controller.ChatApp
|
||||||
chatapp/Model/DataBase.java
|
|
||||||
chatapp.Model.DataBase
|
|
||||||
chatapp/View/ChangementPseudo.java
|
chatapp/View/ChangementPseudo.java
|
||||||
chatapp.View.ChangementPseudo
|
chatapp.View.ChangementPseudo
|
||||||
chatapp/Protocol/RunnerEcouteUDP.java
|
chatapp/Protocol/RunnerEcouteUDP.java
|
||||||
chatapp.Protocol.RunnerEcouteUDP
|
chatapp.Protocol.RunnerEcouteUDP
|
||||||
chatapp/Launcher.java
|
|
||||||
chatapp.Launcher
|
|
||||||
chatapp/Model/ListUtilisateurs.java
|
|
||||||
chatapp.Model.ListUtilisateurs
|
|
||||||
chatapp/Protocol/UDPEchange.java
|
chatapp/Protocol/UDPEchange.java
|
||||||
chatapp.Protocol.RunnerUDP
|
chatapp.Protocol.RunnerUDP
|
||||||
chatapp.Protocol.UDPEchange
|
chatapp.Protocol.UDPEchange
|
||||||
chatapp/Model/MessageHorodate.java
|
|
||||||
chatapp.Model.MessageHorodate
|
|
||||||
chatapp/Main.java
|
chatapp/Main.java
|
||||||
chatapp.Main
|
chatapp.Main
|
||||||
chatapp/View/Clavardage.java
|
chatapp/View/Clavardage.java
|
||||||
|
@ -31,8 +33,6 @@ chatapp/View/ConnexionScreen.java
|
||||||
chatapp.View.ConnexionScreen
|
chatapp.View.ConnexionScreen
|
||||||
chatapp/View/View_Utilisateurs.java
|
chatapp/View/View_Utilisateurs.java
|
||||||
chatapp.View.View_Utilisateurs
|
chatapp.View.View_Utilisateurs
|
||||||
chatapp/Model/Utilisateur.java
|
|
||||||
chatapp.Model.Utilisateur
|
|
||||||
chatapp/View/View_Menu.java
|
chatapp/View/View_Menu.java
|
||||||
chatapp.View.View_Menu
|
chatapp.View.View_Menu
|
||||||
chatapp/View/DemarrerSession.java
|
chatapp/View/DemarrerSession.java
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
package chatapp;
|
package chatapp;
|
||||||
|
|
||||||
import com.sun.tools.javac.Main;
|
|
||||||
|
|
||||||
public class Launcher {
|
public class Launcher {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
try {
|
|
||||||
Main.main(args);
|
Main.main(args);
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,11 @@ package chatapp.Model;
|
||||||
|
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Classe representant la Base de données.
|
|
||||||
* Celle-ci stocke la liste des utilisateurs ainsi que les échanges entre eux
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public class DataBase {
|
public class DataBase {
|
||||||
private final String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ;
|
private String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ;
|
||||||
private Connection connection = null;
|
private Connection connection = null;
|
||||||
private final String login = "tp_servlet_006";
|
private String login = "tp_servlet_006";
|
||||||
private final String pswd = "baePh9ei";
|
private String pswd = "baePh9ei";
|
||||||
|
|
||||||
|
|
||||||
/*Format de la table Utilisateurs
|
/*Format de la table Utilisateurs
|
||||||
|
@ -34,7 +28,7 @@ public class DataBase {
|
||||||
Date d'envoie -> Date a laquelle Source a envoye le message a destinataire
|
Date d'envoie -> Date a laquelle Source a envoye le message a destinataire
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static final DataBase instance = null; // Singleton
|
private static DataBase instance = null; // Singleton
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructeur de la database
|
* Constructeur de la database
|
||||||
|
@ -69,7 +63,11 @@ public class DataBase {
|
||||||
*/
|
*/
|
||||||
public static DataBase getInstance() {
|
public static DataBase getInstance() {
|
||||||
synchronized (DataBase.class) {
|
synchronized (DataBase.class) {
|
||||||
return new DataBase();
|
DataBase DB = instance;
|
||||||
|
if (DB == null) {
|
||||||
|
DB = new DataBase();
|
||||||
|
}
|
||||||
|
return DB;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +103,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
//Execute la donnée SQL statement passe en parametre
|
//Execute la donnée SQL statement passe en parametre
|
||||||
try {
|
try {
|
||||||
assert Ps != null;
|
|
||||||
Ps.executeUpdate();
|
Ps.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -133,7 +130,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
//Execute la donnée SQL statement passe en parametre
|
//Execute la donnée SQL statement passe en parametre
|
||||||
try {
|
try {
|
||||||
assert Ps != null;
|
|
||||||
Ps.executeUpdate();
|
Ps.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -146,7 +142,7 @@ public class DataBase {
|
||||||
/**
|
/**
|
||||||
* Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee
|
* Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee
|
||||||
* @param IDdest Id de l'utilisateur Destinataire du message
|
* @param IDdest Id de l'utilisateur Destinataire du message
|
||||||
* @param IDsrc Id de celui qui envoi le message
|
* @param IDdest Id de celui qui envoi le message
|
||||||
* @param Msg Message envoye entre les deux utilisateurs
|
* @param Msg Message envoye entre les deux utilisateurs
|
||||||
*/
|
*/
|
||||||
public void ajoutHistorique(String IDdest , String IDsrc, String Msg) {
|
public void ajoutHistorique(String IDdest , String IDsrc, String Msg) {
|
||||||
|
@ -178,7 +174,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
//Execute la donnée SQL statement passe en parametre
|
//Execute la donnée SQL statement passe en parametre
|
||||||
try {
|
try {
|
||||||
assert Ps != null;
|
|
||||||
Ps.executeUpdate();
|
Ps.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -195,7 +190,7 @@ public class DataBase {
|
||||||
public void ajoutUtilisateurs(String ID , String Pseudo ) {
|
public void ajoutUtilisateurs(String ID , String Pseudo ) {
|
||||||
// Verification que l'utilisateur n'existe pas
|
// Verification que l'utilisateur n'existe pas
|
||||||
String existe= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'";
|
String existe= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'";
|
||||||
Statement stmt;
|
Statement stmt = null;
|
||||||
ResultSet rs = null ;
|
ResultSet rs = null ;
|
||||||
try {
|
try {
|
||||||
stmt = this.connection.createStatement();
|
stmt = this.connection.createStatement();
|
||||||
|
@ -205,7 +200,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
String P = "" ;
|
String P = "" ;
|
||||||
try {
|
try {
|
||||||
assert rs != null;
|
|
||||||
if(rs.next()){
|
if(rs.next()){
|
||||||
P = rs.getString("Pseudo");
|
P = rs.getString("Pseudo");
|
||||||
// On recupere le pseudo de l'utilisateur dont l'ID est le parametre d'entree ID
|
// On recupere le pseudo de l'utilisateur dont l'ID est le parametre d'entree ID
|
||||||
|
@ -238,7 +232,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
//Execute la donnée SQL statement passe en parametre
|
//Execute la donnée SQL statement passe en parametre
|
||||||
try {
|
try {
|
||||||
assert Ps != null;
|
|
||||||
Ps.executeUpdate();
|
Ps.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -255,7 +248,7 @@ public class DataBase {
|
||||||
public void majUtilisateursActifs(Boolean Connecte, String Id) {
|
public void majUtilisateursActifs(Boolean Connecte, String Id) {
|
||||||
String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?";
|
String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?";
|
||||||
PreparedStatement Ps = null ;
|
PreparedStatement Ps = null ;
|
||||||
int Actif = Connecte ? 1 : 0; // True -> 1 , False -> 0
|
Integer Actif = Connecte ? 1 : 0; // True -> 1 , False -> 0
|
||||||
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
|
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
|
||||||
try {
|
try {
|
||||||
Ps = connection.prepareStatement(requete);
|
Ps = connection.prepareStatement(requete);
|
||||||
|
@ -268,7 +261,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
//Execute la donnée SQL statement passe en parametre
|
//Execute la donnée SQL statement passe en parametre
|
||||||
try {
|
try {
|
||||||
assert Ps != null;
|
|
||||||
Ps.executeUpdate();
|
Ps.executeUpdate();
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -284,7 +276,7 @@ public class DataBase {
|
||||||
* @return Les N derniers Messages
|
* @return Les N derniers Messages
|
||||||
*/
|
*/
|
||||||
public String recupNMsg(String ID, String IDdestinataire, int N) {
|
public String recupNMsg(String ID, String IDdestinataire, int N) {
|
||||||
StringBuilder Msg = new StringBuilder();
|
String Msg = "" ;
|
||||||
String petit;
|
String petit;
|
||||||
String grand;
|
String grand;
|
||||||
int comparaison = ID.compareTo(IDdestinataire);
|
int comparaison = ID.compareTo(IDdestinataire);
|
||||||
|
@ -306,7 +298,6 @@ public class DataBase {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
assert stmt != null;
|
|
||||||
rs = stmt.executeQuery(requete);
|
rs = stmt.executeQuery(requete);
|
||||||
} catch (SQLException throwables) {
|
} catch (SQLException throwables) {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
|
@ -317,17 +308,18 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
for(int i = 0 ; i < N; i++){
|
for(int i = 0 ; i < N; i++){
|
||||||
try {
|
try {
|
||||||
assert rs != null;
|
|
||||||
if( rs.next()){
|
if( rs.next()){
|
||||||
String IDSource = rs.getString("Source");
|
String IDSource = rs.getString("Source");
|
||||||
String Envoi = rs.getTimestamp("Envoi").toString();
|
String Envoi = rs.getTimestamp("Envoi").toString();
|
||||||
String Message = rs.getString("Message");
|
String Message = rs.getString("Message");
|
||||||
if (IDSource.equals(ID)) Msg.append("Moi (").append(Envoi).append(") : ").append(Message);
|
if (IDSource.equals(ID)){
|
||||||
|
Msg += ( "Moi (" + Envoi + ") : " + Message ) ;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
String PseudoSource = getPseudo(IDSource) ;
|
String PseudoSource = getPseudo(IDSource) ;
|
||||||
Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message);
|
Msg += ( PseudoSource + " (" + Envoi + ") : " + Message );
|
||||||
}
|
}
|
||||||
Msg.append('\n');
|
Msg += '\n';
|
||||||
}
|
}
|
||||||
// MSG de la forme :
|
// MSG de la forme :
|
||||||
// Source (Date) : Texte
|
// Source (Date) : Texte
|
||||||
|
@ -335,7 +327,7 @@ public class DataBase {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Msg.toString();
|
return Msg ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -354,13 +346,11 @@ public class DataBase {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
assert stmt != null;
|
|
||||||
rs = stmt.executeQuery(requete);
|
rs = stmt.executeQuery(requete);
|
||||||
} catch (SQLException throwables) {
|
} catch (SQLException throwables) {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
assert rs != null;
|
|
||||||
if (rs.next()){
|
if (rs.next()){
|
||||||
Pseudo = rs.getString("Pseudo") ;
|
Pseudo = rs.getString("Pseudo") ;
|
||||||
}
|
}
|
||||||
|
@ -379,7 +369,7 @@ public class DataBase {
|
||||||
* @return Les messages d'une plage de donnée [deb,fin]
|
* @return Les messages d'une plage de donnée [deb,fin]
|
||||||
*/
|
*/
|
||||||
public String recupMsg(String ID, String IDdestinataire, int deb , int fin) {
|
public String recupMsg(String ID, String IDdestinataire, int deb , int fin) {
|
||||||
StringBuilder Msg = new StringBuilder();
|
String Msg = "" ;
|
||||||
String petit;
|
String petit;
|
||||||
String grand;
|
String grand;
|
||||||
int comparaison = ID.compareTo(IDdestinataire);
|
int comparaison = ID.compareTo(IDdestinataire);
|
||||||
|
@ -401,7 +391,6 @@ public class DataBase {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
assert stmt != null;
|
|
||||||
rs = stmt.executeQuery(requete);
|
rs = stmt.executeQuery(requete);
|
||||||
} catch (SQLException throwables) {
|
} catch (SQLException throwables) {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
|
@ -412,19 +401,18 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
for(int i = 0 ; i < fin; i++){
|
for(int i = 0 ; i < fin; i++){
|
||||||
try {
|
try {
|
||||||
assert rs != null;
|
|
||||||
if( rs.next()){
|
if( rs.next()){
|
||||||
String IDSource = rs.getString("Source");
|
String IDSource = rs.getString("Source");
|
||||||
String Envoi = rs.getTimestamp("Envoi").toString();
|
String Envoi = rs.getTimestamp("Envoi").toString();
|
||||||
String Message = rs.getString("Message");
|
String Message = rs.getString("Message");
|
||||||
if (i >= deb) {
|
if (i >= deb) {
|
||||||
if (IDSource.equals(ID)) {
|
if (IDSource.equals(ID)) {
|
||||||
Msg.append("Moi (").append(Envoi).append(") : ").append(Message);
|
Msg += ( "Moi (" + Envoi + ") : " + Message ) ;
|
||||||
} else {
|
} else {
|
||||||
String PseudoSource = getPseudo(IDSource);
|
String PseudoSource = getPseudo(IDSource);
|
||||||
Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message);
|
Msg += (PseudoSource + " (" + Envoi + ") : " + Message);
|
||||||
}
|
}
|
||||||
Msg.append('\n');
|
Msg += '\n';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException throwables) {
|
} catch (SQLException throwables) {
|
||||||
|
@ -432,7 +420,7 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Msg.toString();
|
return Msg ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -451,14 +439,12 @@ public class DataBase {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
assert stmt != null;
|
|
||||||
rs = stmt.executeQuery(requete);
|
rs = stmt.executeQuery(requete);
|
||||||
} catch (SQLException throwables) {
|
} catch (SQLException throwables) {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
}
|
}
|
||||||
while(true){
|
while(true){
|
||||||
try {
|
try {
|
||||||
assert rs != null;
|
|
||||||
if (!rs.next()) break;
|
if (!rs.next()) break;
|
||||||
} catch (SQLException throwables) {
|
} catch (SQLException throwables) {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
|
|
|
@ -1,37 +1,32 @@
|
||||||
package chatapp.Model;
|
package chatapp.Model;
|
||||||
|
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Classe representant La liste des utilisateurs actifs, stockée localement
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public class ListUtilisateurs {
|
public class ListUtilisateurs {
|
||||||
|
|
||||||
// On conserve dans cette liste tout les utilisateurs actuellement actifs
|
|
||||||
private ArrayList<Utilisateur> actifUsers ;
|
private ArrayList<Utilisateur> actifUsers ;
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur : initialise la liste 'actifUsers'
|
|
||||||
*/
|
|
||||||
public ListUtilisateurs() {
|
public ListUtilisateurs() {
|
||||||
this.actifUsers = new ArrayList<>() ;
|
this.actifUsers = new ArrayList<Utilisateur>() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
|
* Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
|
||||||
|
*
|
||||||
* @param u on va rajouter cet utilisateur dans la liste
|
* @param u on va rajouter cet utilisateur dans la liste
|
||||||
*/
|
*/
|
||||||
public void addList(Utilisateur u) {
|
public void addList(Utilisateur u) {
|
||||||
if((verifierUnicite(u.getPseudo()))) {
|
if((verifierUnicite(u.getPseudo()))) {
|
||||||
this.actifUsers.add(u);
|
this.actifUsers.add(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recuperer un utilisateur a partir de son pseudo
|
* Recuperer un utilisateur à partir de son pseudo
|
||||||
|
*
|
||||||
* @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
|
* @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
|
||||||
*/
|
*/
|
||||||
public Utilisateur getPseudoList(String pseudo) {
|
public Utilisateur getPseudoList(String pseudo) {
|
||||||
|
@ -44,10 +39,6 @@ public class ListUtilisateurs {
|
||||||
return null ;
|
return null ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Recuperer un utilisateur a partir de son addresse IP
|
|
||||||
* @param ip @IP de l'utilisateur que l'on souhaite retrouver
|
|
||||||
*/
|
|
||||||
public Utilisateur getIPList(InetAddress ip) throws Exception {
|
public Utilisateur getIPList(InetAddress ip) throws Exception {
|
||||||
for(Utilisateur elem: this.actifUsers)
|
for(Utilisateur elem: this.actifUsers)
|
||||||
{
|
{
|
||||||
|
@ -60,10 +51,11 @@ public class ListUtilisateurs {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
|
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
|
||||||
|
*
|
||||||
* @param u on va supprimer cet utilisateur dans la liste
|
* @param u on va supprimer cet utilisateur dans la liste
|
||||||
*/
|
*/
|
||||||
public void supprimerList(Utilisateur u) {
|
public void supprimerList(Utilisateur u) {
|
||||||
boolean Sup = false ;
|
Boolean Sup = false ;
|
||||||
for(Utilisateur elem: this.actifUsers)
|
for(Utilisateur elem: this.actifUsers)
|
||||||
{
|
{
|
||||||
if (elem.equals(u) ) {
|
if (elem.equals(u) ) {
|
||||||
|
@ -78,7 +70,8 @@ public class ListUtilisateurs {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifier le pseudo d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
|
* Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
|
||||||
|
*
|
||||||
* @param ancien correspond au pseudo remplacer
|
* @param ancien correspond au pseudo remplacer
|
||||||
* @param nouveau correspond au nouveau pseudo
|
* @param nouveau correspond au nouveau pseudo
|
||||||
*/
|
*/
|
||||||
|
@ -87,27 +80,24 @@ public class ListUtilisateurs {
|
||||||
{
|
{
|
||||||
if (ancien.equals( elem.getPseudo() ) ) {
|
if (ancien.equals( elem.getPseudo() ) ) {
|
||||||
this.actifUsers.remove(elem);
|
this.actifUsers.remove(elem);
|
||||||
elem.setPseudo(nouveau);
|
elem.setPseudo(nouveau);;
|
||||||
this.addList(elem);
|
this.addList(elem);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.afficherListeUtilisateurs();
|
this.afficherListeUtilisateurs();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Methode permettant de savoir si un utilisateur est contenu dans la liste 'actifUsers'
|
|
||||||
* @param u on souhait savoir si cette utilisateur appartient a la liste
|
|
||||||
* @return True si il appartient, false sinon
|
|
||||||
*/
|
|
||||||
public Boolean appartient(Utilisateur u) {
|
public Boolean appartient(Utilisateur u) {
|
||||||
return this.actifUsers.contains(u);
|
return this.actifUsers.contains(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifie qu'aucun autre utilisateur ne possede le meme pseudo
|
* Verifie qu'aucun autre utilisateur ne possède le même pseudo
|
||||||
|
*
|
||||||
* @param pseudo on va supprimer cet utilisateur dans la liste
|
* @param pseudo on va supprimer cet utilisateur dans la liste
|
||||||
* @return True si aucun utilisateur de la liste possede ce pseudo, false sinon
|
|
||||||
*/
|
*/
|
||||||
public Boolean verifierUnicite(String pseudo) {
|
public Boolean verifierUnicite(String pseudo) {
|
||||||
for(Utilisateur elem: this.actifUsers)
|
for(Utilisateur elem: this.actifUsers)
|
||||||
|
@ -120,22 +110,20 @@ public class ListUtilisateurs {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methode affichant la liste des utilisateurs actifs
|
* Méthode affichant la liste des utilisateurs actifs
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public void afficherListeUtilisateurs() {
|
public String afficherListeUtilisateurs() {
|
||||||
System.out.println ("Liste des utilisateurs actifs : ");
|
System.out.println ("Liste des utilisateurs actifs : ");
|
||||||
StringBuilder Utilisateur = new StringBuilder();
|
String Utilisateur = "" ;
|
||||||
for(Utilisateur elem: this.actifUsers)
|
for(Utilisateur elem: this.actifUsers)
|
||||||
{
|
{
|
||||||
System.out.println (elem.toString());
|
System.out.println (elem.toString());
|
||||||
Utilisateur.append(elem).append("\n");
|
Utilisateur += (elem + "\n");
|
||||||
}
|
}
|
||||||
|
return Utilisateur;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter
|
|
||||||
* @return La liste des utilisateurs actifs
|
|
||||||
*/
|
|
||||||
public ArrayList<Utilisateur> getActifUsers(){
|
public ArrayList<Utilisateur> getActifUsers(){
|
||||||
return this.actifUsers;
|
return this.actifUsers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
package chatapp.Model;
|
package chatapp.Model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.io.Serializable;
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Classe representant les messages envoyes en TCP lors d'une session de clavardage.
|
* Classe representant les messages envoyés en TCP lors d'une session de clavardage
|
||||||
* Un message Horodate est compose d'un destintaire, d'une source , d'un message et d'une date d'envoie.
|
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public class MessageHorodate implements Serializable {
|
public class MessageHorodate implements Serializable {
|
||||||
|
@ -34,17 +34,13 @@ public class MessageHorodate implements Serializable {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter: Date d'horodatage
|
|
||||||
* On modifie le date d'horodatage
|
|
||||||
*/
|
|
||||||
public void setDate(Date d) {
|
public void setDate(Date d) {
|
||||||
this.setDateHorodatage(d);
|
this.setDateHorodatage(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Permet de creer une representation string du message
|
* permet de creer une representation string du message
|
||||||
* @return Les differents attributs de la classe sous forme de string
|
* @return Les differents attributs de la classe sous forme de string
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
|
@ -61,7 +57,7 @@ public class MessageHorodate implements Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Permet de creer une representation string de la date d'horodatage
|
* permet de creer une representation string de la date d'horodatage
|
||||||
* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
|
* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
|
@ -78,10 +74,18 @@ public class MessageHorodate implements Serializable {
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static MessageHorodate stringToMessageHorodate(String s) {
|
public static MessageHorodate stringToMessageHorodate(String s) {
|
||||||
String[] mots = s.split("\n");
|
|
||||||
|
String mots[] = s.split("\n");
|
||||||
Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]);
|
Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]);
|
||||||
Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]);
|
Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]);
|
||||||
int type = Integer.parseInt(mots[2].split("::")[1]);
|
int type = Integer.parseInt(mots[2].split("::")[1]);
|
||||||
|
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
Date date = new Date();
|
||||||
|
/*try {
|
||||||
|
date = format.parse(mots[3].split("::")[1]);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}*/
|
||||||
String payload = "";
|
String payload = "";
|
||||||
for(int i=4; i< mots.length; i++) {
|
for(int i=4; i< mots.length; i++) {
|
||||||
if(mots[i].startsWith("Message::")) {
|
if(mots[i].startsWith("Message::")) {
|
||||||
|
@ -89,84 +93,49 @@ public class MessageHorodate implements Serializable {
|
||||||
}
|
}
|
||||||
payload += mots[i]+"\n";
|
payload += mots[i]+"\n";
|
||||||
}
|
}
|
||||||
return new MessageHorodate(destinataire, source, payload, type);
|
|
||||||
|
MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
|
||||||
|
//mh.setDate(date);
|
||||||
|
|
||||||
|
return mh ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter: Utilisateur Source
|
|
||||||
* @return Utilisateur a l'origine du message
|
|
||||||
*/
|
|
||||||
public Utilisateur getSource() {
|
public Utilisateur getSource() {
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter: Utilisateur Source
|
|
||||||
* On modifie l'utilisateur source
|
|
||||||
*/
|
|
||||||
public void setSource(Utilisateur source) {
|
public void setSource(Utilisateur source) {
|
||||||
this.source = source;
|
this.source = source;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter: Utilisateur Destinataire
|
|
||||||
* @return Utilisateur recevant le message
|
|
||||||
*/
|
|
||||||
public Utilisateur getDestinataire() {
|
public Utilisateur getDestinataire() {
|
||||||
return destinataire;
|
return destinataire;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter: Utilisateur Destinataire
|
|
||||||
* On modifie l'utilisateur Destinataire
|
|
||||||
*/
|
|
||||||
public void setDestinataire(Utilisateur destinataire) {
|
public void setDestinataire(Utilisateur destinataire) {
|
||||||
this.destinataire = destinataire;
|
this.destinataire = destinataire;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter: Message envoye
|
|
||||||
* @return Le message envoye
|
|
||||||
*/
|
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return Message;
|
return Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter: Message envoye
|
|
||||||
* On modifie le message envoye
|
|
||||||
*/
|
|
||||||
public void setMessage(String message) {
|
public void setMessage(String message) {
|
||||||
Message = message;
|
Message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter: 'Type' du message
|
|
||||||
* @return On recupere le Type du message
|
|
||||||
*/
|
|
||||||
public int getType() {
|
public int getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Setter: 'Type' du message horodate
|
|
||||||
* On modifie l'integer 'Type'
|
|
||||||
*/
|
|
||||||
public void setType(int Type) {
|
public void setType(int Type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter: Date d'horodatage
|
|
||||||
* @return On recupere le date
|
|
||||||
*/
|
|
||||||
public Date getDateHorodatage() {
|
public Date getDateHorodatage() {
|
||||||
return dateHorodatage;
|
return dateHorodatage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter: Date d'horodatage
|
|
||||||
* On modifie le date.
|
|
||||||
*/
|
|
||||||
public void setDateHorodatage(Date dateHorodatage) {
|
public void setDateHorodatage(Date dateHorodatage) {
|
||||||
this.dateHorodatage = dateHorodatage;
|
this.dateHorodatage = dateHorodatage;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,6 @@ package chatapp.Model;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Classe representant un Utilisateur
|
|
||||||
* Un Utilisateur est associe avec un pseudo, un numero de port, une addresse IP ainsi qu'un ID.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public class Utilisateur {
|
public class Utilisateur {
|
||||||
|
|
||||||
private String pseudo ;
|
private String pseudo ;
|
||||||
|
@ -17,12 +11,6 @@ public class Utilisateur {
|
||||||
private final InetAddress ip ;
|
private final InetAddress ip ;
|
||||||
private final String id ;
|
private final String id ;
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur : Utilisateur
|
|
||||||
* @param pseudo Le pseudo associe
|
|
||||||
* @param port
|
|
||||||
* @param ip
|
|
||||||
*/
|
|
||||||
public Utilisateur(String pseudo,Integer port, InetAddress ip ){
|
public Utilisateur(String pseudo,Integer port, InetAddress ip ){
|
||||||
this.setPseudo(pseudo) ;
|
this.setPseudo(pseudo) ;
|
||||||
this.setPort(port);
|
this.setPort(port);
|
||||||
|
|
|
@ -2,28 +2,19 @@ package chatapp.Protocol;
|
||||||
|
|
||||||
import chatapp.Controller.ChatApp;
|
import chatapp.Controller.ChatApp;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.beans.PropertyChangeSupport;
|
import java.beans.PropertyChangeSupport;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Classe permettant de gérer les multiples connexions en TCP.
|
|
||||||
* Extend la classe Thread.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
public class RunnerEcouteTCP extends Thread {
|
public class RunnerEcouteTCP extends Thread {
|
||||||
public ChatApp app ;
|
public ChatApp app ;
|
||||||
private PropertyChangeSupport pcs;
|
private PropertyChangeSupport pcs;
|
||||||
// on conserve les sessions actives dans un attribut liste
|
private ArrayList<SessionClavardage> ListeSessions = new ArrayList<SessionClavardage>();
|
||||||
private ArrayList<SessionClavardage> ListeSessions = new ArrayList<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructeur
|
|
||||||
* @param app Un RunnerEcouteTCP est toujours associé a une application de Chat
|
|
||||||
*/
|
|
||||||
public RunnerEcouteTCP(ChatApp app) {
|
public RunnerEcouteTCP(ChatApp app) {
|
||||||
this.app = app ;
|
this.app = app ;
|
||||||
this.pcs = new PropertyChangeSupport(this);
|
this.pcs = new PropertyChangeSupport(this);
|
||||||
|
@ -37,12 +28,12 @@ public class RunnerEcouteTCP extends Thread {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Methode pour qu'un objet de la classe ChatApp soit constamment en a l'ecoute de potentielles connexions
|
* Méthode pour qu'un objet de la classe ChatApp soit constamment en écoute de potentielles connexions
|
||||||
* @param app L'utilisateur en ecoute de potentielles communications
|
* @param app L'utilisateur en écoute de potentielles communications
|
||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public void ecouteTCP(ChatApp app) {
|
public void ecouteTCP(ChatApp app) {
|
||||||
ServerSocket ss;
|
ServerSocket ss = null;
|
||||||
System.out.println("Ecoute TCP activee");
|
System.out.println("Ecoute TCP activee");
|
||||||
try {
|
try {
|
||||||
ss = new ServerSocket(5000); // On ecoute sur le port 5000
|
ss = new ServerSocket(5000); // On ecoute sur le port 5000
|
||||||
|
@ -60,30 +51,17 @@ public class RunnerEcouteTCP extends Thread {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Methode permettant d'ajouter une session active dans la liste 'ListeSessions'
|
|
||||||
* @param session Session Active que l'on souhaite rajouter
|
|
||||||
*/
|
|
||||||
public void addSession(SessionClavardage session){
|
public void addSession(SessionClavardage session){
|
||||||
this.ListeSessions.add(session);
|
this.ListeSessions.add(session);
|
||||||
pcs.firePropertyChange("NouvelleSession",false,true);
|
pcs.firePropertyChange("NouvelleSession",false,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Methode permettant de recupere la premiere session de clavardage dans 'ListeSessions'
|
|
||||||
* @return Premiere Session Active
|
|
||||||
*/
|
|
||||||
public SessionClavardage getSessionClavardage() {
|
public SessionClavardage getSessionClavardage() {
|
||||||
return(this.ListeSessions.remove(0));
|
return(this.ListeSessions.remove(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Methode qui vient ecraser la méthode run de la classe Thread.
|
|
||||||
* La méthode 'ecouteTCP' est appele.
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ecouteTCP(this.app);
|
ecouteTCP(this.app);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue