clean + comments

This commit is contained in:
Elise Barnabe 2021-02-13 10:22:15 +01:00
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.

View file

@ -5,8 +5,8 @@
"port": 8080
},
"config":{
"interface": "wlan3",
"portSrc": 26001,
"portDest":26000
"interface": "wlan4",
"portSrc": 26000,
"portDest":26001
}
}

View file

@ -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() {

View file

@ -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;
}

View file

@ -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;

View file

@ -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);

View file

@ -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 lutilisateur 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();
}
boolean loginExiste = false;
boolean loginEstActif = false;
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();
//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 {
//Le login n'existe pas
if(!loginExiste) {
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();
}
}
//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();

View file

@ -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 lutilisateur 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);
// 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();

View file

@ -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,7 +148,6 @@ 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);
@ -156,7 +155,6 @@ public class FenetreMenu {
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);

View file

@ -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 lutilisateur 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 {

View file

@ -1,6 +1,5 @@
package model;
import java.io.*;
import java.net.InetAddress;
public class Contact {

View file

@ -1,16 +1,12 @@
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();
public 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())){

View file

@ -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;

View file

@ -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;

View file

@ -4,6 +4,8 @@ import java.net.InetAddress;
public class MessagePseudo extends Message{
private static final long serialVersionUID = 1L;
private String pseudo;
private int id;
private String ancienPseudo;

View file

@ -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) {
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);
}

View file

@ -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();

View file

@ -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;

View file

@ -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();

View file

@ -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");
}*/
}