clean + comments
This commit is contained in:
parent
48594fc3e1
commit
ef7515bc0c
50 changed files with 322 additions and 245 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,8 +5,8 @@
|
||||||
"port": 8080
|
"port": 8080
|
||||||
},
|
},
|
||||||
"config":{
|
"config":{
|
||||||
"interface": "wlan3",
|
"interface": "wlan4",
|
||||||
"portSrc": 26001,
|
"portSrc": 26000,
|
||||||
"portDest":26000
|
"portDest":26001
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,8 +7,8 @@ public class Configuration {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private SConf sConf;
|
private SConf sConf; //Configuration du serveur
|
||||||
private Conf conf;
|
private Conf conf; //Configuration réseau
|
||||||
|
|
||||||
|
|
||||||
public Configuration() {
|
public Configuration() {
|
||||||
|
|
|
@ -30,9 +30,7 @@ public class Agent implements PropertyChangeListener{
|
||||||
private Contact user;
|
private Contact user;
|
||||||
private UDPInput BIn;
|
private UDPInput BIn;
|
||||||
private UDPOutput BOut;
|
private UDPOutput BOut;
|
||||||
//private TCPChat TCPSend;
|
|
||||||
private TCPServer server;
|
private TCPServer server;
|
||||||
//private ListeContacts list;
|
|
||||||
private InetAddress localAddress;
|
private InetAddress localAddress;
|
||||||
private InetAddress broadcast;
|
private InetAddress broadcast;
|
||||||
private ArrayList<TCPChat> listTCPOk;
|
private ArrayList<TCPChat> listTCPOk;
|
||||||
|
@ -43,15 +41,13 @@ public class Agent implements PropertyChangeListener{
|
||||||
|
|
||||||
private boolean open = true;
|
private boolean open = true;
|
||||||
|
|
||||||
|
//Création d'un agent lors de l'inscription (première connexion)
|
||||||
public Agent(InetAddress address, int portIn, int portOut) throws IOException {
|
public Agent(InetAddress address, int portIn, int portOut) throws IOException {
|
||||||
this.user = new Contact("", address, portIn);
|
this.user = new Contact("", address, portIn);
|
||||||
this.BIn = new UDPInput(user.getAddress(), portIn);
|
this.BIn = new UDPInput(user.getAddress(), portIn);
|
||||||
this.BOut = new UDPOutput(user, portOut);
|
this.BOut = new UDPOutput(user, portOut);
|
||||||
this.server = new TCPServer(user.getPort(), user.getAddress());
|
this.server = new TCPServer(user.getPort(), user.getAddress());
|
||||||
this.server.addPropertyChangeListener(this);
|
this.server.addPropertyChangeListener(this);
|
||||||
//this.TCPSend = new TCPChat(user);
|
|
||||||
//this.list = ListeContacts.getInstance();
|
|
||||||
this.localAddress=Tools.getAdress()[0];
|
this.localAddress=Tools.getAdress()[0];
|
||||||
this.broadcast= Tools.getAdress()[1];
|
this.broadcast= Tools.getAdress()[1];
|
||||||
this.db = DataBase.getInstance();
|
this.db = DataBase.getInstance();
|
||||||
|
@ -62,7 +58,7 @@ public class Agent implements PropertyChangeListener{
|
||||||
BIn.start();
|
BIn.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
//user ayant déjà fait une connexion
|
//Création d'un agent par un user ayant déjà fait une connexion
|
||||||
public Agent(InetAddress address, int portIn, int portOut, String login) throws IOException {
|
public Agent(InetAddress address, int portIn, int portOut, String login) throws IOException {
|
||||||
this.db = DataBase.getInstance();
|
this.db = DataBase.getInstance();
|
||||||
this.user = new Contact(db.getPseudoFromLogin(login), address, portIn);
|
this.user = new Contact(db.getPseudoFromLogin(login), address, portIn);
|
||||||
|
@ -70,8 +66,6 @@ public class Agent implements PropertyChangeListener{
|
||||||
this.BOut = new UDPOutput(user, portOut);
|
this.BOut = new UDPOutput(user, portOut);
|
||||||
this.server = new TCPServer(user.getPort(), user.getAddress());
|
this.server = new TCPServer(user.getPort(), user.getAddress());
|
||||||
this.server.addPropertyChangeListener(this);
|
this.server.addPropertyChangeListener(this);
|
||||||
//this.TCPSend = new TCPChat(user);
|
|
||||||
//this.list = ListeContacts.getInstance();
|
|
||||||
this.localAddress=Tools.getAdress()[0];
|
this.localAddress=Tools.getAdress()[0];
|
||||||
this.broadcast= Tools.getAdress()[1];
|
this.broadcast= Tools.getAdress()[1];
|
||||||
this.listTCPOk = new ArrayList<TCPChat>();
|
this.listTCPOk = new ArrayList<TCPChat>();
|
||||||
|
@ -85,7 +79,6 @@ public class Agent implements PropertyChangeListener{
|
||||||
public void propertyChange(PropertyChangeEvent evt) {
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
switch (evt.getPropertyName()) {
|
switch (evt.getPropertyName()) {
|
||||||
case "Msg UDP Recu" :
|
case "Msg UDP Recu" :
|
||||||
//System.out.println("envoi message");
|
|
||||||
Message msg = BIn.getMessage();
|
Message msg = BIn.getMessage();
|
||||||
try {
|
try {
|
||||||
handleMessage(msg);
|
handleMessage(msg);
|
||||||
|
@ -94,7 +87,6 @@ public class Agent implements PropertyChangeListener{
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "session chat demarree" :
|
case "session chat demarree" :
|
||||||
//System.out.println("dans session demarree");
|
|
||||||
TCPChat tcpChat = this.server.getConnexionTCPChat();
|
TCPChat tcpChat = this.server.getConnexionTCPChat();
|
||||||
tcpChat.addPropertyChangeListener(this);
|
tcpChat.addPropertyChangeListener(this);
|
||||||
this.listTCPOk.add(tcpChat);
|
this.listTCPOk.add(tcpChat);
|
||||||
|
@ -105,10 +97,8 @@ public class Agent implements PropertyChangeListener{
|
||||||
SimpleAttributeSet left = new SimpleAttributeSet();
|
SimpleAttributeSet left = new SimpleAttributeSet();
|
||||||
StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
|
StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
|
||||||
StyleConstants.setForeground(left, c.brighter());
|
StyleConstants.setForeground(left, c.brighter());
|
||||||
//System.out.println("dans property change");
|
|
||||||
TCPChat tcpChatCo = this.listTCPOk.get(0);
|
TCPChat tcpChatCo = this.listTCPOk.get(0);
|
||||||
MessageChat msgRecu = tcpChatCo.getMessageRecu();
|
MessageChat msgRecu = tcpChatCo.getMessageRecu();
|
||||||
//FenetreChat.getTa().append("kevin"+ " : "+msgRecu.getMessage()+"\n");
|
|
||||||
if(FenetreChat.isOuvert()) {
|
if(FenetreChat.isOuvert()) {
|
||||||
StyledDocument doc = FenetreChat.getDoc();
|
StyledDocument doc = FenetreChat.getDoc();
|
||||||
try {
|
try {
|
||||||
|
@ -127,55 +117,56 @@ public class Agent implements PropertyChangeListener{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*type 0 : premier message de broadcast
|
/* type 0 : premier message de broadcast
|
||||||
* type, 1 : deuxieme message de broadcast avec pseudo
|
* type, 1 : deuxieme message de broadcast avec pseudo
|
||||||
* type 2 : Message de déconnexion
|
* type 2 : Message de déconnexion
|
||||||
* type 3 : message pseudo changé
|
* type 3 : message pseudo changé
|
||||||
* type 4 : Message affichage
|
|
||||||
* type 5 : Message chat
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public void handleMessage(Message msg) throws IOException {
|
public void handleMessage(Message msg) throws IOException {
|
||||||
switch(msg.getTypeMessage()) {
|
switch(msg.getTypeMessage()) {
|
||||||
|
|
||||||
|
//message broadcast sans pseudo pour signaler son arrivée
|
||||||
|
//action : répondre par un message avec notre pseudo
|
||||||
case 0 :
|
case 0 :
|
||||||
//System.out.println("Envoi message présentation");
|
|
||||||
MessagePseudo msgPresentation = new MessagePseudo(this.localAddress, msg.getAddressSrc(), this.user.getPort(), msg.getPortSrc(), 1, this.user.getPseudo(), this.user.getId(), "");
|
MessagePseudo msgPresentation = new MessagePseudo(this.localAddress, msg.getAddressSrc(), this.user.getPort(), msg.getPortSrc(), 1, this.user.getPseudo(), this.user.getId(), "");
|
||||||
BOut.send(msgPresentation, msg.getAddressSrc(), msg.getPortSrc());
|
BOut.send(msgPresentation, msg.getAddressSrc(), msg.getPortSrc());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//message broadcast avec pseudo
|
||||||
|
//action : on vérifie que le pseudo appartient à une personne active dans la liste du serveur et on l'ajoute dans la liste de la fenetre menu
|
||||||
case 1 :
|
case 1 :
|
||||||
MessagePseudo msgPseudo = (MessagePseudo) msg;
|
MessagePseudo msgPseudo = (MessagePseudo) msg;
|
||||||
boolean pseudoExist = Request.sendPseudo(msgPseudo.getPseudo(), "pseudoOK");
|
boolean pseudoExist = Request.sendPseudo(msgPseudo.getPseudo(), "pseudoOK");
|
||||||
if(!pseudoExist) {
|
if(!pseudoExist) {
|
||||||
Contact newUser = new Contact(msgPseudo.getPseudo(), msgPseudo.getAddressSrc(), msgPseudo.getPortSrc());
|
Contact newUser = new Contact(msgPseudo.getPseudo(), msgPseudo.getAddressSrc(), msgPseudo.getPortSrc());
|
||||||
//Request.sendUser(msgPseudo.getPseudo(), msgPseudo.getAddressSrc().toString(), Integer.toString(msgPseudo.getPortSrc()), "addUser");
|
|
||||||
//list.addContact(newUser);
|
|
||||||
if(FenetreMenu.ouvert) {
|
if(FenetreMenu.ouvert) {
|
||||||
FenetreMenu.getCb().addItem(newUser.getPseudo());
|
FenetreMenu.getCb().addItem(newUser.getPseudo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//message de deconnexion
|
||||||
|
//action : vérifier que le pseudo n'existe plus dans la liste des actifs du serveur et le supprimer de la liste de la fenetre menu
|
||||||
|
//fermeture de la fenetre chat entre le user et la personne qui se deconnecte si elle est ouverte
|
||||||
case 2 :
|
case 2 :
|
||||||
MessagePseudo messageDeconnexion = (MessagePseudo) msg;
|
MessagePseudo messageDeconnexion = (MessagePseudo) msg;
|
||||||
boolean pseudoExiste = Request.sendPseudo(messageDeconnexion.getPseudo(), "pseudoOK");
|
boolean pseudoExiste = Request.sendPseudo(messageDeconnexion.getPseudo(), "pseudoOK");
|
||||||
if(pseudoExiste){
|
if(pseudoExiste){
|
||||||
//Request.sendDeconnexion(Integer.toString(messageDeconnexion.getId()),messageDeconnexion.getPseudo(), "deconnexion");
|
|
||||||
FenetreMenu.getCb().removeItem(messageDeconnexion.getPseudo());
|
FenetreMenu.getCb().removeItem(messageDeconnexion.getPseudo());
|
||||||
|
|
||||||
}
|
}
|
||||||
//fermeture de la fenetre chat le user et la personne qui se deconnecte
|
|
||||||
if(FenetreChat.isOuvert()&&FenetreChat.getDest().getPseudo().equals(messageDeconnexion.getPseudo())) {
|
if(FenetreChat.isOuvert()&&FenetreChat.getDest().getPseudo().equals(messageDeconnexion.getPseudo())) {
|
||||||
FenetreChat.fermer();
|
FenetreChat.fermer();
|
||||||
//getTCPChat().getSocket().close();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
//message pseudo changé
|
||||||
|
//action : mettre à jour la liste des users de la fenetre pseudo avec le nouveau pseudo
|
||||||
case 3 :
|
case 3 :
|
||||||
MessagePseudo messageNewPseudo = (MessagePseudo) msg;
|
MessagePseudo messageNewPseudo = (MessagePseudo) msg;
|
||||||
this.open = false;
|
this.open = false;
|
||||||
//Contact contact = list.findContact(messageNewPseudo.getPseudo());
|
for(int i = 0 ; i<FenetreMenu.getCb().getItemCount() ; i++){
|
||||||
//int id = this.db.getIdFromPseudo(contact.getPseudo());
|
|
||||||
for(int i = 0 ; i<FenetreMenu.getCb().getItemCount() ; i++){//Combo étant ton JComboBox
|
|
||||||
String pseudo = (String) FenetreMenu.getCb().getItemAt(i);
|
String pseudo = (String) FenetreMenu.getCb().getItemAt(i);
|
||||||
if(pseudo.equals(messageNewPseudo.getAncienPseudo())) {
|
if(pseudo.equals(messageNewPseudo.getAncienPseudo())) {
|
||||||
FenetreMenu.getCb().removeItem(pseudo);
|
FenetreMenu.getCb().removeItem(pseudo);
|
||||||
|
@ -186,18 +177,27 @@ public class Agent implements PropertyChangeListener{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Première connexion -> inscription
|
||||||
public boolean connectInscription(String pseudo, String login) throws IOException, InterruptedException {
|
public boolean connectInscription(String pseudo, String login) throws IOException, InterruptedException {
|
||||||
|
|
||||||
|
//Envoi d'un message de broadcast sans pseudo
|
||||||
MessagePseudo msg_connexion = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 0, "", this.user.getId(), "");
|
MessagePseudo msg_connexion = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 0, "", this.user.getId(), "");
|
||||||
BOut.send(msg_connexion, this.broadcast, App.portDest);
|
BOut.send(msg_connexion, this.broadcast, App.portDest);
|
||||||
|
|
||||||
|
//Attente pour avoir le temps de recevoir les réponses des users actifs
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
|
|
||||||
|
//On gère toutes les réponses reçues après notre broadcast
|
||||||
ArrayList<MessagePseudo> msg_recus = BIn.getListMessage();
|
ArrayList<MessagePseudo> msg_recus = BIn.getListMessage();
|
||||||
for(int i =0; i<msg_recus.size(); i++) {
|
for(int i =0; i<msg_recus.size(); i++) {
|
||||||
handleMessage(msg_recus.get(i));
|
handleMessage(msg_recus.get(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Choix du pseudo
|
||||||
boolean pseudoOK = choisirPseudo(pseudo);
|
boolean pseudoOK = choisirPseudo(pseudo);
|
||||||
//list.addContact(user);
|
|
||||||
|
|
||||||
|
//Si le pseudo est acceptable :
|
||||||
|
//Envoi d'un message de broadcast avec le pseudo
|
||||||
if(pseudoOK){
|
if(pseudoOK){
|
||||||
Request.sendUser(pseudo, this.localAddress.toString(), Integer.toString(App.portSrc), "addUser");
|
Request.sendUser(pseudo, this.localAddress.toString(), Integer.toString(App.portSrc), "addUser");
|
||||||
int id = db.addUser(pseudo, login);
|
int id = db.addUser(pseudo, login);
|
||||||
|
@ -205,23 +205,33 @@ public class Agent implements PropertyChangeListener{
|
||||||
MessagePseudo msgPresentation = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 1, this.user.getPseudo(), this.user.getId(), "");
|
MessagePseudo msgPresentation = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 1, this.user.getPseudo(), this.user.getId(), "");
|
||||||
BOut.send(msgPresentation, this.broadcast, App.portDest);
|
BOut.send(msgPresentation, this.broadcast, App.portDest);
|
||||||
this.user.setStatut("En ligne");
|
this.user.setStatut("En ligne");
|
||||||
//System.out.println("Connexion réussie avec le pseudo : "+pseudo);
|
|
||||||
}else {
|
}else {
|
||||||
System.out.println("Echec de la connexion, veuillez choisir un autre pseudo");
|
System.out.println("Echec de la connexion, veuillez choisir un autre pseudo");
|
||||||
}
|
}
|
||||||
return pseudoOK;
|
return pseudoOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Connexion (une inscription a déjà eu lieu)
|
||||||
public boolean connectConnexion(String pseudo, String login) throws IOException, InterruptedException {
|
public boolean connectConnexion(String pseudo, String login) throws IOException, InterruptedException {
|
||||||
|
|
||||||
|
//Envoi d'un message de broadcast sans pseudo
|
||||||
MessagePseudo msg_connexion = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 0, "", this.user.getId(), "");
|
MessagePseudo msg_connexion = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 0, "", this.user.getId(), "");
|
||||||
BOut.send(msg_connexion, this.broadcast, App.portDest);
|
BOut.send(msg_connexion, this.broadcast, App.portDest);
|
||||||
|
|
||||||
|
//Attente pour avoir le temps de recevoir les réponses des users actifs
|
||||||
Thread.sleep(2000);
|
Thread.sleep(2000);
|
||||||
|
|
||||||
|
//On gère toutes les réponses reçues après notre broadcast
|
||||||
ArrayList<MessagePseudo> msg_recus = BIn.getListMessage();
|
ArrayList<MessagePseudo> msg_recus = BIn.getListMessage();
|
||||||
for(int i =0; i<msg_recus.size(); i++) {
|
for(int i =0; i<msg_recus.size(); i++) {
|
||||||
handleMessage(msg_recus.get(i));
|
handleMessage(msg_recus.get(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Choix du pseudo
|
||||||
boolean pseudoOK = choisirPseudo(pseudo);
|
boolean pseudoOK = choisirPseudo(pseudo);
|
||||||
//list.addContact(user);
|
|
||||||
|
//Si le pseudo est acceptable :
|
||||||
|
//Envoi d'un message de broadcast avec le pseudo
|
||||||
if(pseudoOK){
|
if(pseudoOK){
|
||||||
Request.sendUser(pseudo, this.localAddress.toString(), Integer.toString(App.portSrc), "addUser");
|
Request.sendUser(pseudo, this.localAddress.toString(), Integer.toString(App.portSrc), "addUser");
|
||||||
int id = db.getIdFromLogin(login);
|
int id = db.getIdFromLogin(login);
|
||||||
|
@ -230,19 +240,22 @@ public class Agent implements PropertyChangeListener{
|
||||||
BOut.send(msgPresentation, this.broadcast, App.portDest);
|
BOut.send(msgPresentation, this.broadcast, App.portDest);
|
||||||
db.updateStatus(id, "En ligne");
|
db.updateStatus(id, "En ligne");
|
||||||
this.user.setStatut("En ligne");
|
this.user.setStatut("En ligne");
|
||||||
//System.out.println("Connexion réussie avec le pseudo : "+pseudo);
|
|
||||||
}else {
|
}else {
|
||||||
System.out.println("Echec de la connexion, veuillez choisir un autre pseudo");
|
System.out.println("Echec de la connexion, veuillez choisir un autre pseudo");
|
||||||
}
|
}
|
||||||
return pseudoOK;
|
return pseudoOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Choix du pseudo
|
||||||
public boolean choisirPseudo(String pseudo) throws IOException {
|
public boolean choisirPseudo(String pseudo) throws IOException {
|
||||||
|
|
||||||
|
//On demande au serveur si le pseudo peut être utilisé
|
||||||
boolean pseudoExist = Request.sendPseudo(pseudo, "pseudoOK");
|
boolean pseudoExist = Request.sendPseudo(pseudo, "pseudoOK");
|
||||||
|
|
||||||
if(pseudoExist){
|
if(pseudoExist){
|
||||||
|
//Le pseudo est OK on l'attribue au user
|
||||||
user.setPseudo(pseudo);
|
user.setPseudo(pseudo);
|
||||||
//System.out.println("Pseudo set : "+pseudo);
|
|
||||||
return true;
|
return true;
|
||||||
}else {
|
}else {
|
||||||
System.out.println("Pseudo déjà utilisé");
|
System.out.println("Pseudo déjà utilisé");
|
||||||
|
@ -250,35 +263,47 @@ public class Agent implements PropertyChangeListener{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Déconnexion
|
||||||
public void deconnexion() throws IOException {
|
public void deconnexion() throws IOException {
|
||||||
|
|
||||||
|
//On notifie le serveur de la deconnexion
|
||||||
Request.sendDeconnexion(Integer.toString(this.user.getId()),this.user.getPseudo(), "deconnexion");
|
Request.sendDeconnexion(Integer.toString(this.user.getId()),this.user.getPseudo(), "deconnexion");
|
||||||
|
|
||||||
|
//On envoie un message de deconnexion en broadcast
|
||||||
MessagePseudo msgDeconnexion = new MessagePseudo(this.localAddress, this.broadcast, App.portSrc, App.portDest, 2, this.user.getPseudo(), this.user.getId(), "");
|
MessagePseudo msgDeconnexion = new MessagePseudo(this.localAddress, this.broadcast, App.portSrc, App.portDest, 2, this.user.getPseudo(), this.user.getId(), "");
|
||||||
BOut.send(msgDeconnexion, this.broadcast, App.portSrc);
|
BOut.send(msgDeconnexion, this.broadcast, App.portSrc);
|
||||||
|
|
||||||
|
//Fermeture socket
|
||||||
this.BIn.interrupt();
|
this.BIn.interrupt();
|
||||||
this.BOut.getSocket().close();
|
this.BOut.getSocket().close();
|
||||||
//this.server.getSocket().close();
|
|
||||||
this.server.interrupt();
|
this.server.interrupt();
|
||||||
//list.deleteContact(user);
|
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Changement du pseudo
|
||||||
public boolean changerPseudo(String pseudo) throws IOException {
|
public boolean changerPseudo(String pseudo) throws IOException {
|
||||||
|
|
||||||
String ancienPseudo = user.getPseudo();
|
String ancienPseudo = user.getPseudo();
|
||||||
|
|
||||||
|
//Vérification que le nouveau pseudo est acceptable
|
||||||
boolean changeOK = choisirPseudo(pseudo);
|
boolean changeOK = choisirPseudo(pseudo);
|
||||||
|
|
||||||
|
//Si le changement est acceptable :
|
||||||
|
//Changement du pseudo dans la base de donnée
|
||||||
|
//Notification du serveur du changement
|
||||||
|
//Envoi message de broadcast avec le nouveau pseudo
|
||||||
if(changeOK){
|
if(changeOK){
|
||||||
//System.out.println("Pseudo changé à : "+pseudo);
|
|
||||||
db.updatePseudo(this.user.getId(), pseudo);
|
db.updatePseudo(this.user.getId(), pseudo);
|
||||||
//list.modifierListe(ancienPseudo, pseudo);
|
|
||||||
Request.sendPseudoChange(ancienPseudo, pseudo, "pseudoChanged");
|
Request.sendPseudoChange(ancienPseudo, pseudo, "pseudoChanged");
|
||||||
MessagePseudo msgNewPseudo = new MessagePseudo(this.localAddress, this.broadcast, App.portSrc, App.portDest, 3, pseudo, this.user.getId(), ancienPseudo);
|
MessagePseudo msgNewPseudo = new MessagePseudo(this.localAddress, this.broadcast, App.portSrc, App.portDest, 3, pseudo, this.user.getId(), ancienPseudo);
|
||||||
BOut.send(msgNewPseudo, this.broadcast, App.portSrc);
|
BOut.send(msgNewPseudo, this.broadcast, App.portSrc);
|
||||||
return true;
|
return true;
|
||||||
}else {
|
}else {
|
||||||
//System.out.println("Veuillez choisir un autre pseudo");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Vérification que le chat en paramètre existe déjà ou non
|
||||||
public boolean chatExists(int destID) {
|
public boolean chatExists(int destID) {
|
||||||
boolean chatExists = false;
|
boolean chatExists = false;
|
||||||
for(TCPChat tcp : listTCPDeg) {
|
for(TCPChat tcp : listTCPDeg) {
|
||||||
|
@ -289,23 +314,26 @@ public class Agent implements PropertyChangeListener{
|
||||||
return chatExists;
|
return chatExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Création d'un chat
|
||||||
public void createChat (int destId, String destPseudo) throws IOException {
|
public void createChat (int destId, String destPseudo) throws IOException {
|
||||||
|
//Vérification de l'existence du chat
|
||||||
boolean chatExists = chatExists(destId);
|
boolean chatExists = chatExists(destId);
|
||||||
|
|
||||||
|
//Si le chat n'existe pas encore
|
||||||
if(!chatExists) {
|
if(!chatExists) {
|
||||||
|
|
||||||
|
//Vérification que le destinataire est bien dans la liste des user actifs
|
||||||
boolean isNotOnList = Request.sendPseudo(destPseudo, "pseudoOK");
|
boolean isNotOnList = Request.sendPseudo(destPseudo, "pseudoOK");
|
||||||
|
|
||||||
|
//Si le destinataire est actif :
|
||||||
|
//Création d'un TCPChat
|
||||||
if(!isNotOnList) {
|
if(!isNotOnList) {
|
||||||
Contact dest = Request.getUser(destPseudo, "getUser");
|
Contact dest = Request.getUser(destPseudo, "getUser");
|
||||||
TCPChat connexionTCP = new TCPChat(dest, destId);
|
TCPChat connexionTCP = new TCPChat(dest, destId);
|
||||||
listTCPDeg.add(connexionTCP);
|
listTCPDeg.add(connexionTCP);
|
||||||
connexionTCP.addPropertyChangeListener(this);
|
connexionTCP.addPropertyChangeListener(this);
|
||||||
}
|
}
|
||||||
/*for(Contact user : list.getListe()) {
|
|
||||||
if(user.getPseudo().equals(destPseudo)) {
|
|
||||||
TCPChat connexionTCP = new TCPChat(user, destId);
|
|
||||||
listTCPDeg.add(connexionTCP);
|
|
||||||
connexionTCP.addPropertyChangeListener(this);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,42 +346,22 @@ public class Agent implements PropertyChangeListener{
|
||||||
this.support.removePropertyChangeListener(propertyName,pcl);
|
this.support.removePropertyChangeListener(propertyName,pcl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Contact getUser() {
|
public Contact getUser() {
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void setUser(Contact user) {
|
public void setUser(Contact user) {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*public ListeContacts getList() {
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void setList(ListeContacts list) {
|
|
||||||
this.list = list;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
public DataBase getDb() {
|
public DataBase getDb() {
|
||||||
return db;
|
return db;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void setDb(DataBase db) {
|
public void setDb(DataBase db) {
|
||||||
this.db = db;
|
this.db = db;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ArrayList<TCPChat> getListeTCPChat(){
|
public ArrayList<TCPChat> getListeTCPChat(){
|
||||||
return listTCPDeg;
|
return listTCPDeg;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
connexion = DriverManager.getConnection("jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_018?useSSL=false", "tp_servlet_018", "Taey2Aje");
|
connexion = DriverManager.getConnection("jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_018?useSSL=false", "tp_servlet_018", "Taey2Aje");
|
||||||
//connexion = DriverManager.getConnection("jdbc:mysql://localhost/test?characterEncoding=utf8", "root","root");
|
|
||||||
}catch(SQLException e) {
|
}catch(SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -40,6 +39,7 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Ajout d'un user
|
||||||
//retourne l'id associé au user ajouté
|
//retourne l'id associé au user ajouté
|
||||||
public int addUser(String pseudo, String login) {
|
public int addUser(String pseudo, String login) {
|
||||||
String query = "INSERT INTO users (pseudo, statut, login) VALUES (?, ?, ?)";
|
String query = "INSERT INTO users (pseudo, statut, login) VALUES (?, ?, ?)";
|
||||||
|
@ -116,7 +116,6 @@ public class DataBase {
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//System.out.println("loginAux = "+loginAux);
|
|
||||||
return !(loginAux==null);
|
return !(loginAux==null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,10 +179,11 @@ public class DataBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//chat table : nom : id1id2
|
//chat table :
|
||||||
|
//nom : idSrcidDest
|
||||||
//colonnes :
|
//colonnes :
|
||||||
//id (l'id unique du message)
|
//id (l'id unique du message)
|
||||||
//id1 et id2 les id des deux users qui se parlent
|
//idSrc et idDest : les id des deux users qui se parlent
|
||||||
//message : le message envoyé
|
//message : le message envoyé
|
||||||
//date : la date d'envoi du msg
|
//date : la date d'envoi du msg
|
||||||
public void newChatTable (int id1, int id2) {
|
public void newChatTable (int id1, int id2) {
|
||||||
|
@ -232,7 +232,7 @@ public class DataBase {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
//il faut mettre dans l'ordre idSrc pour id1 et id Dest pour id2 dans les params
|
//il faut mettre dans l'ordre idSrc pour id1 et id Dest pour id2 dans les params
|
||||||
public void addMessage(int id1, int id2, String message) {
|
public void addMessage(int id1, int id2, String message) {
|
||||||
int idSrc = id1;
|
int idSrc = id1;
|
||||||
int idDest = id2;
|
int idDest = id2;
|
||||||
|
|
|
@ -8,7 +8,6 @@ import java.awt.event.WindowAdapter;
|
||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
@ -16,7 +15,6 @@ import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
|
@ -71,10 +69,11 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
this.frame = new JFrame("Fenetre Chat avec "+ userString);
|
this.frame = new JFrame("Fenetre Chat avec "+ userString);
|
||||||
this.agent = agent;
|
this.agent = agent;
|
||||||
this.user = agent.getUser();
|
this.user = agent.getUser();
|
||||||
//this.dest = agent.getList().findContact(userString);
|
|
||||||
this.dest = Request.getUser(userString, "getUser");
|
this.dest = Request.getUser(userString, "getUser");
|
||||||
|
|
||||||
InetAddress adr = dest.getAddress();
|
InetAddress adr = dest.getAddress();
|
||||||
|
|
||||||
|
//Récupération du TCPChat associé au dest
|
||||||
for(TCPChat tcp : agent.getListeTCPChat()) {
|
for(TCPChat tcp : agent.getListeTCPChat()) {
|
||||||
if(tcp.getSocket().getInetAddress().equals(adr)) {
|
if(tcp.getSocket().getInetAddress().equals(adr)) {
|
||||||
t=tcp;
|
t=tcp;
|
||||||
|
@ -91,12 +90,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
public void windowClosing(WindowEvent e) {
|
public void windowClosing(WindowEvent e) {
|
||||||
int quitter = FenetreMenu.fenetreFermeture();
|
int quitter = FenetreMenu.fenetreFermeture();
|
||||||
if(quitter == 0) {
|
if(quitter == 0) {
|
||||||
/*try {
|
|
||||||
t.getSocket().close();
|
|
||||||
} catch (IOException e1) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e1.printStackTrace();
|
|
||||||
}*/
|
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
}
|
}
|
||||||
}};
|
}};
|
||||||
|
@ -105,7 +98,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
this.panel.setOpaque(false);
|
this.panel.setOpaque(false);
|
||||||
|
|
||||||
this.addWidgets();
|
this.addWidgets();
|
||||||
//frame.getContentPane().add(panel, BorderLayout.CENTER);
|
|
||||||
afficherHistorique();
|
afficherHistorique();
|
||||||
frame.getRootPane().setDefaultButton(envoyer);
|
frame.getRootPane().setDefaultButton(envoyer);
|
||||||
|
|
||||||
|
@ -140,7 +132,7 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
|
gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
|
||||||
this.frame.getContentPane().setLayout(gridBagLayout);
|
this.frame.getContentPane().setLayout(gridBagLayout);
|
||||||
|
|
||||||
//zone pour rentrer les message à envoyer
|
//zone pour entrer les message à envoyer
|
||||||
text = new JTextArea(10, 3);
|
text = new JTextArea(10, 3);
|
||||||
text.setForeground(Color.WHITE);
|
text.setForeground(Color.WHITE);
|
||||||
text.setBackground(Color.GRAY);
|
text.setBackground(Color.GRAY);
|
||||||
|
@ -188,13 +180,15 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
envoyer.addActionListener(new ActionListener() {
|
envoyer.addActionListener(new ActionListener() {
|
||||||
private Date date;
|
private Date date;
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
|
||||||
|
//récupération du texte entré par le user
|
||||||
String message = text.getText();
|
String message = text.getText();
|
||||||
//System.out.println("Message :"+ message);
|
|
||||||
//System.out.println(dest);
|
//récupération id user et dest
|
||||||
int idUser = agent.getDb().getIdFromPseudo(user.getPseudo());
|
int idUser = agent.getDb().getIdFromPseudo(user.getPseudo());
|
||||||
//System.out.println("IDuser = "+idUser);
|
|
||||||
int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo());
|
int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo());
|
||||||
//System.out.println("IDdest = "+idDest);
|
|
||||||
|
//récupération du TCPChat associé au dest
|
||||||
try {
|
try {
|
||||||
TCPChat tcpChat = null;
|
TCPChat tcpChat = null;
|
||||||
for(TCPChat tcp : agent.getListeTCPChat()) {
|
for(TCPChat tcp : agent.getListeTCPChat()) {
|
||||||
|
@ -204,16 +198,29 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
}
|
}
|
||||||
|
|
||||||
text.setText("");
|
text.setText("");
|
||||||
|
|
||||||
|
//Création de la date du message
|
||||||
this.setDate(new Date());
|
this.setDate(new Date());
|
||||||
DateFormat format = new SimpleDateFormat(" (yyyy/MM/dd HH:mm:ss)");
|
DateFormat format = new SimpleDateFormat(" (yyyy/MM/dd HH:mm:ss)");
|
||||||
String dateString = format.format(this.date);
|
String dateString = format.format(this.date);
|
||||||
|
|
||||||
|
//Envoi du message
|
||||||
tcpChat.sendMsg(message);
|
tcpChat.sendMsg(message);
|
||||||
|
|
||||||
|
//Affichage du message et de la date
|
||||||
doc.insertString(doc.getLength(), "\n"+message+dateString, right );
|
doc.insertString(doc.getLength(), "\n"+message+dateString, right );
|
||||||
doc.setParagraphAttributes(doc.getLength(), 1, right, false);
|
doc.setParagraphAttributes(doc.getLength(), 1, right, false);
|
||||||
text.setCaretPosition(text.getDocument().getLength());
|
text.setCaretPosition(text.getDocument().getLength());
|
||||||
|
|
||||||
|
//Si le chat entre user et dest existe déjà dans la base de donnée
|
||||||
if(agent.getDb().tableChatExists(idUser, idDest)) {
|
if(agent.getDb().tableChatExists(idUser, idDest)) {
|
||||||
|
|
||||||
|
//ajout du message dans la table
|
||||||
agent.getDb().addMessage(idUser, idDest, message);
|
agent.getDb().addMessage(idUser, idDest, message);
|
||||||
|
|
||||||
|
//Sinon
|
||||||
}else {
|
}else {
|
||||||
|
//Création de la table et ajout du message
|
||||||
agent.getDb().newChatTable(idUser, idDest);
|
agent.getDb().newChatTable(idUser, idDest);
|
||||||
agent.getDb().addMessage(idUser, idDest, message);
|
agent.getDb().addMessage(idUser, idDest, message);
|
||||||
}
|
}
|
||||||
|
@ -270,17 +277,21 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
SimpleAttributeSet left = new SimpleAttributeSet();
|
SimpleAttributeSet left = new SimpleAttributeSet();
|
||||||
StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
|
StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT);
|
||||||
StyleConstants.setForeground(left, c.brighter());
|
StyleConstants.setForeground(left, c.brighter());
|
||||||
|
|
||||||
int idUser = agent.getDb().getIdFromPseudo(user.getPseudo());
|
int idUser = agent.getDb().getIdFromPseudo(user.getPseudo());
|
||||||
//System.out.println("IDuser = "+idUser);
|
|
||||||
int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo());
|
int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo());
|
||||||
|
|
||||||
if(agent.getDb().tableChatExists(idUser, idDest)) {
|
if(agent.getDb().tableChatExists(idUser, idDest)) {
|
||||||
|
|
||||||
ArrayList<MessageAffichage> historic = null;
|
ArrayList<MessageAffichage> historic = null;
|
||||||
try {
|
try {
|
||||||
historic = agent.getDb().getHistoric(idUser, idDest);
|
historic = agent.getDb().getHistoric(idUser, idDest);
|
||||||
} catch (SQLException e2) {
|
} catch (SQLException e2) {
|
||||||
e2.printStackTrace();
|
e2.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
for(MessageAffichage msg : historic) {
|
for(MessageAffichage msg : historic) {
|
||||||
|
|
||||||
if(msg.getId() == idUser) {
|
if(msg.getId() == idUser) {
|
||||||
try {
|
try {
|
||||||
doc.insertString(doc.getLength(), "\n"+msg.getMessage(), right );
|
doc.insertString(doc.getLength(), "\n"+msg.getMessage(), right );
|
||||||
|
@ -303,7 +314,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
public void propertyChange(PropertyChangeEvent evt) {
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
switch(evt.getPropertyName()){
|
switch(evt.getPropertyName()){
|
||||||
case "deconnexion" :
|
case "deconnexion" :
|
||||||
System.out.println("Je suis dans deconnexion");
|
|
||||||
InetAddress adr = dest.getAddress();
|
InetAddress adr = dest.getAddress();
|
||||||
TCPChat t=null;
|
TCPChat t=null;
|
||||||
for(TCPChat tcp : agent.getListeTCPChat()) {
|
for(TCPChat tcp : agent.getListeTCPChat()) {
|
||||||
|
@ -314,7 +324,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{
|
||||||
try {
|
try {
|
||||||
t.getSocket().close();
|
t.getSocket().close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
agent.getListeTCPChat().remove(t);
|
agent.getListeTCPChat().remove(t);
|
||||||
|
|
|
@ -41,7 +41,6 @@ public class FenetreConnexion implements ActionListener {
|
||||||
*/
|
*/
|
||||||
public FenetreConnexion() {
|
public FenetreConnexion() {
|
||||||
try {
|
try {
|
||||||
//here you can put the selected theme class name in JTattoo
|
|
||||||
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
|
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
|
||||||
|
|
||||||
} catch (ClassNotFoundException ex) {
|
} catch (ClassNotFoundException ex) {
|
||||||
|
@ -53,15 +52,20 @@ public class FenetreConnexion implements ActionListener {
|
||||||
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
||||||
java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
//creer une instance JFrame
|
//creer une instance JFrame
|
||||||
frame = new JFrame("Fenetre connexion");
|
frame = new JFrame("Fenetre connexion");
|
||||||
|
|
||||||
//sortir quand l’utilisateur ferme le frame
|
//sortir quand l’utilisateur ferme le frame
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
// fixer les dimensions de la fenetre
|
// fixer les dimensions de la fenetre
|
||||||
frame.setSize(new Dimension(120, 40));
|
frame.setSize(new Dimension(120, 40));
|
||||||
|
|
||||||
//Creer le JPanel
|
//Creer le JPanel
|
||||||
panel = new JPanel(new GridLayout(4,1));
|
panel = new JPanel(new GridLayout(4,1));
|
||||||
panel.setOpaque(false);
|
panel.setOpaque(false);
|
||||||
|
|
||||||
//Ajouter les elements
|
//Ajouter les elements
|
||||||
this.addWidgets();
|
this.addWidgets();
|
||||||
try {
|
try {
|
||||||
|
@ -74,12 +78,16 @@ public class FenetreConnexion implements ActionListener {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set the default button.
|
//Set the default button.
|
||||||
frame.getRootPane().setDefaultButton(Connexion);
|
frame.getRootPane().setDefaultButton(Connexion);
|
||||||
|
|
||||||
//Ajouter le panel a la window
|
//Ajouter le panel a la window
|
||||||
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
|
|
||||||
//L'utilisateur ne pourra pas aggrandir la fenetre
|
//L'utilisateur ne pourra pas aggrandir la fenetre
|
||||||
this.frame.setResizable(false);
|
this.frame.setResizable(false);
|
||||||
|
|
||||||
//Afficher la fenetre
|
//Afficher la fenetre
|
||||||
frame.pack();
|
frame.pack();
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
|
@ -88,98 +96,123 @@ public class FenetreConnexion implements ActionListener {
|
||||||
private void addWidgets() {
|
private void addWidgets() {
|
||||||
// Créer Zone d'insertion de texte pour le pseudo
|
// Créer Zone d'insertion de texte pour le pseudo
|
||||||
this.pseudofield = new JTextField(2);
|
this.pseudofield = new JTextField(2);
|
||||||
|
|
||||||
// creation d'un label qui contiendra un txt au centre
|
// creation d'un label qui contiendra un txt au centre
|
||||||
this.Text = new JLabel("Type your login", SwingConstants.CENTER);
|
this.Text = new JLabel("Type your login", SwingConstants.CENTER);
|
||||||
this.Text.setForeground(Color.white);
|
this.Text.setForeground(Color.white);
|
||||||
this.Text.setOpaque(false);
|
this.Text.setOpaque(false);
|
||||||
|
|
||||||
//Ajout d'un bouton Connexion
|
//Ajout d'un bouton Connexion
|
||||||
this.Connexion = new JButton("Connexion");
|
this.Connexion = new JButton("Connexion");
|
||||||
this.Cancel = new JButton("Cancel");
|
this.Cancel = new JButton("Cancel");
|
||||||
this.Connexion.addActionListener(this);
|
this.Connexion.addActionListener(this);
|
||||||
this.Cancel.addActionListener(this);
|
this.Cancel.addActionListener(this);
|
||||||
|
|
||||||
//On associe au bouton Connexion des actions a realiser
|
//On associe au bouton Connexion des actions a realiser
|
||||||
this.Connexion.addActionListener(this);
|
this.Connexion.addActionListener(this);
|
||||||
this.Connexion.setSelected(false);
|
this.Connexion.setSelected(false);
|
||||||
|
|
||||||
// On ajouter les differents elements au panel
|
// On ajouter les differents elements au panel
|
||||||
panel.add(pseudofield);
|
panel.add(pseudofield);
|
||||||
panel.add(Text);
|
panel.add(Text);
|
||||||
panel.add(Connexion);
|
panel.add(Connexion);
|
||||||
panel.add(Cancel);
|
panel.add(Cancel);
|
||||||
|
|
||||||
//ajouter un effet de bord transparent au composant Jlabel
|
//ajouter un effet de bord transparent au composant Jlabel
|
||||||
Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent event) {
|
public void actionPerformed(ActionEvent event) {
|
||||||
Object source = event.getSource();
|
Object source = event.getSource();
|
||||||
|
|
||||||
if(source == Connexion){
|
if(source == Connexion){
|
||||||
// on recupere le texte entree dans la zone de saisie
|
// on recupere le texte entré dans la zone de saisie
|
||||||
String login = pseudofield.getText();
|
String login = pseudofield.getText();
|
||||||
|
|
||||||
boolean loginExiste = false;
|
boolean loginExiste = false;
|
||||||
boolean loginEstActif = false;
|
boolean loginEstActif = false;
|
||||||
try {
|
|
||||||
loginExiste = Request.sendLogin(login, "loginExiste");
|
|
||||||
} catch (IOException e1) {
|
|
||||||
System.out.println("Pb envoi requete au serveur");
|
|
||||||
e1.printStackTrace();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
loginEstActif = Request.sendLogin(login, "estActif");
|
|
||||||
} catch (IOException e1) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e1.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!loginExiste) {
|
//On vérifie si login existe déjà
|
||||||
if(!Connexion.isSelected()) {
|
try {
|
||||||
JOptionPane.showMessageDialog(frame, "This login doesn't exist", "Error", JOptionPane.WARNING_MESSAGE) ;
|
loginExiste = Request.sendLogin(login, "loginExiste");
|
||||||
Connexion.setSelected(true);
|
} catch (IOException e1) {
|
||||||
frame.dispose();
|
System.out.println("Pb envoi requete au serveur");
|
||||||
new FenetreConnexion();
|
e1.printStackTrace();
|
||||||
}
|
}
|
||||||
}else if(loginEstActif){
|
|
||||||
try {
|
//On vérifie si le login est utilisé par un user actif
|
||||||
Thread.sleep(1000);
|
try {
|
||||||
} catch (InterruptedException e) {
|
loginEstActif = Request.sendLogin(login, "estActif");
|
||||||
e.printStackTrace();
|
} catch (IOException e1) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e1.printStackTrace();
|
||||||
}
|
}
|
||||||
if(!Connexion.isSelected() && !FenetreMenu.ouvert) {
|
|
||||||
JOptionPane.showMessageDialog(frame, "This login is used by an active user", "Error", JOptionPane.WARNING_MESSAGE) ;
|
|
||||||
Connexion.setSelected(true);
|
|
||||||
frame.dispose();
|
|
||||||
new FenetreConnexion();
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
// On crée un objet de type ChatApp
|
|
||||||
Agent agent;
|
|
||||||
boolean connexion;
|
|
||||||
|
|
||||||
try {
|
//Le login n'existe pas
|
||||||
|
if(!loginExiste) {
|
||||||
|
|
||||||
agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest, login);
|
//Affichage d'un message d'erreur
|
||||||
String pseudo = agent.getDb().getPseudoFromLogin(login);
|
if(!Connexion.isSelected()) {
|
||||||
// on tente une connexion avec ce pseudo
|
JOptionPane.showMessageDialog(frame, "This login doesn't exist", "Error", JOptionPane.WARNING_MESSAGE) ;
|
||||||
connexion = agent.connectConnexion(pseudo, login);
|
Connexion.setSelected(true);
|
||||||
// Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation
|
frame.dispose();
|
||||||
if(connexion) {
|
new FenetreConnexion();
|
||||||
// La connexion a reussi
|
}
|
||||||
JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ;
|
|
||||||
frame.dispose();
|
//Le login est utilisé par un user actif
|
||||||
// on lance une nouvelle fenetre de type View_Menu
|
}else if(loginEstActif){
|
||||||
FenetreMenu fenetreCourante= new FenetreMenu(agent);
|
|
||||||
}
|
try {
|
||||||
else {
|
Thread.sleep(1000);
|
||||||
// La connexion a echoue, il est possible de rentrer un nouveau pseudo
|
} catch (InterruptedException e) {
|
||||||
JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !");
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
|
||||||
System.out.println("Création thread impossible");
|
//Affichage d'un message d'erreur
|
||||||
e.printStackTrace();
|
if(!Connexion.isSelected() && !FenetreMenu.ouvert) {
|
||||||
} catch (InterruptedException e) {
|
JOptionPane.showMessageDialog(frame, "This login is used by an active user", "Error", JOptionPane.WARNING_MESSAGE) ;
|
||||||
System.out.println("connect impossible");
|
Connexion.setSelected(true);
|
||||||
e.printStackTrace();
|
frame.dispose();
|
||||||
}
|
new FenetreConnexion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Le login existe et n'est pas utilisé par un user actif
|
||||||
|
}else {
|
||||||
|
|
||||||
|
Agent agent;
|
||||||
|
boolean connexion;
|
||||||
|
|
||||||
|
try {
|
||||||
|
//Création d'un agent
|
||||||
|
agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest, login);
|
||||||
|
|
||||||
|
//Récupération du pseudo et tentative de connexion
|
||||||
|
String pseudo = agent.getDb().getPseudoFromLogin(login);
|
||||||
|
connexion = agent.connectConnexion(pseudo, login);
|
||||||
|
|
||||||
|
// Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation
|
||||||
|
if(connexion) {
|
||||||
|
|
||||||
|
// La connexion a reussi
|
||||||
|
JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ;
|
||||||
|
frame.dispose();
|
||||||
|
|
||||||
|
// on lance une nouvelle fenetre de type View_Menu
|
||||||
|
FenetreMenu fenetreCourante= new FenetreMenu(agent);
|
||||||
|
}else {
|
||||||
|
|
||||||
|
// La connexion a echoue, il est possible de rentrer un nouveau pseudo
|
||||||
|
JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Création thread impossible");
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
System.out.println("connect impossible");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
}else if(source == Cancel) {
|
}else if(source == Cancel) {
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
new FenetreInscription();
|
new FenetreInscription();
|
||||||
|
@ -188,15 +221,15 @@ public class FenetreConnexion implements ActionListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createAndShowGUI() {
|
private static void createAndShowGUI() {
|
||||||
// Etre certain d'avoir une joli fenetre
|
|
||||||
|
// Etre certain d'avoir une jolie fenetre
|
||||||
JFrame.setDefaultLookAndFeelDecorated(true);
|
JFrame.setDefaultLookAndFeelDecorated(true);
|
||||||
// On crée une fentre d'acceuil
|
|
||||||
|
// On crée une fenetre d'acceuil
|
||||||
FenetreConnexion fenetre = new FenetreConnexion();
|
FenetreConnexion fenetre = new FenetreConnexion();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
//Schedule a job for the event-dispatching thread:
|
|
||||||
//creating and showing this application's GUI.
|
|
||||||
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
createAndShowGUI();
|
createAndShowGUI();
|
||||||
|
|
|
@ -10,7 +10,6 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.KeyListener;
|
|
||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
|
@ -22,8 +21,6 @@ import javax.swing.SwingConstants;
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -45,8 +42,8 @@ public class FenetreInscription implements ActionListener {
|
||||||
* Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo.
|
* Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo.
|
||||||
*/
|
*/
|
||||||
public FenetreInscription() {
|
public FenetreInscription() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//here you can put the selected theme class name in JTattoo
|
|
||||||
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
|
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
|
||||||
|
|
||||||
} catch (ClassNotFoundException ex) {
|
} catch (ClassNotFoundException ex) {
|
||||||
|
@ -58,15 +55,20 @@ public class FenetreInscription implements ActionListener {
|
||||||
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
||||||
java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
//creer une instance JFrame
|
//creer une instance JFrame
|
||||||
frame = new JFrame("Fenetre inscription");
|
frame = new JFrame("Fenetre inscription");
|
||||||
|
|
||||||
//sortir quand l’utilisateur ferme le frame
|
//sortir quand l’utilisateur ferme le frame
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
// fixer les dimensions de la fenetre
|
// fixer les dimensions de la fenetre
|
||||||
frame.setSize(new Dimension(40, 100));
|
frame.setSize(new Dimension(40, 100));
|
||||||
|
|
||||||
//Creer le JPanel
|
//Creer le JPanel
|
||||||
panel = new JPanel(new GridLayout(7,1));
|
panel = new JPanel(new GridLayout(7,1));
|
||||||
panel.setOpaque(false);
|
panel.setOpaque(false);
|
||||||
|
|
||||||
//Ajouter les elements
|
//Ajouter les elements
|
||||||
this.addWidgets();
|
this.addWidgets();
|
||||||
try {
|
try {
|
||||||
|
@ -80,19 +82,24 @@ public class FenetreInscription implements ActionListener {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
frame.getRootPane().setDefaultButton(inscription);
|
frame.getRootPane().setDefaultButton(inscription);
|
||||||
|
|
||||||
//Ajouter le panel a la window
|
//Ajouter le panel a la window
|
||||||
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
//L'utilisateur ne pourra pas aggrandir la fenetre
|
|
||||||
|
//L'utilisateur ne pourra pas agrandir la fenetre
|
||||||
this.frame.setResizable(false);
|
this.frame.setResizable(false);
|
||||||
|
|
||||||
//Afficher la fenetre
|
//Afficher la fenetre
|
||||||
frame.pack();
|
frame.pack();
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addWidgets() {
|
private void addWidgets() {
|
||||||
|
|
||||||
// Créer Zone d'insertion de texte pour le pseudo
|
// Créer Zone d'insertion de texte pour le pseudo
|
||||||
this.loginfield = new JTextField(2);
|
this.loginfield = new JTextField(2);
|
||||||
this.pseudofield = new JTextField(2);
|
this.pseudofield = new JTextField(2);
|
||||||
|
|
||||||
// creation d'un label qui contiendra un txt au centre
|
// creation d'un label qui contiendra un txt au centre
|
||||||
this.Text = new JLabel("Forbidden characters: space, '?','&', '/', '=' ", SwingConstants.CENTER);
|
this.Text = new JLabel("Forbidden characters: space, '?','&', '/', '=' ", SwingConstants.CENTER);
|
||||||
this.Text.setForeground(Color.WHITE);
|
this.Text.setForeground(Color.WHITE);
|
||||||
|
@ -118,12 +125,15 @@ public class FenetreInscription implements ActionListener {
|
||||||
JLabel text2 = new JLabel("Pseudo: ", SwingConstants.CENTER);
|
JLabel text2 = new JLabel("Pseudo: ", SwingConstants.CENTER);
|
||||||
text2.setForeground(Color.WHITE);
|
text2.setForeground(Color.WHITE);
|
||||||
text2.setOpaque(false);
|
text2.setOpaque(false);
|
||||||
|
|
||||||
//Ajout d'un bouton Connexion
|
//Ajout d'un bouton Connexion
|
||||||
this.inscription = new JButton("Sign Up");
|
this.inscription = new JButton("Sign Up");
|
||||||
this.connexion = new JButton("Sign In");
|
this.connexion = new JButton("Sign In");
|
||||||
|
|
||||||
//On associe au bouton Connexion des actions a realiser
|
//On associe au bouton Connexion des actions a realiser
|
||||||
this.inscription.addActionListener(this);
|
this.inscription.addActionListener(this);
|
||||||
this.connexion.addActionListener(this);
|
this.connexion.addActionListener(this);
|
||||||
|
|
||||||
// On ajouter les differents elements au panel
|
// On ajouter les differents elements au panel
|
||||||
panel.add(text);
|
panel.add(text);
|
||||||
panel.add(loginfield);
|
panel.add(loginfield);
|
||||||
|
@ -132,6 +142,7 @@ public class FenetreInscription implements ActionListener {
|
||||||
panel.add(Text);
|
panel.add(Text);
|
||||||
panel.add(inscription);
|
panel.add(inscription);
|
||||||
panel.add(connexion);
|
panel.add(connexion);
|
||||||
|
|
||||||
//ajouter un effet de bord transparent au composant Jlabel
|
//ajouter un effet de bord transparent au composant Jlabel
|
||||||
Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
||||||
}
|
}
|
||||||
|
@ -139,34 +150,48 @@ public class FenetreInscription implements ActionListener {
|
||||||
public void actionPerformed(ActionEvent event) {
|
public void actionPerformed(ActionEvent event) {
|
||||||
Object source = event.getSource();
|
Object source = event.getSource();
|
||||||
if(source == inscription) {
|
if(source == inscription) {
|
||||||
// on recupere le texte entree dans la zone de saisie
|
|
||||||
|
// on recupere le login et le pseudo entrés dans la zone de saisie
|
||||||
String login = loginfield.getText();
|
String login = loginfield.getText();
|
||||||
String pseudo = pseudofield.getText();
|
String pseudo = pseudofield.getText();
|
||||||
|
|
||||||
|
//Si le login ou le pseudo sont vides affichage message d'erreur
|
||||||
if(login.isBlank()||pseudo.isBlank()) {
|
if(login.isBlank()||pseudo.isBlank()) {
|
||||||
JOptionPane.showMessageDialog(frame, "Please do not enter a blank pseudo or login") ;
|
JOptionPane.showMessageDialog(frame, "Please do not enter a blank pseudo or login") ;
|
||||||
|
|
||||||
|
//Si le login existe déjà on affiche un message d'erreur
|
||||||
}else if(DataBase.getInstance().loginExiste(login)){
|
}else if(DataBase.getInstance().loginExiste(login)){
|
||||||
JOptionPane.showMessageDialog(frame, "This login is already used");
|
JOptionPane.showMessageDialog(frame, "This login is already used");
|
||||||
|
|
||||||
|
//Les conditions sont réunies
|
||||||
}else {
|
}else {
|
||||||
// On crée un objet de type ChatApp
|
|
||||||
Agent agent;
|
Agent agent;
|
||||||
boolean connexion;
|
boolean connexion;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
//Création d'un agent
|
||||||
agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest);
|
agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest);
|
||||||
// on tente une connexion avec ce pseudo
|
|
||||||
|
// on tente une connexion avec le pseudo
|
||||||
connexion = agent.connectInscription(pseudo, login);
|
connexion = agent.connectInscription(pseudo, login);
|
||||||
|
|
||||||
// Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation
|
// Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation
|
||||||
if(connexion) {
|
if(connexion) {
|
||||||
|
|
||||||
// La connexion a reussi
|
// La connexion a reussi
|
||||||
JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ;
|
JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ;
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
|
|
||||||
// on lance une nouvelle fenetre de type View_Menu
|
// on lance une nouvelle fenetre de type View_Menu
|
||||||
FenetreMenu fenetreCourante= new FenetreMenu(agent);
|
FenetreMenu fenetreCourante= new FenetreMenu(agent);
|
||||||
}
|
}else {
|
||||||
else {
|
|
||||||
// La connexion a echoue, il est possible de rentrer un nouveau pseudo
|
// La connexion a echoue, il est possible de rentrer un nouveau pseudo
|
||||||
JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !");
|
JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !");
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("Création thread impossible");
|
System.out.println("Création thread impossible");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -175,6 +200,7 @@ public class FenetreInscription implements ActionListener {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}else if(source == connexion){
|
}else if(source == connexion){
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
FenetreConnexion fenetreCo = new FenetreConnexion();
|
FenetreConnexion fenetreCo = new FenetreConnexion();
|
||||||
|
@ -183,15 +209,16 @@ public class FenetreInscription implements ActionListener {
|
||||||
|
|
||||||
|
|
||||||
public static void createAndShowGUI() {
|
public static void createAndShowGUI() {
|
||||||
|
|
||||||
// Etre certain d'avoir une joli fenetre
|
// Etre certain d'avoir une joli fenetre
|
||||||
JFrame.setDefaultLookAndFeelDecorated(true);
|
JFrame.setDefaultLookAndFeelDecorated(true);
|
||||||
// On crée une fentre d'acceuil
|
|
||||||
FenetreInscription fenetre = new FenetreInscription();
|
// On crée une fentre d'acceuil
|
||||||
|
FenetreInscription fenetre = new FenetreInscription();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
//Schedule a job for the event-dispatching thread:
|
|
||||||
//creating and showing this application's GUI.
|
|
||||||
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
javax.swing.SwingUtilities.invokeLater(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
createAndShowGUI();
|
createAndShowGUI();
|
||||||
|
|
|
@ -7,8 +7,6 @@ import java.awt.Font;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
import java.awt.GridBagLayout;
|
import java.awt.GridBagLayout;
|
||||||
import java.awt.GridLayout;
|
|
||||||
import java.awt.HeadlessException;
|
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.SystemColor;
|
import java.awt.SystemColor;
|
||||||
|
@ -16,13 +14,11 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.WindowAdapter;
|
import java.awt.event.WindowAdapter;
|
||||||
import java.awt.event.WindowEvent;
|
import java.awt.event.WindowEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JButton;
|
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
|
@ -33,15 +29,14 @@ import javax.swing.JOptionPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
import javax.swing.JTextField;
|
|
||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
|
|
||||||
import controller.Agent;
|
import controller.Agent;
|
||||||
import model.Contact;
|
|
||||||
import server.Request;
|
import server.Request;
|
||||||
|
|
||||||
public class FenetreMenu {
|
public class FenetreMenu {
|
||||||
|
|
||||||
JFrame frame;
|
JFrame frame;
|
||||||
JPanel panel;
|
JPanel panel;
|
||||||
JMenuBar menu;
|
JMenuBar menu;
|
||||||
|
@ -59,7 +54,6 @@ public class FenetreMenu {
|
||||||
FenetreMenu.ouvert=true;
|
FenetreMenu.ouvert=true;
|
||||||
this.agent = agent;
|
this.agent = agent;
|
||||||
try {
|
try {
|
||||||
//here you can put the selected theme class name in JTattoo
|
|
||||||
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
|
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
|
||||||
|
|
||||||
} catch (ClassNotFoundException ex) {
|
} catch (ClassNotFoundException ex) {
|
||||||
|
@ -71,13 +65,14 @@ public class FenetreMenu {
|
||||||
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
|
||||||
java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame = new JFrame("Fenêtre menu");
|
frame = new JFrame("Fenêtre menu");
|
||||||
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
||||||
|
|
||||||
frame.setSize(new Dimension(600, 800));
|
frame.setSize(new Dimension(600, 800));
|
||||||
frame.setResizable(false);
|
frame.setResizable(false);
|
||||||
|
|
||||||
wa = new WindowAdapter(){
|
wa = new WindowAdapter(){
|
||||||
public void windowClosing(WindowEvent e){
|
public void windowClosing(WindowEvent e){
|
||||||
int reponse = fenetreFermeture();
|
int reponse = fenetreFermeture();
|
||||||
if (reponse==0){
|
if (reponse==0){
|
||||||
|
@ -95,10 +90,12 @@ public class FenetreMenu {
|
||||||
|
|
||||||
frame.addWindowListener(wa);
|
frame.addWindowListener(wa);
|
||||||
menu = new JMenuBar();
|
menu = new JMenuBar();
|
||||||
|
|
||||||
//Creation d'un JPanel
|
//Creation d'un JPanel
|
||||||
panel = new JPanel(new GridBagLayout());
|
panel = new JPanel(new GridBagLayout());
|
||||||
panel.setForeground(SystemColor.menuText);
|
panel.setForeground(SystemColor.menuText);
|
||||||
panel.setOpaque(false);
|
panel.setOpaque(false);
|
||||||
|
|
||||||
// Ajouter tout les elements a la fenetre
|
// Ajouter tout les elements a la fenetre
|
||||||
this.addWidgets();
|
this.addWidgets();
|
||||||
|
|
||||||
|
@ -112,8 +109,10 @@ public class FenetreMenu {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ajouter le panel a la fenetre
|
// ajouter le panel a la fenetre
|
||||||
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
|
|
||||||
// Afficher la fenetre
|
// Afficher la fenetre
|
||||||
frame.pack();
|
frame.pack();
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
|
@ -128,6 +127,7 @@ public class FenetreMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addWidgets() throws IOException {
|
private void addWidgets() throws IOException {
|
||||||
|
|
||||||
jlabel = new JLabel(new ImageIcon("panda.png"), JLabel.CENTER);
|
jlabel = new JLabel(new ImageIcon("panda.png"), JLabel.CENTER);
|
||||||
jlabel.setOpaque(false);
|
jlabel.setOpaque(false);
|
||||||
texte = new JLabel();
|
texte = new JLabel();
|
||||||
|
@ -148,7 +148,6 @@ public class FenetreMenu {
|
||||||
contenu.setBackground(c.darker());
|
contenu.setBackground(c.darker());
|
||||||
contenu.setHorizontalAlignment(SwingConstants.CENTER);
|
contenu.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
|
||||||
//JMenuItem usersActifs = new JMenuItem("Active users");
|
|
||||||
JMenuItem modifierPseudo = new JMenuItem("Modify your pseudo");
|
JMenuItem modifierPseudo = new JMenuItem("Modify your pseudo");
|
||||||
modifierPseudo.setBackground(c.darker());
|
modifierPseudo.setBackground(c.darker());
|
||||||
modifierPseudo.setForeground(Color.WHITE);
|
modifierPseudo.setForeground(Color.WHITE);
|
||||||
|
@ -156,7 +155,6 @@ public class FenetreMenu {
|
||||||
deco.setBackground(c.darker());
|
deco.setBackground(c.darker());
|
||||||
deco.setForeground(Color.WHITE);
|
deco.setForeground(Color.WHITE);
|
||||||
|
|
||||||
//contenu.add(usersActifs);
|
|
||||||
contenu.add(modifierPseudo);
|
contenu.add(modifierPseudo);
|
||||||
contenu.add(deco);
|
contenu.add(deco);
|
||||||
|
|
||||||
|
@ -172,7 +170,6 @@ public class FenetreMenu {
|
||||||
|
|
||||||
String users = Request.actifs("actifs");
|
String users = Request.actifs("actifs");
|
||||||
String users2 = users.replaceAll("\\s", "\n");
|
String users2 = users.replaceAll("\\s", "\n");
|
||||||
//String users = agent.getList().actifUsers();
|
|
||||||
Vector<String> v = new Vector<String>();
|
Vector<String> v = new Vector<String>();
|
||||||
for(String pseudo : users2.split("\n")) {
|
for(String pseudo : users2.split("\n")) {
|
||||||
v.add(pseudo);
|
v.add(pseudo);
|
||||||
|
@ -251,7 +248,6 @@ public class FenetreMenu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//panel.add(BorderLayout.NORTH, menu);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.io.IOException;
|
||||||
import controller.*;
|
import controller.*;
|
||||||
|
|
||||||
public class FenetreModifPseudo implements ActionListener {
|
public class FenetreModifPseudo implements ActionListener {
|
||||||
|
|
||||||
JFrame frame;
|
JFrame frame;
|
||||||
JPanel panel;
|
JPanel panel;
|
||||||
JTextField pseudofield;
|
JTextField pseudofield;
|
||||||
|
@ -34,45 +35,61 @@ public class FenetreModifPseudo implements ActionListener {
|
||||||
* Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo.
|
* Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo.
|
||||||
*/
|
*/
|
||||||
public FenetreModifPseudo(Agent agent) {
|
public FenetreModifPseudo(Agent agent) {
|
||||||
|
|
||||||
this.agent = agent;
|
this.agent = agent;
|
||||||
|
|
||||||
//creer une instance JFrame
|
//creer une instance JFrame
|
||||||
frame = new JFrame("Modification pseudo");
|
frame = new JFrame("Modification pseudo");
|
||||||
|
|
||||||
//sortir quand l’utilisateur ferme le frame
|
//sortir quand l’utilisateur ferme le frame
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
// fixer les dimensions de la fenetre
|
// fixer les dimensions de la fenetre
|
||||||
frame.setSize(new Dimension(120, 40));
|
frame.setSize(new Dimension(120, 40));
|
||||||
|
|
||||||
//Creer le JPanel
|
//Creer le JPanel
|
||||||
panel = new JPanel(new GridLayout(4,1));
|
panel = new JPanel(new GridLayout(4,1));
|
||||||
|
|
||||||
//Ajouter les elements
|
//Ajouter les elements
|
||||||
this.addWidgets();
|
this.addWidgets();
|
||||||
|
|
||||||
//Set the default button.
|
//Set the default button.
|
||||||
frame.getRootPane().setDefaultButton(ok);
|
frame.getRootPane().setDefaultButton(ok);
|
||||||
|
|
||||||
//Ajouter le panel a la window
|
//Ajouter le panel a la window
|
||||||
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
frame.getContentPane().add(panel, BorderLayout.CENTER);
|
||||||
|
|
||||||
//L'utilisateur ne pourra pas aggrandir la fenetre
|
//L'utilisateur ne pourra pas aggrandir la fenetre
|
||||||
this.frame.setResizable(false);
|
this.frame.setResizable(false);
|
||||||
|
|
||||||
//Afficher la fenetre
|
//Afficher la fenetre
|
||||||
frame.pack();
|
frame.pack();
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addWidgets() {
|
private void addWidgets() {
|
||||||
|
|
||||||
// Créer Zone d'insertion de texte pour le pseudo
|
// Créer Zone d'insertion de texte pour le pseudo
|
||||||
this.pseudofield = new JTextField(2);
|
this.pseudofield = new JTextField(2);
|
||||||
|
|
||||||
// creation d'un label qui contiendra un txt au centre
|
// creation d'un label qui contiendra un txt au centre
|
||||||
this.Text = new JLabel("Type your new pseudo", SwingConstants.CENTER);
|
this.Text = new JLabel("Type your new pseudo", SwingConstants.CENTER);
|
||||||
|
|
||||||
//Ajout d'un bouton Connexion
|
//Ajout d'un bouton Connexion
|
||||||
this.ok = new JButton("Continue");
|
this.ok = new JButton("Continue");
|
||||||
this.Cancel = new JButton("Cancel");
|
this.Cancel = new JButton("Cancel");
|
||||||
this.ok.addActionListener(this);
|
this.ok.addActionListener(this);
|
||||||
this.Cancel.addActionListener(this);
|
this.Cancel.addActionListener(this);
|
||||||
|
|
||||||
//On associe au bouton Connexion des actions a realiser
|
//On associe au bouton Connexion des actions a realiser
|
||||||
this.ok.addActionListener(this);
|
this.ok.addActionListener(this);
|
||||||
// On ajouter les differents elements au panel
|
|
||||||
|
// On ajoute les differents elements au panel
|
||||||
panel.add(pseudofield);
|
panel.add(pseudofield);
|
||||||
panel.add(Text);
|
panel.add(Text);
|
||||||
panel.add(ok);
|
panel.add(ok);
|
||||||
panel.add(Cancel);
|
panel.add(Cancel);
|
||||||
|
|
||||||
//ajouter un effet de bord transparent au composant Jlabel
|
//ajouter un effet de bord transparent au composant Jlabel
|
||||||
Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
|
||||||
}
|
}
|
||||||
|
@ -80,20 +97,30 @@ public class FenetreModifPseudo implements ActionListener {
|
||||||
public void actionPerformed(ActionEvent event) {
|
public void actionPerformed(ActionEvent event) {
|
||||||
Object source = event.getSource();
|
Object source = event.getSource();
|
||||||
if(source == ok){
|
if(source == ok){
|
||||||
|
|
||||||
|
//Récupération du nouveau pseudo
|
||||||
String newPseudo = pseudofield.getText();
|
String newPseudo = pseudofield.getText();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
//Si le nouveau pseudo est acceptable
|
||||||
if(agent.changerPseudo(newPseudo)) {
|
if(agent.changerPseudo(newPseudo)) {
|
||||||
|
|
||||||
|
//Affichage message
|
||||||
JOptionPane.showMessageDialog(frame, "Your new pseudo is "+newPseudo);
|
JOptionPane.showMessageDialog(frame, "Your new pseudo is "+newPseudo);
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
new FenetreMenu(agent);
|
new FenetreMenu(agent);
|
||||||
|
|
||||||
|
//Sinon affichage message erreur
|
||||||
}else {
|
}else {
|
||||||
JOptionPane.showMessageDialog(frame, "Pseudo already use, choose another one");
|
JOptionPane.showMessageDialog(frame, "Pseudo already use, choose another one");
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (HeadlessException e1) {
|
} catch (HeadlessException e1) {
|
||||||
e1.printStackTrace();
|
e1.printStackTrace();
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
e1.printStackTrace();
|
e1.printStackTrace();
|
||||||
};
|
};
|
||||||
|
|
||||||
}else if(source == Cancel) {
|
}else if(source == Cancel) {
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package model;
|
package model;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
|
||||||
public class Contact {
|
public class Contact {
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
package model;
|
package model;
|
||||||
|
|
||||||
import network.*;
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ListeContacts {
|
public class ListeContacts {
|
||||||
private static Contact user;
|
|
||||||
private ArrayList<Contact> listeContact;
|
private ArrayList<Contact> listeContact;
|
||||||
|
|
||||||
|
|
||||||
//la liste doit être un singleton
|
|
||||||
|
|
||||||
private static final ListeContacts instance = new ListeContacts();
|
private static final ListeContacts instance = new ListeContacts();
|
||||||
|
|
||||||
public ListeContacts() {
|
public ListeContacts() {
|
||||||
|
@ -21,10 +17,6 @@ public class ListeContacts {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void createUser(String pseudo, int port) {
|
|
||||||
user = new Contact(pseudo, Tools.getLocalIp(), port);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean contactExist(Contact contact) {
|
public boolean contactExist(Contact contact) {
|
||||||
for(Contact c : listeContact) {
|
for(Contact c : listeContact) {
|
||||||
if(c.getPseudo().equals(contact.getPseudo())){
|
if(c.getPseudo().equals(contact.getPseudo())){
|
||||||
|
|
|
@ -5,6 +5,8 @@ import java.net.*;
|
||||||
|
|
||||||
public class Message implements Serializable{
|
public class Message implements Serializable{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
protected InetAddress addressSrc;
|
protected InetAddress addressSrc;
|
||||||
protected InetAddress addressDest;
|
protected InetAddress addressDest;
|
||||||
protected int portSrc;
|
protected int portSrc;
|
||||||
|
|
|
@ -7,6 +7,8 @@ import java.util.Date;
|
||||||
|
|
||||||
public class MessageChat extends Message{
|
public class MessageChat extends Message{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private String message;
|
private String message;
|
||||||
private Date date;
|
private Date date;
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ import java.net.InetAddress;
|
||||||
|
|
||||||
public class MessagePseudo extends Message{
|
public class MessagePseudo extends Message{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private String pseudo;
|
private String pseudo;
|
||||||
private int id;
|
private int id;
|
||||||
private String ancienPseudo;
|
private String ancienPseudo;
|
||||||
|
|
|
@ -10,7 +10,6 @@ import java.net.InetAddress;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import controller.Agent;
|
|
||||||
import model.Contact;
|
import model.Contact;
|
||||||
import model.MessageChat;
|
import model.MessageChat;
|
||||||
|
|
||||||
|
@ -56,23 +55,20 @@ public class TCPChat extends Thread{
|
||||||
public void run() {
|
public void run() {
|
||||||
BufferedReader in;
|
BufferedReader in;
|
||||||
try {
|
try {
|
||||||
|
|
||||||
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
|
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String input = in.readLine();
|
String input = in.readLine();
|
||||||
MessageChat msgRecu = new MessageChat(this.socket.getInetAddress(), this.socket.getLocalAddress(), this.socket.getPort(), this.socket.getLocalPort(), 0, input);
|
MessageChat msgRecu = new MessageChat(this.socket.getInetAddress(), this.socket.getLocalAddress(), this.socket.getPort(), this.socket.getLocalPort(), 0, input);
|
||||||
listeMessagesRecu.add(msgRecu);
|
listeMessagesRecu.add(msgRecu);
|
||||||
//System.out.println("fire msg tcp recu");
|
|
||||||
this.support.firePropertyChange("Msg TCP Recu", true, false);
|
this.support.firePropertyChange("Msg TCP Recu", true, false);
|
||||||
//if (!msgRecu.getMessage().equals(null)) {
|
|
||||||
//System.out.println("Message reçu : "+msgRecu.getMessage() );
|
|
||||||
//}
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
this.support.firePropertyChange("deconnexion",true,false);
|
this.support.firePropertyChange("deconnexion",true,false);
|
||||||
System.out.println("Création et read du in impossible");
|
System.out.println("Création et read du in impossible");
|
||||||
break;
|
break;
|
||||||
//e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -85,7 +81,6 @@ public class TCPChat extends Thread{
|
||||||
public void sendMsg(String message) throws IOException {
|
public void sendMsg(String message) throws IOException {
|
||||||
PrintWriter out = new PrintWriter(this.socket.getOutputStream(),true);
|
PrintWriter out = new PrintWriter(this.socket.getOutputStream(),true);
|
||||||
out.println(message);
|
out.println(message);
|
||||||
//System.out.println("Message envoyé : "+message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package network;
|
package network;
|
||||||
|
|
||||||
import java.beans.PropertyChangeEvent;
|
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.beans.PropertyChangeSupport;
|
import java.beans.PropertyChangeSupport;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -18,9 +17,9 @@ public class TCPServer extends Thread{
|
||||||
private PropertyChangeSupport support;
|
private PropertyChangeSupport support;
|
||||||
|
|
||||||
public TCPServer(int port, InetAddress address) throws IOException {
|
public TCPServer(int port, InetAddress address) throws IOException {
|
||||||
|
this.port = port;
|
||||||
this.socket = new ServerSocket(port, 1000, address);
|
this.socket = new ServerSocket(port, 1000, address);
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this.port = port;
|
|
||||||
this.listeConnexions = new ArrayList<TCPChat>();
|
this.listeConnexions = new ArrayList<TCPChat>();
|
||||||
this.support = new PropertyChangeSupport(this);
|
this.support = new PropertyChangeSupport(this);
|
||||||
this.start();
|
this.start();
|
||||||
|
@ -39,7 +38,6 @@ public class TCPServer extends Thread{
|
||||||
TCPChat tcpChat = new TCPChat(link);
|
TCPChat tcpChat = new TCPChat(link);
|
||||||
this.listeConnexions.add(tcpChat);
|
this.listeConnexions.add(tcpChat);
|
||||||
this.support.firePropertyChange("session chat demarree", true, false);
|
this.support.firePropertyChange("session chat demarree", true, false);
|
||||||
//link.close();// A APPELER QUELQUE PART D'AUTRE
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("Socket non créé ou non fermé");
|
System.out.println("Socket non créé ou non fermé");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
package network;
|
package network;
|
||||||
|
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
|
||||||
|
@ -18,7 +19,9 @@ public class Tools {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Renvoie un tableau d'InetAdress le premier élement est l'adresse locale de la machine le deuxieme l'adresse de broadcast
|
//Renvoie un tableau d'InetAdress
|
||||||
|
//le premier élement est l'adresse locale de la machine
|
||||||
|
//le deuxieme l'adresse de broadcast
|
||||||
public static InetAddress[] getAdress() {
|
public static InetAddress[] getAdress() {
|
||||||
Enumeration<NetworkInterface> interfaces = null;
|
Enumeration<NetworkInterface> interfaces = null;
|
||||||
InetAddress localAdress = null;
|
InetAddress localAdress = null;
|
||||||
|
|
|
@ -12,6 +12,7 @@ import java.util.ArrayList;
|
||||||
|
|
||||||
|
|
||||||
public class UDPInput extends Thread{
|
public class UDPInput extends Thread{
|
||||||
|
|
||||||
private DatagramSocket socket;
|
private DatagramSocket socket;
|
||||||
private ArrayList<MessagePseudo> messageReceived;
|
private ArrayList<MessagePseudo> messageReceived;
|
||||||
private PropertyChangeSupport support;
|
private PropertyChangeSupport support;
|
||||||
|
@ -48,19 +49,14 @@ public class UDPInput extends Thread{
|
||||||
System.out.println("Packet UDP non reçu\n");
|
System.out.println("Packet UDP non reçu\n");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
/* Charset charset = StandardCharsets.US_ASCII;
|
|
||||||
String pseudo = charset.decode(ByteBuffer.wrap(inPacket.getData())).toString();
|
|
||||||
MessagePseudo msg = new MessagePseudo(null, null, 0, 0, 0, "");
|
|
||||||
msg.setPseudo(pseudo);*/
|
|
||||||
ByteArrayInputStream byteInStream = new ByteArrayInputStream(inPacket.getData());
|
ByteArrayInputStream byteInStream = new ByteArrayInputStream(inPacket.getData());
|
||||||
ObjectInputStream objectInStream;
|
ObjectInputStream objectInStream;
|
||||||
try {
|
try {
|
||||||
objectInStream = new ObjectInputStream(byteInStream);
|
objectInStream = new ObjectInputStream(byteInStream);
|
||||||
MessagePseudo msg = (MessagePseudo) objectInStream.readObject();
|
MessagePseudo msg = (MessagePseudo) objectInStream.readObject();
|
||||||
messageReceived.add(msg);
|
messageReceived.add(msg);
|
||||||
System.out.println("fire property change");
|
|
||||||
this.support.firePropertyChange("Msg UDP Recu", this.messageReceived.size() -1, this.messageReceived.size());
|
this.support.firePropertyChange("Msg UDP Recu", this.messageReceived.size() -1, this.messageReceived.size());
|
||||||
System.out.println("Message reçu, pseudo = "+msg.getPseudo()+" et num port = "+msg.getPortSrc()+"\n");
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.out.println("Objet pas créé");
|
System.out.println("Objet pas créé");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
package network;
|
package network;
|
||||||
|
|
||||||
import model.*;
|
import model.*;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
@ -6,10 +7,8 @@ import java.io.IOException;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class UDPOutput {
|
public class UDPOutput {
|
||||||
|
|
||||||
private Contact user;
|
private Contact user;
|
||||||
private DatagramSocket socket;
|
private DatagramSocket socket;
|
||||||
private int port;
|
private int port;
|
||||||
|
@ -23,32 +22,21 @@ public class UDPOutput {
|
||||||
|
|
||||||
|
|
||||||
public void send(MessagePseudo msg, InetAddress addressDest, int portSrc) throws IOException {
|
public void send(MessagePseudo msg, InetAddress addressDest, int portSrc) throws IOException {
|
||||||
|
|
||||||
byte[] buffer = "".getBytes();
|
byte[] buffer = "".getBytes();
|
||||||
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
|
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
|
||||||
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
|
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
|
||||||
objectOutStream.writeObject(msg);
|
objectOutStream.writeObject(msg);
|
||||||
objectOutStream.close();
|
objectOutStream.close();
|
||||||
buffer = byteOutStream.toByteArray();
|
buffer = byteOutStream.toByteArray();
|
||||||
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(), msg.getPortDest());
|
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(), msg.getPortDest());
|
||||||
this.socket.send(packet);
|
this.socket.send(packet);
|
||||||
System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DatagramSocket getSocket() {
|
public DatagramSocket getSocket() {
|
||||||
return this.socket;
|
return this.socket;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public void send(MessageChangePseudo msg, InetAddress addressDest, int portSrc) throws IOException {
|
|
||||||
byte[] buffer = "".getBytes();
|
|
||||||
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
|
|
||||||
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
|
|
||||||
objectOutStream.writeObject(msg);
|
|
||||||
objectOutStream.close();
|
|
||||||
buffer = byteOutStream.toByteArray();
|
|
||||||
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(),msg.getPortDest());
|
|
||||||
this.socket.send(packet);
|
|
||||||
System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n");
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue