Gros avancement au niveau de la gestion de la ListeUtilisateur

This commit is contained in:
basti 2020-11-27 18:24:28 +01:00
parent 53e7aae64d
commit a7bb562f3d
15 changed files with 447 additions and 69 deletions

View file

@ -0,0 +1,9 @@
package liste;
public class ConstanteListeUtilisateur {
static public String IP_BROADCAST = "255.255.255.255";
static public int SIZE_ORDRE = 100;
static public int NUM_PORT_SERVER = 2000;
}

View file

@ -1,12 +1,13 @@
package nom;
package liste;
import java.util.ArrayList;
import java.util.List;
public class GestionnaireListeUtilisateur {
//contient la liste Utilisateur à jour
public List<TypeListeUtilisateur> listeUtilisateur = new ArrayList<TypeListeUtilisateur>();
public static ArrayList<TypeListeUtilisateur> listeUtilisateur = new ArrayList<TypeListeUtilisateur>();
//Instance du gestionnaire de liste
static private GestionnaireListeUtilisateur uniqueInstance = null;
@ -23,44 +24,26 @@ public class GestionnaireListeUtilisateur {
}
//crée la liste utilisateur initial ?
private GestionnaireListeUtilisateur() {
//récupérer la liste lors de la conenxion //TODO
public void recuperationListeInitiale() {
//ici ?
}
//ecoute le port de broadcast pour recevoir le message personnalisé
public String ecoute() {
int portEcoute = 2000;
UdpUnicastServer server = new UdpUnicastServer(portEcoute);
return "";
public void ecoute() { //static ??
Thread ecouteThread = new Thread(new UdpUnicastServer(ConstanteListeUtilisateur.NUM_PORT_SERVER));
ecouteThread.start();
}
//envoie en Broadcast aux autres liste les infos sur cet utilisateur
public void envoie() {
public void envoie(String message) {
Thread envoieThread = new Thread(new UdpBroadcastClient(ConstanteListeUtilisateur.NUM_PORT_SERVER, message));
envoieThread.start();
}
//met à jour la Liste d'utilisateur
public void MAJListeUtilisateur() {
ajouteUtilisateur();
supprimeUtilisateur();
}
// detecte les nouveaux utilisateurs entrant et les ajoute à la liste
private void ajouteUtilisateur() {
}
// detecte les utilisateurs sortant et les supprime de la liste
private void supprimeUtilisateur() {
}
}

View file

@ -0,0 +1,30 @@
package liste;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
public class MainUDPBroad {
public static void main(String[] args) {
int portServer = ConstanteListeUtilisateur.NUM_PORT_SERVER;
UdpBroadcastServer server = new UdpBroadcastServer(portServer);
UdpBroadcastClient client = new UdpBroadcastClient(portServer, "add$$$" + 77 + "$$$Delta$$$LocalHost");
UdpBroadcastClient client1 = new UdpBroadcastClient(portServer, "add$$$" + 75 + "$$$Beta$$$LocalHost");
UdpBroadcastClient client2 = new UdpBroadcastClient(portServer, "add$$$" + 11 + "$$$Alpha$$$LocalHost");
Thread ts = new Thread(server);
Thread t0 = new Thread(client);
Thread t1 = new Thread(client1);
Thread t2 = new Thread(client2);
ts.start();
t0.start();
t1.start();
t2.start();
//ExecutorService executorService = Executors.newFixedThreadPool(2);
//executorService.submit(server);
//executorService.submit(client);
}
}

View file

@ -0,0 +1,26 @@
package liste;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
public class MainUDPMulti {
public static void main(String[] args) { //ne marche pas : soit route (routeur) soit code soit 2 ....
int portServer = 2000;
int multicastPort = 7000;
UdpMulticastServer server = new UdpMulticastServer(portServer, multicastPort);
UdpMulticastClient client = new UdpMulticastClient(portServer, multicastPort);
Thread ts = new Thread(server);
Thread t0 = new Thread(client);
ts.start();
t0.start();
//ExecutorService executorService = Executors.newFixedThreadPool(2);
//executorService.submit(server);
//executorService.submit(client);
}
}

View file

@ -0,0 +1,31 @@
package liste;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
public class MainUDPUni {
public static void main(String[] args) {
int portServer = 2000;
UdpUnicastServer server = new UdpUnicastServer(portServer);
UdpUnicastClient client = new UdpUnicastClient(portServer, "LocalHost");
UdpUnicastClient client1 = new UdpUnicastClient(portServer, "LocalHost");
UdpUnicastClient client2 = new UdpUnicastClient(portServer, "LocalHost");
Thread ts = new Thread(server);
Thread t0 = new Thread(client);
Thread t1 = new Thread(client1);
Thread t2 = new Thread(client2);
ts.start();
t0.start();
t1.start();
t2.start();
//ExecutorService executorService = Executors.newFixedThreadPool(2);
//executorService.submit(server);
//executorService.submit(client);
}
}

View file

@ -0,0 +1,93 @@
package liste;
import java.util.ArrayList;
import java.util.concurrent.Semaphore;
public class TraitementCmdListe implements Runnable{
String message;
Semaphore semaphore;
public TraitementCmdListe(String cmd, Semaphore semaphore) {
this.message = cmd;
this.semaphore = semaphore;
}
public void run() {
try {
String[] cmd = message.split("\\$\\$\\$", 0); //vérifier longueur 4 ?? //TODO
String ordre = cmd[0];
String id = cmd[1];
String nom = cmd[2];
String ip = cmd[3];
semaphore.acquireUninterruptibly();
System.out.println("bloqué");
if (ordre.equals("delete")) {
GestionnaireListeUtilisateur.listeUtilisateur = supprimeUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id);
}
if (ordre.equals("add")) {
GestionnaireListeUtilisateur.listeUtilisateur = ajouteUtilisateur(GestionnaireListeUtilisateur.listeUtilisateur, id, nom, ip);
}
System.out.println("libéré");
semaphore.release();
//Thread.sleep(1000);
//System.out.println("fini " + id);
System.out.println(GestionnaireListeUtilisateur.listeUtilisateur.get(0).nom);
} catch (Exception e) {}
}
// detecte les nouveaux utilisateurs entrant et les ajoute à la liste
private ArrayList<TypeListeUtilisateur> ajouteUtilisateur(ArrayList<TypeListeUtilisateur> listeUtilisateur, String id, String nom, String ip) {
boolean inListe = false;
//si il est dans la liste on le renomme
for (int i=0; i<listeUtilisateur.size(); i++) {
if (listeUtilisateur.get(i).id.equals(id)) {
inListe = true;
TypeListeUtilisateur utilisateur = listeUtilisateur.get(i);
utilisateur.nom = nom;
listeUtilisateur.set(i, utilisateur);
}
}
//s'il n'est pas dans la liste on la rajoute
if (!inListe) {
listeUtilisateur.add(new TypeListeUtilisateur(id, nom, ip));
}
return listeUtilisateur;
}
// detecte les utilisateurs sortant et les supprime de la liste
private ArrayList<TypeListeUtilisateur> supprimeUtilisateur(ArrayList<TypeListeUtilisateur> listeUtilisateur, String id) {
for (int i=0; i<listeUtilisateur.size(); i++) {
if (listeUtilisateur.get(i).id.equals(id)) {
listeUtilisateur.remove(i);
}
}
return listeUtilisateur;
}
}

View file

@ -0,0 +1,15 @@
package liste;
public class TypeListeUtilisateur {
public String nom;
public String id;
public String ip;
public TypeListeUtilisateur(String id, String nom, String ip) {
this.id = id;
this.nom = nom;
this.ip = ip;
}
}

View file

@ -0,0 +1,47 @@
package liste;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.UnknownHostException;
public class UdpBroadcastClient implements Runnable{
private final int serverPort;
private final String message; //ordre$$$id$$$nom$$$ip
public UdpBroadcastClient(int serverPort, String message) {
this.serverPort = serverPort;
this.message = message;
}
public void run() {
try(DatagramSocket serverSocket = new DatagramSocket()){
serverSocket.setBroadcast(true);
DatagramPacket datagramPacket = new DatagramPacket(
message.getBytes(),
message.length(),
InetAddress.getByName(ConstanteListeUtilisateur.IP_BROADCAST),
serverPort
);
serverSocket.send(datagramPacket);
serverSocket.close(); //fermer en cas de coupure abrupte ?? //TODO
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View file

@ -0,0 +1,48 @@
package liste;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.concurrent.Semaphore;
public class UdpBroadcastServer implements Runnable{
private final int serverPort;
public UdpBroadcastServer(int serverPort) {
this.serverPort = serverPort;
}
public void run() {
try(DatagramSocket serverSocket = new DatagramSocket(serverPort)){ //fermeture ne cas de coupure abrupte ?? //TODO
Semaphore semaphore = new Semaphore(1, true);
byte[] buffer = new byte[ConstanteListeUtilisateur.SIZE_ORDRE];
//serverSocket.setSoTimeout(3000);
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
serverSocket.receive(datagramPacket);
String receivedMessage = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println(receivedMessage);
Thread t = new Thread( new TraitementCmdListe(receivedMessage, semaphore) );
t.start();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("Timedout. CLient is closing.");
}
}
}

View file

@ -0,0 +1,52 @@
package liste;
import java.net.InetAddress;
import java.net.SocketException;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.UnknownHostException;
import java.net.MulticastSocket;
public class UdpMulticastClient implements Runnable{
private final int serverPort;
private final int multicastPort;
public UdpMulticastClient(int serverPort, int multicastPort) {
this.serverPort = serverPort;
this.multicastPort = multicastPort;
}
public void run() {
try{
Thread.sleep(1000);
InetAddress groupe = InetAddress.getByName("230.0.0.1");
MulticastSocket multicastSocket = new MulticastSocket(multicastPort); // port ?
String message = "add$$$" + 77 + "$$$Roger$$$LocalHost"; //ordre$$$id$$$nom$$$ip
DatagramPacket datagramPacket = new DatagramPacket(
message.getBytes(),
message.length(),
groupe,
serverPort
);
System.out.println("ici");
multicastSocket.send(datagramPacket);
System.out.println("ici");
multicastSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {}
}
}

View file

@ -0,0 +1,63 @@
package liste;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.concurrent.Semaphore;
import java.net.NetworkInterface;
import java.net.InetSocketAddress;
public class UdpMulticastServer implements Runnable{
private final int serverPort;
private final int multicastPort;
public UdpMulticastServer(int serverPort, int multicastPort) {
this.serverPort = serverPort;
this.multicastPort = multicastPort;
}
public void run() {
try(MulticastSocket multicastSocket = new MulticastSocket(serverPort)){
InetAddress multicastAddr = InetAddress.getByName("229.0.0.1");
InetSocketAddress groupe = new InetSocketAddress(multicastAddr, multicastPort);
NetworkInterface netIf = NetworkInterface.getByIndex(0);
multicastSocket.joinGroup(groupe, netIf);
Semaphore semaphore = new Semaphore(1, true);
byte[] buffer = new byte[65507];
//serverSocket.setSoTimeout(3000);
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
System.out.println("serverAttente");
multicastSocket.receive(datagramPacket);
System.out.println("serverReçu");
String receivedMessage = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println(receivedMessage);
Thread t = new Thread( new TraitementCmdListe(receivedMessage, semaphore) );
t.start();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
System.out.println("Timedout. CLient is closing.");
}
}
}

View file

@ -1,4 +1,4 @@
package nom;
package liste;
import java.net.DatagramSocket;
import java.net.InetAddress;
@ -9,12 +9,10 @@ import java.net.UnknownHostException;
public class UdpUnicastClient implements Runnable{
private final int clientPort;
private final int serverPort;
private final String serverIP;
public UdpUnicastClient(int clientPort, int serverPort, String serverIP) {
this.clientPort = clientPort;
public UdpUnicastClient(int serverPort, String serverIP) {
this.serverPort = serverPort;
this.serverIP = serverIP;
@ -22,9 +20,9 @@ public class UdpUnicastClient implements Runnable{
public void run() {
try(DatagramSocket serverSocket = new DatagramSocket(clientPort)){
for (int i = 0; i<3; i++) {
String message = "Message number " + i;
try(DatagramSocket serverSocket = new DatagramSocket()){
//for (int i = 0; i<3; i++) {
String message = "add$$$" + 77 + "$$$Roger$$$LocalHost"; //ordre$$$id$$$nom$$$ip
DatagramPacket datagramPacket = new DatagramPacket(
message.getBytes(),
message.length(),
@ -32,7 +30,7 @@ public class UdpUnicastClient implements Runnable{
serverPort
);
serverSocket.send(datagramPacket);
}
//}
} catch (SocketException e) {
e.printStackTrace();

View file

@ -1,9 +1,10 @@
package nom;
package liste;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.concurrent.Semaphore;
public class UdpUnicastServer implements Runnable{
@ -17,7 +18,10 @@ public class UdpUnicastServer implements Runnable{
public void run() {
try(DatagramSocket serverSocket = new DatagramSocket(serverPort)){
try(DatagramSocket serverSocket = new DatagramSocket(serverPort)){ //fermeture ne cas de coupure abrupte ?? //TODO
Semaphore semaphore = new Semaphore(1, true);
byte[] buffer = new byte[65507];
//serverSocket.setSoTimeout(3000);
while (true) {
@ -26,6 +30,11 @@ public class UdpUnicastServer implements Runnable{
String receivedMessage = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println(receivedMessage);
Thread t = new Thread( new TraitementCmdListe(receivedMessage, semaphore) );
t.start();
}
} catch (SocketException e) {
@ -35,4 +44,5 @@ public class UdpUnicastServer implements Runnable{
}
}
}

View file

@ -1,19 +0,0 @@
package nom;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MainUDP {
public static void main(String[] args) {
int portServer = 7001;
int portClient = 7000;
UdpUnicastServer server = new UdpUnicastServer(portServer);
UdpUnicastClient client = new UdpUnicastClient(portClient, portServer, "LocalHost");
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.submit(server);
executorService.submit(client);
}
}

View file

@ -1,8 +0,0 @@
package nom;
public class TypeListeUtilisateur {
public String nom;
public String id;
public String IP;
}