Verification pseudo

This commit is contained in:
Auriane Lartigue 2020-11-30 18:00:26 +01:00
parent b111994b72
commit ae3dba26cb
8 changed files with 168 additions and 12 deletions

Binary file not shown.

View file

@ -36,7 +36,7 @@ public class ChatApp {
}
//ip.getHostAddress();
this.me = new Utilisateur(pseudo,port,ip);
this.actifUsers.add(me);
this.actifUsers.add(getMe());
}
/**
* Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
@ -46,14 +46,52 @@ public class ChatApp {
public void addList(Utilisateur u) {
this.actifUsers.add(u);
}
public Utilisateur getPseudoList(String pseudo) {
for(Utilisateur elem: this.actifUsers)
{
if (elem.getPseudo().equals(pseudo) ) {
return elem ;
}
}
return null ;
}
/**
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
*
* @param u on va supprimer cet utilisateur dans la liste
*/
public void supprimerList(Utilisateur u) {
this.actifUsers.remove(u);
Boolean Sup = false ;
for(Utilisateur elem: this.actifUsers)
{
if (elem.equals(u) ) {
this.actifUsers.remove(elem);
Sup = true ;
this.afficherListeUtilisateurs();
}
}
if (!Sup) {
System.out.println("Tentative de retirer un objet non contenu dans la liste");
}
}
/**
* Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
*
* @param ancien correspond au pseudo remplacer
* @param nouveau correspond au nouveau pseudo
*/
public void modifierList(String ancien , String nouveau) {
for(Utilisateur elem: this.actifUsers)
{
if (ancien.equals( elem.getPseudo() ) ) {
this.actifUsers.remove(elem);
elem.setPseudo(nouveau);;
this.addList(elem);
}
}
this.afficherListeUtilisateurs();
}
/**
@ -71,6 +109,21 @@ public class ChatApp {
return true;
}
/**
* Modification du pseudo de l'utilisateur
* Envoie en broadcast son ancien pseudo et son nouveau
*
* @param nouveau correspond au nouveau pseudo
*/
public void modifierPseudo(String nouveau) throws IOException {
// @ de broadcast du réseau de l'utilisateur me
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);
}
public void afficherListeUtilisateurs() {
System.out.println ("Liste des utilisateurs actifs : ");
for(Utilisateur elem: this.actifUsers)
@ -79,18 +132,35 @@ public class ChatApp {
}
}
/**
* Methode appelée lors de la connexion d'un nouvel utilisateur.
* Il va prévenir les utilisateurs du réseau de son arrivée.
*
*/
public void connexion() throws IOException {
// @ de broadcast du réseau de l'utilisateur me
InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Connexion\n" + this.me.toString() ;
String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
Integer port = 1234 ;
UDPEchange.connexion(broadcastAdress,broadcastMessage, port);
}
/**
* Methode appelée lors de la déconnexion de l'utilisateur.
* Il va prévenir les utilisateurs du réseau de son départ.
*
*/
public void deconnexion() throws IOException {
// @ de broadcast du réseau de l'utilisateur me
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);
}
public static void main (String[] args) {
public static void main (String[] args) throws IOException {
//Integer p = 2345 ;
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
@ -101,6 +171,29 @@ public class ChatApp {
}
ExecutorService exec = Executors.newFixedThreadPool(1000);
exec.submit(new Runner(app));
if (app.getMe().getPort() == 4000) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
app.modifierPseudo("Jean");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
app.modifierPseudo("Eliot");
/*try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
app.deconnexion(); */
}
}
public Utilisateur getMe() {
return me;
}
}
@ -111,7 +204,9 @@ class Runner implements Runnable {
}
@Override
public void run() {
if (app.getMe().getPort() != 4000) {
UDPEchange.ecouteUDP(app);
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -66,6 +66,16 @@ public class UDPEchange {
exec.submit(new RunnerUDP(data,app));
}
}
public static void envoiUnicast( InetAddress broadcastAdress , String broadcastMessage , Integer port) throws IOException {
// Envoie en broadcast à tous les utilsateurs
DatagramSocket socket = new DatagramSocket();
byte[]buffer = broadcastMessage.getBytes();
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port );
socket.send(packet);
socket.close();
System.out.println(broadcastMessage);
}
}
/**
@ -97,18 +107,64 @@ class RunnerUDP implements Runnable {
System.out.println(received);
String Type = received.split("\n")[0];
if (Type.equals("Connexion")) { // un utilisateur vient d'arriver sur le reseau
app.addList(Utilisateur.stringToUtilisateur(received.split("\n")[1]));
System.out.println("Reception d'une demande de connexion");
Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
String reponse = "Reponse Connexion\n";
if (!app.verifierUnicite(u.getPseudo())) {
System.out.println("Pseudo deja present dans la liste");
reponse += "false\n";
}
else {
System.out.println("Ajout d'un nouvel utilisateur dans la liste des Utilisateurs");
app.addList(u);
reponse += "true\n";
}
reponse += app.getMe().toString();
try {
UDPEchange.envoiUnicast(u.getIp(),reponse,u.getPort());
}catch(IOException e)
{
System.out.println("Echec de l'envoi du message");
}
app.afficherListeUtilisateurs();
}
if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion
app.afficherListeUtilisateurs();
}
if (Type.equals("Modification Pseudo")) {
if(app.verifierUnicite(received.split("\n")[2])) {
app.modifierList(received.split("\n")[1],received.split("\n")[2]);
Utilisateur Destination = app.getPseudoList(received.split("\n")[1]);
String Message = "Bon Choix Pseudo\n" + received.split("\n")[2] ;
try {
UDPEchange.envoiUnicast(Destination.getIp(),Message, 1234);
} catch (IOException e) {
e.printStackTrace();
}
}
else {
Utilisateur Destination = app.getPseudoList(received.split("\n")[1]);
String Message = "Mauvais Choix Pseudo\n" ;
try {
UDPEchange.envoiUnicast(Destination.getIp(),Message, 1234);
} catch (IOException e) {
e.printStackTrace();
}
}
app.afficherListeUtilisateurs();
}
if (Type.equals("Mauvais Choix Pseudo")) {
System.out.println("Ce choix de pseudo est déjà pris il te faut en choisir un autre");
}
if (Type.equals("Bon Choix Pseudo")) {
app.supprimerList(app.getMe());
app.getMe().setPseudo(received.split("\n")[1]);
app.addList(app.getMe());
}
if (Type.equals("Deconnexion")) {
app.supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1]));
app.afficherListeUtilisateurs();
}
}
}

Binary file not shown.

View file

@ -1,7 +1,7 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Utilisateur {
public class Utilisateur extends Object {
private String pseudo ;
private Integer port;
@ -57,4 +57,9 @@ public class Utilisateur {
return user;
}
public Boolean equals(Utilisateur u) {
return this.getPseudo().equals( u.getPseudo() ) ;
}
}