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

View file

@ -13,7 +13,11 @@ public class ListUtilisateurs {
* @param u on va rajouter cet utilisateur dans la liste
*/
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 );
socket.send(packet);
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("************************************");
}
/**
@ -49,11 +54,12 @@ public class UDPEchange {
DatagramSocket socket = null;
ExecutorService exec = Executors.newFixedThreadPool(1000);
try {
socket = new DatagramSocket(1234);
socket = new DatagramSocket(app.getMe().getPort());
} catch (SocketException e1) {
e1.printStackTrace();
}
byte buffer[] = new byte[1024];
System.out.println("Ecoute sur le port: "+app.getMe().getPort().toString());
while(true)
{
DatagramPacket data = new DatagramPacket(buffer,buffer.length);
@ -61,8 +67,9 @@ public class UDPEchange {
socket.receive(data);
} catch (IOException e) {
e.printStackTrace();
}
}
// Un thread est lancé à chaque reception d'un message
System.out.println("Message recu!");
exec.submit(new RunnerUDP(data,app));
}
}
@ -74,7 +81,12 @@ public class UDPEchange {
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port );
socket.send(packet);
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("************************************");
}
}
@ -104,8 +116,16 @@ class RunnerUDP implements Runnable {
public void run() {
System.out.println("Thread started");
String received = new String(data.getData(), 0, data.getLength());
System.out.println("***********Message recu***********");
System.out.println(received);
System.out.println("**********************************");
String Type = received.split("\n")[0];
//****************************************
//*****************************************
//Demande de connexion
//****************************************
//****************************************
if (Type.equals("Connexion")) { // un utilisateur vient d'arriver sur le reseau
System.out.println("Reception d'une demande de connexion");
Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
@ -121,6 +141,7 @@ class RunnerUDP implements Runnable {
}
reponse += app.getMe().toString();
try {
UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort());
}catch(IOException e)
@ -130,9 +151,31 @@ class RunnerUDP implements Runnable {
( app.getActifUsers() ).afficherListeUtilisateurs();
}
//****************************************
//*****************************************
//Reponse d'une 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(( app.getActifUsers() ).verifierUnicite(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();
}
//****************************************
//*****************************************
//Mauvais choix d'un 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");
}
//****************************************
//*****************************************
//Bon choix d'un pseudo
//****************************************
//****************************************
if (Type.equals("Bon Choix Pseudo")) {
( app.getActifUsers() ).supprimerList(app.getMe());
app.getMe().setPseudo(received.split("\n")[1]);
( app.getActifUsers() ).addList(app.getMe());
}
//****************************************
//*****************************************
//Demande d'une deconnexion
//****************************************
//****************************************
if (Type.equals("Deconnexion")) {
( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1]));
}