Fin de connexion et deconnexion
這個提交存在於:
父節點
e419412d8f
當前提交
5997873d6f
共有 8 個檔案被更改,包括 102 行新增 和 13 行删除
未顯示二進位檔案。
|
@ -15,6 +15,17 @@ 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,9 +63,11 @@ 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 ) {
|
||||||
|
Integer port = p ;
|
||||||
UDPEchange.connexion(broadcastAdress,broadcastMessage, port);
|
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 ) {
|
||||||
|
Integer port = p ;
|
||||||
UDPEchange.connexion(broadcastAdress,broadcastMessage, port);
|
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 ;
|
||||||
|
|
未顯示二進位檔案。
|
@ -13,9 +13,13 @@ 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) {
|
||||||
|
if((verifierUnicite(u.getPseudo()))) {
|
||||||
this.actifUsers.add(u);
|
this.actifUsers.add(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recuperer un utilisateur à partir de son pseudo
|
* Recuperer un utilisateur à partir de son pseudo
|
||||||
*
|
*
|
||||||
|
|
未顯示二進位檔案。
未顯示二進位檔案。
未顯示二進位檔案。
|
@ -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);
|
||||||
|
@ -63,6 +69,7 @@ public class UDPEchange {
|
||||||
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]));
|
||||||
}
|
}
|
||||||
|
|
載入中…
新增問題並參考