Fin de connexion et deconnexion

This commit is contained in:
Nabil Moukhlis 2020-11-30 20:16:02 +01:00
parent e419412d8f
commit 5997873d6f
8 changed files with 102 additions and 13 deletions

Binary file not shown.

View file

@ -15,7 +15,18 @@ public class ChatApp {
/* Liste des utilisateurs actifs */ /* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ; private ListUtilisateurs actifUsers ;
private static ArrayList<Integer> ListPort = new ArrayList<Integer>();
public static ArrayList<Integer> getListPort() {
return ListPort;
}
/* ChatApp est associé à un utilisateur */ /* ChatApp est associé à un utilisateur */
private Utilisateur me; private Utilisateur me;
@ -52,8 +63,10 @@ public class ChatApp {
InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs // Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Modification Pseudo\n" + this.getMe().getPseudo() + "\n" + nouveau + "\n"; String broadcastMessage = "Modification Pseudo\n" + this.getMe().getPseudo() + "\n" + nouveau + "\n";
Integer port = 1234 ; for(Integer p : ListPort ) {
UDPEchange.connexion(broadcastAdress,broadcastMessage, port); Integer port = p ;
UDPEchange.connexion(broadcastAdress,broadcastMessage, port);
}
} }
@ -67,8 +80,10 @@ public class ChatApp {
InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs // Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Connexion\n" + this.getMe().toString() ; String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
Integer port = 1234 ; for(Integer p : ListPort ) {
UDPEchange.connexion(broadcastAdress,broadcastMessage, port); Integer port = p ;
UDPEchange.connexion(broadcastAdress,broadcastMessage, p);
}
} }
/** /**
@ -81,21 +96,26 @@ public class ChatApp {
InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs // Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ; String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ;
Integer port = 1234 ; for(Integer p : ListPort ) {
UDPEchange.connexion(broadcastAdress,broadcastMessage, port); Integer port = p ;
UDPEchange.connexion(broadcastAdress,broadcastMessage, port);
}
} }
public static void main (String[] args) throws IOException { public static void main (String[] args) throws IOException {
//Integer p = 2345 ; //Integer p = 2345 ;
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
ListPort.add(1234);
ListPort.add(3000);
ListPort.add(4000);
ExecutorService exec = Executors.newFixedThreadPool(1000);
exec.submit(new Runner(app));
try { try {
app.connexion(); app.connexion();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
ExecutorService exec = Executors.newFixedThreadPool(1000);
exec.submit(new Runner(app));
if (app.getMe().getPort() == 4000) { if (app.getMe().getPort() == 4000) {
try { try {
Thread.sleep(2000); Thread.sleep(2000);
@ -124,6 +144,7 @@ public class ChatApp {
public ListUtilisateurs getActifUsers() { public ListUtilisateurs getActifUsers() {
return actifUsers; return actifUsers;
} }
} }
class Runner implements Runnable { class Runner implements Runnable {
ChatApp app ; ChatApp app ;

View file

@ -13,7 +13,11 @@ public class ListUtilisateurs {
* @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) {
this.actifUsers.add(u); if((verifierUnicite(u.getPseudo()))) {
this.actifUsers.add(u);
}
} }
/** /**

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -32,7 +32,12 @@ public class UDPEchange {
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port );
socket.send(packet); socket.send(packet);
socket.close(); socket.close();
System.out.println("***********Message envoye***********");
System.out.println("Dest Ip: " + broadcastAdress.toString());
System.out.println("Dest port: " + port.toString());
System.out.println("Contenu: ");
System.out.println(broadcastMessage); System.out.println(broadcastMessage);
System.out.println("************************************");
} }
/** /**
@ -49,11 +54,12 @@ public class UDPEchange {
DatagramSocket socket = null; DatagramSocket socket = null;
ExecutorService exec = Executors.newFixedThreadPool(1000); ExecutorService exec = Executors.newFixedThreadPool(1000);
try { try {
socket = new DatagramSocket(1234); socket = new DatagramSocket(app.getMe().getPort());
} catch (SocketException e1) { } catch (SocketException e1) {
e1.printStackTrace(); e1.printStackTrace();
} }
byte buffer[] = new byte[1024]; byte buffer[] = new byte[1024];
System.out.println("Ecoute sur le port: "+app.getMe().getPort().toString());
while(true) while(true)
{ {
DatagramPacket data = new DatagramPacket(buffer,buffer.length); DatagramPacket data = new DatagramPacket(buffer,buffer.length);
@ -61,8 +67,9 @@ public class UDPEchange {
socket.receive(data); socket.receive(data);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Un thread est lancé à chaque reception d'un message // Un thread est lancé à chaque reception d'un message
System.out.println("Message recu!");
exec.submit(new RunnerUDP(data,app)); exec.submit(new RunnerUDP(data,app));
} }
} }
@ -74,7 +81,12 @@ public class UDPEchange {
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port );
socket.send(packet); socket.send(packet);
socket.close(); socket.close();
System.out.println("***********Message envoye***********");
System.out.println("Dest Ip: " + broadcastAdress.toString());
System.out.println("Dest port: " + port.toString());
System.out.println("Contenu: ");
System.out.println(broadcastMessage); System.out.println(broadcastMessage);
System.out.println("************************************");
} }
} }
@ -104,8 +116,16 @@ class RunnerUDP implements Runnable {
public void run() { public void run() {
System.out.println("Thread started"); System.out.println("Thread started");
String received = new String(data.getData(), 0, data.getLength()); String received = new String(data.getData(), 0, data.getLength());
System.out.println("***********Message recu***********");
System.out.println(received); System.out.println(received);
System.out.println("**********************************");
String Type = received.split("\n")[0]; String Type = received.split("\n")[0];
//****************************************
//*****************************************
//Demande de connexion
//****************************************
//****************************************
if (Type.equals("Connexion")) { // un utilisateur vient d'arriver sur le reseau if (Type.equals("Connexion")) { // un utilisateur vient d'arriver sur le reseau
System.out.println("Reception d'une demande de connexion"); System.out.println("Reception d'une demande de connexion");
Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[1]); Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
@ -121,6 +141,7 @@ class RunnerUDP implements Runnable {
} }
reponse += app.getMe().toString(); reponse += app.getMe().toString();
try { try {
UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort()); UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort());
}catch(IOException e) }catch(IOException e)
@ -130,9 +151,31 @@ class RunnerUDP implements Runnable {
( app.getActifUsers() ).afficherListeUtilisateurs(); ( app.getActifUsers() ).afficherListeUtilisateurs();
} }
//****************************************
//*****************************************
//Reponse d'une connexion
//****************************************
//****************************************
if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion
( app.getActifUsers() ).afficherListeUtilisateurs();
if((received.split("\n")[1]).equals("true")) {
Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[2]);
app.getActifUsers().addList(u);
app.getActifUsers().afficherListeUtilisateurs();
}
else {
System.out.println("Pseudo deja pris");
System.out.println("Connexion echoue");
}
} }
//****************************************
//*****************************************
//Demande de modification d'un pseudo
//****************************************
//****************************************
if (Type.equals("Modification Pseudo")) { if (Type.equals("Modification Pseudo")) {
if(( app.getActifUsers() ).verifierUnicite(received.split("\n")[2])) { if(( app.getActifUsers() ).verifierUnicite(received.split("\n")[2])) {
( app.getActifUsers() ).modifierList(received.split("\n")[1],received.split("\n")[2]); ( app.getActifUsers() ).modifierList(received.split("\n")[1],received.split("\n")[2]);
@ -155,14 +198,35 @@ class RunnerUDP implements Runnable {
} }
( app.getActifUsers() ).afficherListeUtilisateurs(); ( app.getActifUsers() ).afficherListeUtilisateurs();
} }
//****************************************
//*****************************************
//Mauvais choix d'un pseudo
//****************************************
//****************************************
if (Type.equals("Mauvais Choix Pseudo")) { if (Type.equals("Mauvais Choix Pseudo")) {
System.out.println("Ce choix de pseudo est déjà pris il te faut en choisir un autre"); System.out.println("Ce choix de pseudo est déjà pris il te faut en choisir un autre");
} }
//****************************************
//*****************************************
//Bon choix d'un pseudo
//****************************************
//****************************************
if (Type.equals("Bon Choix Pseudo")) { if (Type.equals("Bon Choix Pseudo")) {
( app.getActifUsers() ).supprimerList(app.getMe()); ( app.getActifUsers() ).supprimerList(app.getMe());
app.getMe().setPseudo(received.split("\n")[1]); app.getMe().setPseudo(received.split("\n")[1]);
( app.getActifUsers() ).addList(app.getMe()); ( app.getActifUsers() ).addList(app.getMe());
} }
//****************************************
//*****************************************
//Demande d'une deconnexion
//****************************************
//****************************************
if (Type.equals("Deconnexion")) { if (Type.equals("Deconnexion")) {
( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); ( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1]));
} }