diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/ChatApp-AL-NM.iml b/.idea/ChatApp-AL-NM.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/ChatApp-AL-NM.iml
@@ -0,0 +1,9 @@
+
+
+ * Classe representant les echanges HTTP entre un utilisateur distant et le servlet. + *
+ */ +public class HttpEchange { + + private String url = "http://localhost:8080/JavaEEHelloWorld_war_exploded/"; //Correspond à l'url de notre serveur de presence + private static boolean connecte = false; // True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon + private ChatApp chatapp; + + /** + *Constructeur de la classe HttpEchange
+ * @param chatapp La methode prend toujours en argument un parametre chatApp associe a un utilisateur. + */ + public HttpEchange(ChatApp chatapp){ + this.chatapp = chatapp; + } + + /** + *Cette methode permet de communiquer avec le servlet grace a des requetes http de type Post.
+ * @param type Le type de message ("Connexion", "Changement de pseudo" , "Deconnexion") ainsi que les parametres associe + * @return True ou False selon la reponse a chaque type de message envoye. + * @throws IOException + * @throws InterruptedException + */ + public boolean sendPost(String type) throws IOException, InterruptedException{ + boolean reussi = false ; + if (type.equals("Connexion")){ + System.out.println("Tentative de connexion distante"); + HttpClient client = HttpClient.newHttpClient(); + String requestBody = "Connexion\n" + this.chatapp.getMe().toString() ; + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .POST(HttpRequest.BodyPublishers.ofString(requestBody)) + .build(); + + HttpResponse+* Classe permettant de sauvegarder les échanges entre deux utilisateurs +*
+*/ +public class Historique { + private Utilisateur User1; + private Utilisateur User2; + // Liste conservant les differents échanges + private ArrayList+ * Constructeur : un historique sauvegarde les echanges entre + * User1 et User2 + * @param User1 - un utilisateur + * @param User2 - un second utilisateur + *
+ */ + public Historique(Utilisateur User1, Utilisateur User2) { + this.User1 = User1; + this.User2 = User2; + this.HistoriqueHorodate = new ArrayList+ * On ajoute un message échangé dans la liste 'HistoriqueHorodate' + * + * @param mh - le message horodate échangé + *
+ */ + public void addMessage(MessageHorodate mh) { + this.HistoriqueHorodate.add(mh); + } + + /** + *+ * getter pour recuperer le second utilisateur + *
+ */ + public Utilisateur getUser2() { + return User2; + } + + public void afficher10derniers() { + System.out.println("Demarrage de l'affichage partiel de l'historique"); + System.out.println("Il y a actuellement " + HistoriqueHorodate.size() +" elements dans l'historique"); + int n =10; + if(HistoriqueHorodate.size()<=10) { + n = HistoriqueHorodate.size(); + } + for(int i = 0; i+* Classe representant les messages envoyés en TCP lors d'une session de clavardage +*
+*/ +public class MessageHorodate implements Serializable { + private Utilisateur destinataire ; + private Utilisateur source ; + private Date dateHorodatage ; + private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion + private String Message; + + /** + *+ * Constructeur , le message va etre horodate + * @param destinataire - Destinataire du message + * @param source - Source du message + * @param Message - Message envoye + *
+ */ + public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) { + this.setDestinataire(destinataire) ; + this.setSource(source) ; + this.setMessage(Message) ; + this.setDateHorodatage(new Date()); + this.type = type; + } + + public void setDate(Date d) { + this.setDateHorodatage(d); + } + + /** + *+ * permet de creer une representation string du message + * @return Les differents attributs de la classe sous forme de string + *
+ */ + @Override + public String toString() { + String Msg = ""; + Msg += ("Destinataire::" + this.getDestinataire() + "\n") ; + Msg += ("Source::" + this.getSource()+ "\n") ; + Msg += ("Type::"+ this.type+ "\n"); + Msg += ("Date::" + this.dateToString() + "\n") ; + Msg += ("Message::" + this.getMessage() + "\n" ); + return Msg ; + } + + /** + *+ * permet de creer une representation string de la date d'horodatage + * @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss + *
+ */ + public String dateToString() { + DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + return format.format(this.getDateHorodatage()); + } + + + /** + *+ * Permet de re creer un message horodate a partir d'un string + * @return un messageHorodate + *
+ */ + public static MessageHorodate stringToMessageHorodate(String s) { + + String mots[] = s.split("\n"); + Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]); + Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]); + int type = Integer.parseInt(mots[2].split("::")[1]); + DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + Date date = new Date(); + /*try { + date = format.parse(mots[3].split("::")[1]); + } catch (Exception e) { + e.printStackTrace(); + }*/ + String payload = ""; + for(int i=4; i< mots.length; i++) { + if(mots[i].startsWith("Message::")) { + mots[i]=mots[i].split("::")[1]; + } + payload += mots[i]+"\n"; + } + + MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type); + //mh.setDate(date); + + return mh ; + } + + public Utilisateur getSource() { + return source; + } + + public void setSource(Utilisateur source) { + this.source = source; + } + + public Utilisateur getDestinataire() { + return destinataire; + } + + public void setDestinataire(Utilisateur destinataire) { + this.destinataire = destinataire; + } + + public String getMessage() { + return Message; + } + + public void setMessage(String message) { + Message = message; + } + + public int getType() { + return type; + } + + public void setType(int Type) { + this.type = type; + } + + public Date getDateHorodatage() { + return dateHorodatage; + } + + public void setDateHorodatage(Date dateHorodatage) { + this.dateHorodatage = dateHorodatage; + } + +} diff --git a/Implementation/src/Model/Utilisateur.java b/Implementation/src/Model/Utilisateur.java new file mode 100644 index 0000000..9a35547 --- /dev/null +++ b/Implementation/src/Model/Utilisateur.java @@ -0,0 +1,77 @@ +package src.Controller; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class Utilisateur extends Object { + + private String pseudo ; + private Integer port; + private InetAddress ip ; + private String id ; + + public Utilisateur(String pseudo,Integer port, InetAddress ip ){ + this.setPseudo(pseudo) ; + this.setPort(port); + this.ip = ip ; + this.id = ip.getHostName() ; + } + + public String getPseudo() { + return pseudo; + } + + public void setPseudo(String pseudo) { + this.pseudo = pseudo; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public InetAddress getIp() { + return ip; + } + public String getId() { + return id; + } + + @Override + public String toString(){ + String s = ""; + s+="pseudo " + this.pseudo + " | "; + s+="port " + (this.port).toString() + " | "; + s+="ip " + (this.ip).toString() + " | "; + s+="id " + (this.id).toString() + " | "; + return s; + } + + public static Utilisateur stringToUtilisateur(String s) { + String name = ""; + Integer port = 0; + String ip = "" ; + String id = ""; + String mots[] = s.split(" "); + name=mots[1]; + port=Integer.parseInt(mots[4]); + ip=mots[7]; + id=mots[10]; + Utilisateur user = null; + try { + user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1])); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + return user; + } + + + public Boolean equals(Utilisateur u) { + return this.getId().equals( u.getId() ) ; + } + +}