diff --git a/Implementation/src/ChatApp.java b/Implementation/src/ChatApp.java
index 95e9a35..2894f65 100644
--- a/Implementation/src/ChatApp.java
+++ b/Implementation/src/ChatApp.java
@@ -1,9 +1,14 @@
import java.io.IOException;
+import java.net.DatagramSocket;
import java.net.InetAddress;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -14,35 +19,36 @@ import java.util.concurrent.Executors;
*/
public class ChatApp {
-
+
/* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ;
private static ArrayList ListPort = new ArrayList();
private Map mapHistorique ;
-
-
-
-
-
-
+
+
+
+
+
+
public static ArrayList getListPort() {
return ListPort;
}
/* ChatApp est associé à un utilisateur */
private Utilisateur me;
-
+
/**
* Constructeur de l'application de chat
- *
+ *
* @param pseudo Pseudo de l'utilisateur
- * @param port Port de communication
+ * @param port Port de communication
*/
public ChatApp(String pseudo, Integer port){
this.actifUsers = new ListUtilisateurs() ;
- // Recuperer adresse IP de l'utilisateur
+ // Recuperer adresse IP de l'utilisateur
InetAddress ip = null ;
try {
+ //ip = InetAddress.getByName("192.168.1.72");
ip = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
@@ -52,69 +58,72 @@ public class ChatApp {
this.actifUsers.addList(getMe());
this.mapHistorique = new HashMap() ;
}
-
+
public void majHistorique(String pseudo,Historique h) {
getMapHistorique().put(h.getUser2().getPseudo(),h);
}
-
-
+
+
/**
- * Modification du pseudo de l'utilisateur
+ * Modification du pseudo de l'utilisateur
* Envoie en broadcast son ancien pseudo et son nouveau
- *
+ *
* @param nouveau correspond au nouveau pseudo
*/
public void modifierPseudo(String nouveau) throws IOException {
- // @ de broadcast du réseau de l'utilisateur me
- InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
+ // @ de broadcast du réseau de l'utilisateur me
+ InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Modification Pseudo\n" + this.getMe().getPseudo() + "\n" + nouveau + "\n";
- for(Integer p : ListPort ) {
+ /*for(Integer p : ListPort ) {
if(!(p.equals(this.getMe().getPort())))
{
UDPEchange.connexion(broadcastAdress,broadcastMessage, p);
}
- }
+ }*/
+ UDPEchange.connexion(broadcastAdress,broadcastMessage, 1024);
}
-
-
+
+
/**
- * Methode appelée lors de la connexion d'un nouvel utilisateur.
+ * Methode appelée lors de la connexion d'un nouvel utilisateur.
* Il va prévenir les utilisateurs du réseau de son arrivée.
- *
+ *
*/
public void connexion() throws IOException {
- // @ de broadcast du réseau de l'utilisateur me
- InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
+ // @ de broadcast du réseau de l'utilisateur me
+ InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
- for(Integer p : ListPort ) {
- if(!(p.equals(this.getMe().getPort())))
- {
- UDPEchange.connexion(broadcastAdress,broadcastMessage, p);
- }
+ /*for(Integer p : ListPort ) {
+ if(!(p.equals(this.getMe().getPort())))
+ {
+ UDPEchange.connexion(broadcastAdress,broadcastMessage, p);
}
+ }*/
+ UDPEchange.connexion(broadcastAdress,broadcastMessage, 1024);
}
-
+
/**
- * Methode appelée lors de la déconnexion de l'utilisateur.
+ * Methode appelée lors de la déconnexion de l'utilisateur.
* Il va prévenir les utilisateurs du réseau de son départ.
- *
+ *
*/
public void deconnexion() throws IOException {
- // @ de broadcast du réseau de l'utilisateur me
- InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
+ // @ de broadcast du réseau de l'utilisateur me
+ InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ;
- for(Integer p : ListPort ) {
- if( !(p.equals(this.getMe().getPort())))
- {
- UDPEchange.connexion(broadcastAdress,broadcastMessage, p);
- }
+ /*for(Integer p : ListPort ) {
+ if(!(p.equals(this.getMe().getPort())))
+ {
+ UDPEchange.connexion(broadcastAdress,broadcastMessage, p);
}
+ }*/
+ UDPEchange.connexion(broadcastAdress,broadcastMessage, 1024);
}
-
+
public static void main (String[] args) throws IOException {
//Integer p = 2345 ;
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
@@ -123,14 +132,21 @@ public class ChatApp {
ListPort.add(1234);
ListPort.add(3000);
ListPort.add(4000);
+ InetAddress localHost = InetAddress.getLocalHost();
+ System.out.println("Mon adresse:" + localHost.toString());
+ /*for(InetAddress broadcastAddr : UDPEchange.listAllBroadcastAddresses()) {
+ System.out.println("Broadcast sent with address " + broadcastAddr.toString());
+ }*/
+ //InetAddress broadcastAddress = InterfaceAddress.getBroadcast();
+ //System.out.println("Mon adresse:" + localHost.toString());
ExecutorService exec = Executors.newFixedThreadPool(1000);
- exec.submit(new Runner(app));
+ exec.submit(new Runner(app));
try {
app.connexion();
} catch (IOException e) {
e.printStackTrace();
}
-
+
if (app.getMe().getPort() == 4000) {
try {
Thread.sleep(2000);
@@ -163,7 +179,7 @@ public class ChatApp {
public Map getMapHistorique() {
return mapHistorique;
}
-
+
public Historique getHist(String pseudo) {
Historique h = this.mapHistorique.get(pseudo);
if( h != null) {
@@ -174,19 +190,21 @@ public class ChatApp {
return h ;
}
}
-
-
+
+
+
+
}
+
class Runner implements Runnable {
- ChatApp app ;
+ ChatApp app ;
public Runner(ChatApp app) {
this.app = app ;
}
@Override
public void run() {
-
+
UDPEchange.ecouteUDP(app);
-
+
}
}
-
diff --git a/Implementation/src/MessageHorodate.java b/Implementation/src/MessageHorodate.java
index e98a299..6a07bae 100644
--- a/Implementation/src/MessageHorodate.java
+++ b/Implementation/src/MessageHorodate.java
@@ -1,5 +1,3 @@
-import java.net.InetAddress;
-import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -36,6 +34,7 @@ public class MessageHorodate {
* @return Les differents attributs de la classe sous forme de string
*
*/
+ @Override
public String toString() {
String Msg = "";
Msg += ("Destinataire: " + this.destinataire + "\n") ;
diff --git a/Implementation/src/RunnerUDP.class b/Implementation/src/RunnerUDP.class
index 6429c55..f96af0f 100644
Binary files a/Implementation/src/RunnerUDP.class and b/Implementation/src/RunnerUDP.class differ
diff --git a/Implementation/src/TCPEchange.java b/Implementation/src/TCPEchange.java
index 978c739..804b867 100644
--- a/Implementation/src/TCPEchange.java
+++ b/Implementation/src/TCPEchange.java
@@ -1,5 +1,4 @@
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
diff --git a/Implementation/src/UDPEchange.class b/Implementation/src/UDPEchange.class
index 64e2d0b..a1eed64 100644
Binary files a/Implementation/src/UDPEchange.class and b/Implementation/src/UDPEchange.class differ
diff --git a/Implementation/src/UDPEchange.java b/Implementation/src/UDPEchange.java
index 14e5905..b3d01a1 100644
--- a/Implementation/src/UDPEchange.java
+++ b/Implementation/src/UDPEchange.java
@@ -2,7 +2,12 @@ import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
+import java.net.NetworkInterface;
import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
@@ -26,12 +31,24 @@ public class UDPEchange {
*/
public static void connexion( InetAddress broadcastAdress , String broadcastMessage , Integer port) throws IOException {
// Envoie en broadcast à tous les utilsateurs
- DatagramSocket socket = new DatagramSocket();
- socket.setBroadcast(true);
- byte[]buffer = broadcastMessage.getBytes();
- DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port );
- socket.send(packet);
- socket.close();
+ for (InetAddress broadcastAddr : listAllBroadcastAddresses()) {
+ DatagramSocket socket = new DatagramSocket();
+ socket.setBroadcast(true);
+ byte[]buffer = broadcastMessage.getBytes();
+ DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAddr, port );
+ socket.send(packet);
+ socket.close();
+ System.out.println("Broadcast sent with address " + broadcastAddr.toString());
+ }
+ /*
+ DatagramSocket socket = new DatagramSocket();
+ socket.setBroadcast(true);
+ byte[]buffer = broadcastMessage.getBytes();
+ DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAdress, port );
+ socket.send(packet);
+ socket.close();
+ */
+
System.out.println("***********Message envoye***********");
System.out.println("Dest Ip: " + broadcastAdress.toString());
System.out.println("Dest port: " + port.toString());
@@ -89,8 +106,31 @@ public class UDPEchange {
System.out.println(broadcastMessage);
System.out.println("************************************");
}
+
+
+ static List listAllBroadcastAddresses() throws SocketException {
+ List broadcastList = new ArrayList<>();
+ Enumeration interfaces
+ = NetworkInterface.getNetworkInterfaces();
+ while (interfaces.hasMoreElements()) {
+ NetworkInterface networkInterface = interfaces.nextElement();
+
+ if (networkInterface.isLoopback() || !networkInterface.isUp()) {
+ continue;
+ }
+
+ networkInterface.getInterfaceAddresses().stream()
+ .map(a -> a.getBroadcast())
+ .filter(Objects::nonNull)
+ .forEach(broadcastList::add);
+ }
+ return broadcastList;
+ }
+
}
+
+
/**
*
* Classe implémentant l'interface Runnable.
@@ -241,4 +281,8 @@ class RunnerUDP implements Runnable {
( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1]));
}
}
+
+
+
+
}
diff --git a/Implementation/src/Utilisateur.java b/Implementation/src/Utilisateur.java
index de29299..67620ea 100644
--- a/Implementation/src/Utilisateur.java
+++ b/Implementation/src/Utilisateur.java
@@ -32,6 +32,7 @@ public class Utilisateur extends Object {
return ip;
}
+ @Override
public String toString(){
String s = "";
s+="pseudo " + this.pseudo + " | ";
diff --git a/Implementation/src/View.java b/Implementation/src/View.java
new file mode 100644
index 0000000..5a0088a
--- /dev/null
+++ b/Implementation/src/View.java
@@ -0,0 +1,3 @@
+public class View{
+
+}