Gros avancement au niveau de la gestion de la ListeUtilisateur
This commit is contained in:
parent
53e7aae64d
commit
a7bb562f3d
15 changed files with 447 additions and 69 deletions
9
Projet_POO/src/liste/ConstanteListeUtilisateur.java
Normal file
9
Projet_POO/src/liste/ConstanteListeUtilisateur.java
Normal 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;
|
||||
|
||||
}
|
|
@ -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() {
|
||||
|
||||
}
|
||||
}
|
30
Projet_POO/src/liste/MainUDPBroad.java
Normal file
30
Projet_POO/src/liste/MainUDPBroad.java
Normal 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);
|
||||
}
|
||||
}
|
26
Projet_POO/src/liste/MainUDPMulti.java
Normal file
26
Projet_POO/src/liste/MainUDPMulti.java
Normal 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);
|
||||
}
|
||||
}
|
31
Projet_POO/src/liste/MainUDPUni.java
Normal file
31
Projet_POO/src/liste/MainUDPUni.java
Normal 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);
|
||||
}
|
||||
}
|
93
Projet_POO/src/liste/TraitementCmdListe.java
Normal file
93
Projet_POO/src/liste/TraitementCmdListe.java
Normal 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;
|
||||
|
||||
}
|
||||
}
|
15
Projet_POO/src/liste/TypeListeUtilisateur.java
Normal file
15
Projet_POO/src/liste/TypeListeUtilisateur.java
Normal 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;
|
||||
|
||||
}
|
||||
}
|
47
Projet_POO/src/liste/UdpBroadcastClient.java
Normal file
47
Projet_POO/src/liste/UdpBroadcastClient.java
Normal 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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
48
Projet_POO/src/liste/UdpBroadcastServer.java
Normal file
48
Projet_POO/src/liste/UdpBroadcastServer.java
Normal 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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
52
Projet_POO/src/liste/UdpMulticastClient.java
Normal file
52
Projet_POO/src/liste/UdpMulticastClient.java
Normal 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) {}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
63
Projet_POO/src/liste/UdpMulticastServer.java
Normal file
63
Projet_POO/src/liste/UdpMulticastServer.java
Normal 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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package nom;
|
||||
package liste;
|
||||
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
|
@ -8,13 +8,11 @@ import java.net.DatagramPacket;
|
|||
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();
|
|
@ -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) {
|
||||
|
@ -34,5 +43,6 @@ public class UdpUnicastServer implements Runnable{
|
|||
System.out.println("Timedout. CLient is closing.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package nom;
|
||||
|
||||
public class TypeListeUtilisateur {
|
||||
|
||||
public String nom;
|
||||
public String id;
|
||||
public String IP;
|
||||
}
|
Loading…
Reference in a new issue