JOption pane pcq Swing c'est dur + jolis <p>
This commit is contained in:
parent
50af9cb4b6
commit
844ddcdc4d
1 changed files with 92 additions and 78 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.GridLayout;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
@ -6,7 +11,8 @@ import java.net.*;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Scanner; // Import the Scanner class
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
import java.util.ArrayList; // import the ArrayList class
|
import java.util.ArrayList; // import the ArrayList class
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,22 +36,25 @@ public class User{
|
||||||
protected UserListeningThreadUDP threadListeningUDP; // UDP listening thread (pour répondre aux nouveaux utilisateurs)
|
protected UserListeningThreadUDP threadListeningUDP; // UDP listening thread (pour répondre aux nouveaux utilisateurs)
|
||||||
protected UserListeningThreadTCP threadListeningTCP; // TCP listening thread (pour commencer une nouvelle conversation)
|
protected UserListeningThreadTCP threadListeningTCP; // TCP listening thread (pour commencer une nouvelle conversation)
|
||||||
|
|
||||||
/* Constructor of User (local)
|
/**
|
||||||
|
* Constructor of User (local)
|
||||||
* $parametres
|
* $parametres
|
||||||
* * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion
|
* * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion
|
||||||
* * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements
|
* * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements
|
||||||
* * portTCP : int => le numéro de port pour commencer une nouvelle conversation
|
* * portTCP : int => le numéro de port pour commencer une nouvelle conversation
|
||||||
*
|
* <p>
|
||||||
* $description : On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur
|
* On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur
|
||||||
* que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos et notification aux autres utilisateurs actifs)
|
* que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos et notification aux autres utilisateurs actifs)
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public User(int portUDPsend,int portUDPlistening,int portTCP) throws IOException{
|
public User(int portUDPsend,int portUDPlistening,int portTCP) throws IOException{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.addIP = InetAddress.getLocalHost();
|
this.addIP = InetAddress.getLocalHost();
|
||||||
}
|
}
|
||||||
catch(UnknownHostException e) {
|
catch(UnknownHostException e) {
|
||||||
System.out.println("Could not find local address!");
|
JOptionPane.showMessageDialog(null ,"Could not find local address!");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.portUDPsend = portUDPsend;
|
this.portUDPsend = portUDPsend;
|
||||||
|
@ -55,18 +64,20 @@ public class User{
|
||||||
this.initPseudo();
|
this.initPseudo();
|
||||||
|
|
||||||
this.active();
|
this.active();
|
||||||
|
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
|
/**
|
||||||
* Constructor of User (simulation of remote user)
|
* Constructor of User (simulation of remote user)
|
||||||
* $parametres
|
* $parametres
|
||||||
* * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion
|
* * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion
|
||||||
* * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements
|
* * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements
|
||||||
* * portTCP : int => le numéro de port pour commencer une nouvelle conversation
|
* * portTCP : int => le numéro de port pour commencer une nouvelle conversation
|
||||||
* * pseudo : String => le pseudo avec lequel on initie l'utilisateur distant (! pas de vérification)
|
* * pseudo : String => le pseudo avec lequel on initie l'utilisateur distant (! pas de vérification)
|
||||||
*
|
* <p>
|
||||||
* $description : On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur
|
* On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur
|
||||||
* que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos et notification aux autres utilisateurs actifs)
|
* que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos
|
||||||
|
* et notification aux autres utilisateurs actifs)
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public User(int portUDPsend,int portUDPlistening, int portTCP,String pseudo) {
|
public User(int portUDPsend,int portUDPlistening, int portTCP,String pseudo) {
|
||||||
try
|
try
|
||||||
|
@ -74,7 +85,7 @@ public class User{
|
||||||
this.addIP = InetAddress.getLocalHost();
|
this.addIP = InetAddress.getLocalHost();
|
||||||
}
|
}
|
||||||
catch(UnknownHostException e) {
|
catch(UnknownHostException e) {
|
||||||
System.out.println("Could not find local address!");
|
JOptionPane.showMessageDialog(null ,"Could not find local address!");
|
||||||
}
|
}
|
||||||
this.portUDPsend = portUDPsend;
|
this.portUDPsend = portUDPsend;
|
||||||
this.portUDPlistening = portUDPlistening;
|
this.portUDPlistening = portUDPlistening;
|
||||||
|
@ -119,58 +130,51 @@ public class User{
|
||||||
public void setPortUDPsend(int portUDPsend) {
|
public void setPortUDPsend(int portUDPsend) {
|
||||||
this.portUDPsend = portUDPsend;
|
this.portUDPsend = portUDPsend;
|
||||||
}
|
}
|
||||||
/*setPseudo
|
|
||||||
* $description
|
/**
|
||||||
* Demande à l'utilisateur de rentrer un pseudo et validation de ce dernier en demandant aux utilisateurs distants leurs informations
|
* <p>
|
||||||
|
* Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux
|
||||||
|
* utilisateurs distants leurs informations.
|
||||||
* On regarde si le pseudo est bien différent de l'ancien
|
* On regarde si le pseudo est bien différent de l'ancien
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void setPseudo() throws IOException {
|
private void setPseudo() throws IOException {
|
||||||
String oldPseudo = this.pseudo; //Saves the old one for comparison
|
String oldPseudo = this.pseudo; //Saves the old one for comparison
|
||||||
|
|
||||||
Scanner sc3 = new Scanner(System.in); // Create a Scanner object
|
String tmpPseudo = JOptionPane.showInputDialog(null, "Enter nickname:"); // Read user input
|
||||||
System.out.println("Enter new nickname :");
|
|
||||||
String tmpPseudo = sc3.nextLine(); // Read user input
|
|
||||||
|
|
||||||
while(!(this.validatePseudo(tmpPseudo)) || tmpPseudo.equals(oldPseudo)) {
|
while(!(this.validatePseudo(tmpPseudo)) || tmpPseudo.equals(oldPseudo)) {
|
||||||
System.out.println("Already exist, enter another nickname :");
|
tmpPseudo = JOptionPane.showInputDialog(null, "Already exist, enter another nickname :"); // Read user input
|
||||||
tmpPseudo = sc3.nextLine(); // Read user input
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.pseudo = tmpPseudo;
|
this.pseudo = tmpPseudo;
|
||||||
//myObj.close();
|
//myObj.close();
|
||||||
System.out.println("Your new nickname : " + tmpPseudo + " is valid !");
|
JOptionPane.showMessageDialog(null ,"Your new nickname : " + tmpPseudo + " is valid !");
|
||||||
|
|
||||||
notify_remote_user();
|
notify_remote_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
/*** PROCEDURES ***/
|
* <p>
|
||||||
|
* Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux
|
||||||
|
* utilisateurs distants leurs informations
|
||||||
/*initPseudo
|
* </p>
|
||||||
* $description
|
|
||||||
* Demande à l'utilisateur de rentrer un pseudo et validation de ce dernier en demandant aux utilisateurs distants leurs informations
|
|
||||||
*/
|
*/
|
||||||
public void initPseudo() throws IOException {
|
public void initPseudo() throws IOException {
|
||||||
Scanner sc1 = new Scanner(System.in); // Create a Scanner object
|
String tmpPseudo = JOptionPane.showInputDialog(null, "Enter nickname:"); // Read user input
|
||||||
System.out.println("Enter nickname :");
|
|
||||||
String tmpPseudo = sc1.nextLine(); // Read user input
|
|
||||||
|
|
||||||
while(!(this.validatePseudo(tmpPseudo))) { // On demande aux autres utilisateurs de nous envoyer leurs informations et on test si le pseudo est déjà utilisé
|
while(!(this.validatePseudo(tmpPseudo))) { // On demande aux autres utilisateurs de nous envoyer leurs informations et on test si le pseudo est déjà utilisé
|
||||||
System.out.println("Enter another nickname :");
|
tmpPseudo = JOptionPane.showInputDialog(null, "Enter another nickname:"); // Read user input
|
||||||
tmpPseudo = sc1.nextLine(); // Read user input
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.pseudo = tmpPseudo;
|
this.pseudo = tmpPseudo;
|
||||||
//sc1.close();
|
//sc1.close();
|
||||||
System.out.println("Your nickname : " + tmpPseudo + " is valid !");
|
JOptionPane.showMessageDialog(null ,"Your nickname : " + tmpPseudo + " is valid !");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TCPmessage(int index) throws IOException {
|
public void TCPmessage(int index) throws IOException {
|
||||||
Socket link=null;
|
Socket link=null;
|
||||||
|
String s1;
|
||||||
try {
|
try {
|
||||||
link=new Socket(this.userChatList.get(index).addIP,this.userChatList.get(index).portTCP);
|
link=new Socket(this.userChatList.get(index).addIP,this.userChatList.get(index).portTCP);
|
||||||
|
|
||||||
|
@ -194,7 +198,7 @@ public class User{
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
String input;
|
String input;
|
||||||
System.out.println(this.getPseudo()+" reçoit un message");
|
String s2 = (this.getPseudo()+" reçoit un message");
|
||||||
try {
|
try {
|
||||||
while (!(input=in.readLine()).equals("end")) {
|
while (!(input=in.readLine()).equals("end")) {
|
||||||
System.out.print("client_recoit:"+input);
|
System.out.print("client_recoit:"+input);
|
||||||
|
@ -217,14 +221,18 @@ public class User{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* validatePseudo
|
/**
|
||||||
* $parametres
|
* <p>
|
||||||
* *tmpPseudo : String => Le pseudo à valider
|
* *tmpPseudo : String => Le pseudo à valider
|
||||||
* $description
|
*</p><p>
|
||||||
* On envoi en broadcast (pour l'instant envoi sur les ports de notre ordinateur) d'une demande d'information
|
* Envoi en broadcast (pour l'instant envoi sur les ports de notre ordinateur) d'une demande d'information
|
||||||
* On attends les réponses pendant 5 secondes
|
*</p><p>
|
||||||
|
* On attend les réponses pendant 5 secondes
|
||||||
|
*</p><p>
|
||||||
* On valide le pseudo en fonction des pseudos reçu
|
* On valide le pseudo en fonction des pseudos reçu
|
||||||
* On en profites pour ajouter les utilisateurs répondant à notre liste d'utilisateur distant (RemoteUser)
|
*</p><p>
|
||||||
|
* On en profite pour ajouter les utilisateurs répondant à notre liste d'utilisateur distant (RemoteUser)
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public Boolean validatePseudo(String tmpPseudo) throws IOException {
|
public Boolean validatePseudo(String tmpPseudo) throws IOException {
|
||||||
|
|
||||||
|
@ -279,10 +287,10 @@ public class User{
|
||||||
tabresponse = response.split(":");
|
tabresponse = response.split(":");
|
||||||
|
|
||||||
// Affichage de la réponse
|
// Affichage de la réponse
|
||||||
System.out.println("Remote user n°"+nbReponse);
|
System.out.println("Remote user n°"+nbReponse+
|
||||||
System.out.println("\tIP : "+tabresponse[0]);
|
"\nIP : "+tabresponse[0]+
|
||||||
System.out.println("\tn°Port : "+tabresponse[1]);
|
"\nn°Port : "+tabresponse[1]+
|
||||||
System.out.println("\tpseudo : "+tabresponse[2]);
|
"\npseudo : "+tabresponse[2]);
|
||||||
|
|
||||||
// Si reception on ajoute l'utilisateur à notre liste d'utilisateur distant
|
// Si reception on ajoute l'utilisateur à notre liste d'utilisateur distant
|
||||||
this.addRemoteUser(InetAddress.getByName(tabresponse[0].split("/")[1]),Integer.parseInt(tabresponse[1]),tabresponse[2]);
|
this.addRemoteUser(InetAddress.getByName(tabresponse[0].split("/")[1]),Integer.parseInt(tabresponse[1]),tabresponse[2]);
|
||||||
|
@ -295,19 +303,22 @@ public class User{
|
||||||
dgramSocket.close();
|
dgramSocket.close();
|
||||||
|
|
||||||
if(!valid) {
|
if(!valid) {
|
||||||
System.out.println("Nickname : "+tmpPseudo +" is taken !");
|
JOptionPane.showMessageDialog(null ,"Nickname : "+tmpPseudo +" is taken !");
|
||||||
}
|
}
|
||||||
|
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*addRemoteUser
|
/**
|
||||||
* $parametres
|
* <p>
|
||||||
* *remoteUserIP : InetAddress => l'adresse IP de l'utilisateur distant
|
* *remoteUserIP : InetAddress => l'adresse IP de l'utilisateur distant
|
||||||
|
* </p><p>
|
||||||
* *remoteUserPortTCP : int => le numéro de port TCP d'écoute de l'utilisateur distant
|
* *remoteUserPortTCP : int => le numéro de port TCP d'écoute de l'utilisateur distant
|
||||||
|
* </p><p>
|
||||||
* *remoteUserPseudo : String => le pseudo de l'utilisateur distant
|
* *remoteUserPseudo : String => le pseudo de l'utilisateur distant
|
||||||
* $description
|
* </p><p>
|
||||||
* On ajoute ou mise à jour l'utilisateur distant dans notre liste d'utilisateur distant
|
* Ajout ou mise à jour l'utilisateur distant dans notre liste d'utilisateur distant
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public void addRemoteUser(InetAddress remoteUserIP, int remoteUserPortTCP,String remoteUserPseudo) {
|
public void addRemoteUser(InetAddress remoteUserIP, int remoteUserPortTCP,String remoteUserPseudo) {
|
||||||
RemoteUser tmpRemoteUser = new RemoteUser(remoteUserIP,remoteUserPortTCP,remoteUserPseudo);
|
RemoteUser tmpRemoteUser = new RemoteUser(remoteUserIP,remoteUserPortTCP,remoteUserPseudo);
|
||||||
|
@ -322,9 +333,10 @@ public class User{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* notify_remote_user
|
/**
|
||||||
* $description
|
* <p>
|
||||||
* En utilisant le port UDP d'envoi, on envoi en broadcast les informations nous concernant
|
* En utilisant le port UDP d'envoi, on envoie en broadcast les informations nous concernant
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public void notify_remote_user() {
|
public void notify_remote_user() {
|
||||||
// Création du socket d'envoi d'information
|
// Création du socket d'envoi d'information
|
||||||
|
@ -364,11 +376,14 @@ public class User{
|
||||||
dgramSocket.close();
|
dgramSocket.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*active
|
/**
|
||||||
* $ description
|
* <p>
|
||||||
* On démarre un thread d'écoute UDP pour répondre au nouveaux utilisateurs
|
* On démarre un thread d'écoute UDP pour répondre au nouveaux utilisateurs,
|
||||||
* On démarre un thread d'écoute TCP pour commencer une conversation avec les utilisateurs actifs
|
* </p><p>
|
||||||
* On notifie les utilisateurs distants actifs de notre passage en mode actif (envoi de nos informations)
|
* On démarre un thread d'écoute TCP pour commencer une conversation avec les utilisateurs actifs,
|
||||||
|
* </p><p>
|
||||||
|
* On notifie les utilisateurs distants actifs de notre passage en mode actif (envoi de nos informations)
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
private void active() {
|
private void active() {
|
||||||
this.threadListeningUDP = new UserListeningThreadUDP("UDP Listening thread",this);
|
this.threadListeningUDP = new UserListeningThreadUDP("UDP Listening thread",this);
|
||||||
|
@ -382,39 +397,39 @@ public class User{
|
||||||
this.actif=true;
|
this.actif=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*printRemoteUserList
|
/**
|
||||||
* $descrition
|
* <p>
|
||||||
* Affichage de la liste d'utilisateur actif avec leurs index dans la liste
|
* Affichage de la liste d'utilisateurs actifs avec leurs index dans la liste
|
||||||
|
* </p>
|
||||||
*/
|
*/
|
||||||
public void printRemoteUserList() {
|
public void printRemoteUserList() {
|
||||||
System.out.println("\nInternal list of active remote users:");
|
System.out.println("Internal list of active remote users:");
|
||||||
|
|
||||||
for(int i=0; i<this.remoteUserList.size(); i++) {
|
for(int i=0; i<this.remoteUserList.size(); i++) {
|
||||||
System.out.println("- ("+i+") Username: " + this.remoteUserList.get(i).getPseudo());
|
System.out.println("- ("+i+") Username: " + this.remoteUserList.get(i).getPseudo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*getOneActiveUser
|
/**
|
||||||
* $description
|
* <p>
|
||||||
* Laisse l'utilisateur choisir parmis la liste d'utilisateur actif celui avec lequel il souhaite échangé via un chat
|
* Laisse l'utilisateur choisir parmis la liste d'utilisateurs actifs celui avec lequel il souhaite échanger via un chat
|
||||||
|
*</p>
|
||||||
*/
|
*/
|
||||||
public void getOneActiveUser() throws IOException {
|
public void getOneActiveUser() throws IOException {
|
||||||
this.printRemoteUserList();
|
this.printRemoteUserList();
|
||||||
Scanner sc2= new Scanner(System.in);
|
int index=Integer.parseInt(JOptionPane.showInputDialog(null, "Please, enter index of one active user that you saw on the list to start a conversation with:"));
|
||||||
System.out.println("Please, enter index of one active user that you saw on the list to start a conversation with:");
|
|
||||||
int index=Integer.parseInt(sc2.nextLine());
|
|
||||||
|
|
||||||
if (index >= 0 && index<remoteUserList.size()) {
|
if (index >= 0 && index<remoteUserList.size()) {
|
||||||
if(userChatList.contains(remoteUserList.get(index))) {
|
if(userChatList.contains(remoteUserList.get(index))) {
|
||||||
System.out.println("User "+remoteUserList.get(index).getPseudo()+" is already in chat with you");
|
JOptionPane.showMessageDialog(null ,"User "+remoteUserList.get(index).getPseudo()+" is already in chat with you");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
userChatList.add(remoteUserList.get(index));
|
userChatList.add(remoteUserList.get(index));
|
||||||
System.out.println("New chat with "+remoteUserList.get(index).getPseudo());
|
JOptionPane.showMessageDialog(null ,"New chat with "+remoteUserList.get(index).getPseudo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
System.out.println("Wrong index (no active at index number "+index+" )");
|
JOptionPane.showMessageDialog(null ,"Wrong index (no active at index number "+index+" )");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.TCPmessage(index);
|
this.TCPmessage(index);
|
||||||
|
@ -422,7 +437,6 @@ public class User{
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException, InterruptedException {
|
public static void main(String[] args) throws IOException, InterruptedException {
|
||||||
|
|
||||||
// Création des utilisateurs
|
// Création des utilisateurs
|
||||||
User usr2 = new User(12226,portUDPlistening_remoteUsr2,22222,"Mike"); // simulation d'un utilisateur distant n1
|
User usr2 = new User(12226,portUDPlistening_remoteUsr2,22222,"Mike"); // simulation d'un utilisateur distant n1
|
||||||
User usr3 = new User(12224,portUDPlistening_remoteUsr3,22223,"Alice"); // simulation d'un utilisateur distant n2
|
User usr3 = new User(12224,portUDPlistening_remoteUsr3,22223,"Alice"); // simulation d'un utilisateur distant n2
|
||||||
|
@ -446,7 +460,7 @@ public class User{
|
||||||
usr1.threadListeningTCP.close();
|
usr1.threadListeningTCP.close();
|
||||||
usr2.threadListeningTCP.close();
|
usr2.threadListeningTCP.close();
|
||||||
usr3.threadListeningTCP.close();
|
usr3.threadListeningTCP.close();
|
||||||
System.out.println("End");
|
JOptionPane.showMessageDialog(null ,"End");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue