Browse Source

SendPost fonctionnelle (vraiment fonctionnelle)

Nabzzz 3 years ago
parent
commit
c3d61ca196

+ 3
- 0
.idea/.gitignore View File

@@ -0,0 +1,3 @@
1
+# Default ignored files
2
+/shelf/
3
+/workspace.xml

+ 9
- 0
.idea/ChatApp-AL-NM.iml View File

@@ -0,0 +1,9 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<module type="JAVA_MODULE" version="4">
3
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+    <exclude-output />
5
+    <content url="file://$MODULE_DIR$" />
6
+    <orderEntry type="inheritedJdk" />
7
+    <orderEntry type="sourceFolder" forTests="false" />
8
+  </component>
9
+</module>

+ 4
- 0
.idea/misc.xml View File

@@ -0,0 +1,4 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="ProjectRootManager" version="2" project-jdk-name="13" project-jdk-type="JavaSDK" />
4
+</project>

+ 8
- 0
.idea/modules.xml View File

@@ -0,0 +1,8 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="ProjectModuleManager">
4
+    <modules>
5
+      <module fileurl="file://$PROJECT_DIR$/.idea/ChatApp-AL-NM.iml" filepath="$PROJECT_DIR$/.idea/ChatApp-AL-NM.iml" />
6
+    </modules>
7
+  </component>
8
+</project>

+ 6
- 0
.idea/vcs.xml View File

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="VcsDirectoryMappings">
4
+    <mapping directory="" vcs="Git" />
5
+  </component>
6
+</project>

+ 90
- 0
Implementation/chatapp/src/main/java/chatapp/Protocol/HttpEchange.java View File

@@ -0,0 +1,90 @@
1
+package chatapp.Protocol;
2
+
3
+import chatapp.Controller.ChatApp;
4
+
5
+import java.io.IOException;
6
+import java.net.URI;
7
+import java.net.http.HttpClient;
8
+import java.net.http.HttpRequest;
9
+import java.net.http.HttpResponse;
10
+import java.util.HashMap;
11
+
12
+/**
13
+ * <p>
14
+ * Classe representant les echanges HTTP entre un utilisateur distant et le servlet.
15
+ * </p>
16
+ */
17
+public class HttpEchange {
18
+
19
+    private String url = "http://localhost:8080/JavaEEHelloWorld_war_exploded/"; //Correspond à l'url de notre serveur de presence
20
+    private static boolean connecte = false; // True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon
21
+    private ChatApp chatapp;
22
+
23
+    /**
24
+     * <p> Constructeur de la classe HttpEchange</p>
25
+     * @param chatapp La methode prend toujours en argument un parametre chatApp associe a un utilisateur.
26
+     */
27
+    public HttpEchange(ChatApp chatapp){
28
+        this.chatapp = chatapp;
29
+    }
30
+
31
+    /**
32
+     * <p> Cette methode permet de communiquer avec le servlet grace a des requetes http de type Post.</p>
33
+     * @param type Le type de message ("Connexion", "Changement de pseudo" , "Deconnexion") ainsi que les parametres associe
34
+     * @return True ou False selon la reponse a chaque type de message envoye.
35
+     * @throws IOException
36
+     * @throws InterruptedException
37
+     */
38
+    public boolean sendPost(String type)  throws IOException, InterruptedException{
39
+        boolean reussi = false ;
40
+        if (type.equals("Connexion")){
41
+            System.out.println("Tentative de connexion distante");
42
+            HttpClient client = HttpClient.newHttpClient();
43
+            String requestBody = "Connexion\n" + this.chatapp.getMe().toString() ;
44
+            HttpRequest request = HttpRequest.newBuilder()
45
+                    .uri(URI.create(url))
46
+                    .POST(HttpRequest.BodyPublishers.ofString(requestBody))
47
+                    .build();
48
+
49
+            HttpResponse<String> response = client.send(request,
50
+                    HttpResponse.BodyHandlers.ofString());
51
+
52
+            if(response.body().equals("")){
53
+                System.out.println("Reponse recue vide");
54
+            }
55
+            else {
56
+                switch (response.body().split("\n")[0]){
57
+                    case "Reponse Connexion":
58
+                        reussi = Boolean.parseBoolean(response.body().split("\n")[1]);
59
+                        System.out.println("Connexion acceptee");
60
+                        break;
61
+                    default:
62
+                        System.out.println("Erreur dans le format de la réponse reçue");
63
+                }
64
+            }
65
+        }
66
+        else{
67
+            System.out.println("Erreur de type");
68
+        }
69
+        return reussi;
70
+    }
71
+
72
+
73
+
74
+
75
+    /**
76
+     * Getter
77
+     * @return le boolean connecte (True s'il peut se connecter avec ce nom d'utilisateur , False sinon)
78
+     */
79
+    public static Boolean getConnecte() {
80
+        return connecte;
81
+    }
82
+
83
+    /**
84
+     * Setter
85
+     * @param value La nouvelle valeur du boolean de connexion
86
+     */
87
+    public static void setConnecte(Boolean value) {
88
+        connecte = value ;
89
+    }
90
+}

+ 63
- 0
Implementation/src/Model/Historique.java View File

@@ -0,0 +1,63 @@
1
+package src.Controller;
2
+
3
+import java.util.ArrayList;
4
+
5
+/**
6
+* <p>
7
+* Classe permettant de sauvegarder les échanges entre deux utilisateurs
8
+* </p>
9
+*/
10
+public class Historique {
11
+	private Utilisateur User1;
12
+	private Utilisateur User2;
13
+	// Liste conservant les differents échanges 
14
+	private ArrayList<MessageHorodate> HistoriqueHorodate ; 
15
+	
16
+	/**
17
+	* <p>
18
+	* Constructeur : un historique sauvegarde les echanges entre
19
+	* User1 et User2
20
+	* @param User1 - un utilisateur
21
+	* @param User2 - un second utilisateur
22
+	* </p>
23
+	*/
24
+	public Historique(Utilisateur User1, Utilisateur User2) {
25
+		this.User1 = User1;
26
+		this.User2 = User2;
27
+		this.HistoriqueHorodate = new ArrayList<MessageHorodate>();
28
+	}
29
+	
30
+	/**
31
+	* <p>
32
+	* On ajoute un message échangé dans la liste 'HistoriqueHorodate'
33
+	* 
34
+	* @param mh - le message horodate échangé
35
+	* </p>
36
+	*/
37
+	public void addMessage(MessageHorodate mh) {
38
+		this.HistoriqueHorodate.add(mh);
39
+	}
40
+
41
+	/**
42
+	* <p>
43
+	* getter pour recuperer le second utilisateur
44
+	* </p>
45
+	*/
46
+	public Utilisateur getUser2() {
47
+		return User2;
48
+	}
49
+	
50
+	public void afficher10derniers() {
51
+		System.out.println("Demarrage de l'affichage partiel de l'historique");
52
+		System.out.println("Il y a actuellement " + HistoriqueHorodate.size() +" elements dans l'historique");
53
+		int n =10;
54
+		if(HistoriqueHorodate.size()<=10) {
55
+			n = HistoriqueHorodate.size();
56
+		}
57
+		for(int i = 0; i<n;i++) {
58
+			String exp = HistoriqueHorodate.get(i).getSource().getPseudo();
59
+			String payload = HistoriqueHorodate.get(i).getMessage();
60
+			System.out.println(exp+" : "+payload);
61
+		}
62
+	}
63
+}

+ 125
- 0
Implementation/src/Model/ListUtilisateurs.java View File

@@ -0,0 +1,125 @@
1
+package src.Controller;
2
+
3
+import java.net.InetAddress;
4
+import java.util.ArrayList;
5
+
6
+public class ListUtilisateurs {
7
+
8
+	private ArrayList<Utilisateur> actifUsers ; 
9
+	
10
+	public ListUtilisateurs() {
11
+		this.actifUsers = new ArrayList<Utilisateur>() ;
12
+	}
13
+	/**
14
+     * Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
15
+     * 
16
+     * @param u on va rajouter cet utilisateur dans la liste
17
+     */
18
+	public void addList(Utilisateur u) {
19
+		if((verifierUnicite(u.getPseudo()))) {
20
+			this.actifUsers.add(u);
21
+		}
22
+		
23
+		
24
+	}
25
+	
26
+	/**
27
+     * Recuperer un utilisateur à partir de son pseudo
28
+     * 
29
+     * @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
30
+     */
31
+	public Utilisateur getPseudoList(String pseudo) {
32
+		for(Utilisateur elem: this.actifUsers)
33
+        {
34
+        	 if (elem.getPseudo().equals(pseudo) ) {
35
+        		 return elem ;
36
+        	 }
37
+        }
38
+		return null ;
39
+	}
40
+	
41
+	public Utilisateur getIPList(InetAddress ip) throws Exception {
42
+		for(Utilisateur elem: this.actifUsers)
43
+        {
44
+        	 if (elem.getIp().equals(ip) ) {
45
+        		 return elem ;
46
+        	 }
47
+        }
48
+		throw new Exception("No such user with this IP address") ;
49
+	}
50
+	
51
+	/**
52
+     * Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
53
+     * 
54
+     * @param u on va supprimer cet utilisateur dans la liste
55
+     */
56
+	public void supprimerList(Utilisateur u) {
57
+		Boolean Sup = false ;
58
+		for(Utilisateur elem: this.actifUsers)
59
+        {
60
+        	 if (elem.equals(u) ) {
61
+        		 this.actifUsers.remove(elem);
62
+        		 Sup = true ;
63
+        		 this.afficherListeUtilisateurs();
64
+        	 }
65
+        }
66
+		if (!Sup) {
67
+		    System.out.println("Tentative de retirer un objet non contenu dans la liste");
68
+		}
69
+	}
70
+	
71
+	/**
72
+     * Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers' 
73
+     * 
74
+     * @param ancien correspond au pseudo remplacer
75
+     * @param nouveau correspond au nouveau pseudo
76
+     */
77
+	public void modifierList(String ancien , String nouveau) {
78
+		for(Utilisateur elem: this.actifUsers)
79
+        {
80
+        	 if (ancien.equals( elem.getPseudo() ) ) {
81
+        		 this.actifUsers.remove(elem);
82
+        		 elem.setPseudo(nouveau);;
83
+        		 this.addList(elem);
84
+        		 
85
+        	 }
86
+        }
87
+		this.afficherListeUtilisateurs();
88
+	} 
89
+	
90
+	public Boolean appartient(Utilisateur u) {
91
+		return this.actifUsers.contains(u);
92
+	}
93
+	 
94
+	
95
+
96
+	/**
97
+     * Verifie qu'aucun autre utilisateur ne possède le même pseudo
98
+     * 
99
+     * @param u on va supprimer cet utilisateur dans la liste
100
+     */
101
+	public Boolean verifierUnicite(String pseudo) {
102
+		for(Utilisateur elem: this.actifUsers)
103
+        {
104
+        	 if (pseudo.equals( elem.getPseudo() ) ) {
105
+        		 return false ;
106
+        	 }
107
+        }
108
+		return true;
109
+	}
110
+	
111
+	/**
112
+     * Méthode affichant la liste des utilisateurs actifs
113
+     * 
114
+     */
115
+	public String afficherListeUtilisateurs() {
116
+		System.out.println ("Liste des utilisateurs actifs : ");
117
+		String Utilisateur = "" ;
118
+		for(Utilisateur elem: this.actifUsers)
119
+        {
120
+        	 System.out.println (elem.toString());
121
+        	 Utilisateur += (elem + "\n");
122
+        }	      
123
+		return Utilisateur;
124
+	}
125
+}

+ 142
- 0
Implementation/src/Model/MessageHorodate.java View File

@@ -0,0 +1,142 @@
1
+package src.Controller;
2
+
3
+import java.text.DateFormat;
4
+import java.text.ParseException;
5
+import java.text.SimpleDateFormat;
6
+import java.util.Date;
7
+import java.io.Serializable;
8
+/**
9
+* <p>
10
+* Classe representant les messages envoyés en TCP lors d'une session de clavardage
11
+* </p>
12
+*/
13
+public class MessageHorodate implements Serializable {
14
+	private Utilisateur destinataire ;
15
+	private Utilisateur source ;
16
+	private Date dateHorodatage ;
17
+	private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion 
18
+	private String Message;
19
+	
20
+	/**
21
+	* <p>
22
+	* Constructeur , le message va etre horodate 
23
+	* @param destinataire - Destinataire du message
24
+	* @param source - Source du message
25
+	* @param Message - Message envoye
26
+	* </p>
27
+	*/
28
+	public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) {
29
+		this.setDestinataire(destinataire) ;
30
+		this.setSource(source) ;
31
+		this.setMessage(Message) ;
32
+		this.setDateHorodatage(new Date());
33
+		this.type = type;
34
+	}
35
+	
36
+	public void setDate(Date d) {
37
+		this.setDateHorodatage(d);
38
+	}
39
+	
40
+	/**
41
+	* <p>
42
+	* permet de creer une representation string du message
43
+	* @return Les differents attributs de la classe sous forme de string
44
+	* </p>
45
+	*/
46
+	@Override
47
+	public String toString() {
48
+		String Msg = "";
49
+		Msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
50
+		Msg += ("Source::" + this.getSource()+ "\n") ;
51
+		Msg += ("Type::"+ this.type+ "\n");
52
+		Msg += ("Date::" + this.dateToString() + "\n") ;
53
+		Msg += ("Message::" + this.getMessage() + "\n" );
54
+		return Msg ;
55
+	}
56
+	
57
+	/**
58
+	* <p>
59
+	* permet de creer une representation string de la date d'horodatage
60
+	* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
61
+	* </p>
62
+	*/
63
+	public String dateToString() {
64
+		DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
65
+		return format.format(this.getDateHorodatage());
66
+	}
67
+	
68
+	
69
+	/**
70
+	* <p>
71
+	* Permet de re creer un message horodate a partir d'un string 
72
+	* @return un messageHorodate
73
+	* </p>
74
+	*/
75
+	  public static MessageHorodate stringToMessageHorodate(String s) {
76
+		
77
+		String mots[] = s.split("\n");
78
+		Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]);
79
+		Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]);
80
+		int type = Integer.parseInt(mots[2].split("::")[1]);
81
+		DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
82
+		Date date = new Date();
83
+		/*try {
84
+			date = format.parse(mots[3].split("::")[1]);
85
+		} catch (Exception e) {
86
+			e.printStackTrace();
87
+		}*/
88
+		String payload = "";
89
+		for(int i=4; i< mots.length; i++) {
90
+			if(mots[i].startsWith("Message::")) {
91
+				mots[i]=mots[i].split("::")[1];
92
+			}
93
+			payload += mots[i]+"\n";
94
+		}
95
+		
96
+		MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
97
+		//mh.setDate(date);
98
+	
99
+		return mh ;
100
+	}
101
+
102
+	public Utilisateur getSource() {
103
+		return source;
104
+	}
105
+
106
+	public void setSource(Utilisateur source) {
107
+		this.source = source;
108
+	}
109
+
110
+	public Utilisateur getDestinataire() {
111
+		return destinataire;
112
+	}
113
+
114
+	public void setDestinataire(Utilisateur destinataire) {
115
+		this.destinataire = destinataire;
116
+	}
117
+
118
+	public String getMessage() {
119
+		return Message;
120
+	}
121
+
122
+	public void setMessage(String message) {
123
+		Message = message;
124
+	}
125
+	
126
+	public int getType() {
127
+		return type;
128
+	}
129
+
130
+	public void setType(int Type) {
131
+		this.type = type;
132
+	}
133
+
134
+	public Date getDateHorodatage() {
135
+		return dateHorodatage;
136
+	}
137
+
138
+	public void setDateHorodatage(Date dateHorodatage) {
139
+		this.dateHorodatage = dateHorodatage;
140
+	}
141
+
142
+}

+ 77
- 0
Implementation/src/Model/Utilisateur.java View File

@@ -0,0 +1,77 @@
1
+package src.Controller;
2
+
3
+import java.net.InetAddress;
4
+import java.net.UnknownHostException;
5
+
6
+public class Utilisateur extends Object {
7
+
8
+	private String pseudo ;
9
+	private Integer port; 
10
+	private InetAddress ip ; 
11
+	private String id ; 
12
+	
13
+	public Utilisateur(String pseudo,Integer port, InetAddress ip ){
14
+		this.setPseudo(pseudo) ;
15
+		this.setPort(port);
16
+		this.ip = ip ;
17
+		this.id = ip.getHostName() ;
18
+	}
19
+
20
+	public String getPseudo() {
21
+		return pseudo;
22
+	}
23
+
24
+	public void setPseudo(String pseudo) {
25
+		this.pseudo = pseudo;
26
+	}
27
+
28
+	public Integer getPort() {
29
+		return port;
30
+	}
31
+
32
+	public void setPort(Integer port) {
33
+		this.port = port;
34
+	}
35
+
36
+	public InetAddress getIp() {
37
+		return ip;
38
+	}
39
+	public String getId() {
40
+		return id;
41
+	}
42
+	
43
+	@Override
44
+	public String toString(){
45
+		String s = "";
46
+		s+="pseudo " + this.pseudo + " | ";
47
+		s+="port " + (this.port).toString() + " | ";
48
+		s+="ip " + (this.ip).toString() + " | ";
49
+		s+="id " + (this.id).toString() + " | ";
50
+		return s;
51
+	}
52
+	
53
+	public static Utilisateur stringToUtilisateur(String s) {
54
+		String name = "";
55
+		Integer port = 0;
56
+		String ip = "" ;
57
+		String id = "";
58
+		String mots[] = s.split(" ");
59
+		name=mots[1];
60
+		port=Integer.parseInt(mots[4]);
61
+		ip=mots[7];
62
+		id=mots[10];
63
+		Utilisateur user = null;
64
+		try {
65
+			user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1]));
66
+		} catch (UnknownHostException e) {
67
+			e.printStackTrace();
68
+		}
69
+		return user;
70
+	}
71
+
72
+	
73
+	public Boolean equals(Utilisateur u) {
74
+		return this.getId().equals( u.getId() ) ;
75
+	}
76
+	
77
+}

Loading…
Cancel
Save