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