Présence et statut à distance semblent fonctionner

This commit is contained in:
Marino Benassai 2021-02-15 17:51:02 +01:00
parent ce21fc240b
commit 05138211a3
13 changed files with 176 additions and 129 deletions

View file

@ -13,55 +13,6 @@ import data.Message;
public class EnvoiMessageDistance { public class EnvoiMessageDistance {
public static void main(String[] args) throws IOException {
//Test 1
System.out.println("Test 1");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "initialize"));
System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello World !"));
System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello again !"));
System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessages"));
//Test 2 (Longue liste de messages en attente)
System.out.println("");
System.out.println("Test 2");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "initialize"));
for (int i = 0; i<100; i++) {
System.out.println(EnvoiMessageDistance.envoiMessage("message", "Personne " + i, "Destinataire", "Message numéro " + i));
}
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "getMessages"));
//Test 3 (Pas de messages en attente)
System.out.println("");
System.out.println("Test 3");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "initialize"));
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "getMessages"));
//Test4 commande invalide
System.out.println("");
System.out.println("Test 4");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessage"));
//Test5 type invalide
System.out.println("");
System.out.println("Test 5");
System.out.println(EnvoiMessageDistance.envoiMessage("autre", "User1", "User2", "Le type de ce message est invalide"));
/*
Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for (int c; (c = in.read()) >= 0;)
System.out.print((char)c);
*/
}
public static ServletResponse envoiMessage(String Type, String Sender, String Recipient, String Body) throws IOException { public static ServletResponse envoiMessage(String Type, String Sender, String Recipient, String Body) throws IOException {
//Préparation du message //Préparation du message
@ -113,6 +64,55 @@ public class EnvoiMessageDistance {
} }
public static void main(String[] args) throws IOException {
//Test 1
System.out.println("Test 1");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "initialize"));
System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello World !"));
System.out.println(EnvoiMessageDistance.envoiMessage("message", "Me", "World", "Hello again !"));
System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessages"));
//Test 2 (Longue liste de messages en attente)
System.out.println("");
System.out.println("Test 2");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "initialize"));
for (int i = 0; i<100; i++) {
System.out.println(EnvoiMessageDistance.envoiMessage("message", "Personne " + i, "Destinataire", "Message numéro " + i));
}
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Destinataire", "", "getMessages"));
//Test 3 (Pas de messages en attente)
System.out.println("");
System.out.println("Test 3");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "initialize"));
System.out.println(EnvoiMessageDistance.envoiMessage("command", "Me", "", "getMessages"));
//Test4 commande invalide
System.out.println("");
System.out.println("Test 4");
System.out.println(EnvoiMessageDistance.envoiMessage("command", "World", "", "getMessage"));
//Test5 type invalide
System.out.println("");
System.out.println("Test 5");
System.out.println(EnvoiMessageDistance.envoiMessage("autre", "User1", "User2", "Le type de ce message est invalide"));
/*
Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
for (int c; (c = in.read()) >= 0;)
System.out.print((char)c);
*/
}

View file

@ -1,8 +1,11 @@
package clavardage; package clavardage;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.Semaphore;
import data.Message; import data.Message;
import data.ServletResponse; import data.ServletResponse;
import liste.TraitementCmdListe;
import nom.GestionnaireNom; import nom.GestionnaireNom;
public class GestionnaireMessagesDistants implements Runnable{ public class GestionnaireMessagesDistants implements Runnable{
@ -23,13 +26,6 @@ public class GestionnaireMessagesDistants implements Runnable{
} }
public void run() { public void run() {
//On indique au servlet que l'on est disponible pour recevoire des messages
try {
EnvoiMessageDistance.envoiMessage("command", GestionnaireNom.instance().getId(), "", "initialize");
} catch (IOException e) {
e.printStackTrace();
}
while (true) { while (true) {
@ -84,6 +80,13 @@ public class GestionnaireMessagesDistants implements Runnable{
} }
} }
else if (msg.getType().equals("listCommand")) {
System.out.print(msg);
Semaphore semaphore = new Semaphore(1, true);
Thread t = new Thread( new TraitementCmdListe(msg.getBody(), semaphore) );
t.start();
}
else { else {
//Type de message inconnu. On l'ignore. //Type de message inconnu. On l'ignore.
} }

View file

@ -54,17 +54,6 @@ public class GestionnaireSessionsDistantes {
return this.sessions; return this.sessions;
} }
public void fermerSessions() throws IOException {
for (SessionClavardageDistante s : this.sessions.values()) {
s.stop();
}
}
public void printSessions() {
for (SessionClavardageDistante s : this.sessions.values()) {
System.out.print(s);
}
}
} }

View file

@ -62,22 +62,11 @@ public class GestionnaireSessionsLocales implements Runnable{
return this.sessions; return this.sessions;
} }
public void fermerSessions() {
for (SessionClavardageLocale s : this.sessions.values()) {
s.stop();
}
}
public void printSessions() {
for (SessionClavardageLocale s : this.sessions.values()) {
System.out.print(s);
}
}
public void run() { public void run() {
GestionnaireNom gn = GestionnaireNom.instance(); GestionnaireNom gn = GestionnaireNom.instance();
while (true) { while (gn.getDansReseau()) {
Socket ssocket = this.requestServer.accept(); Socket ssocket = this.requestServer.accept();
System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n"); System.out.print("Données reçues sur le serveur de " + gn.getId() + "\n");

View file

@ -5,43 +5,48 @@ import java.io.IOException;
import liste.GestionnaireListeUtilisateur; import liste.GestionnaireListeUtilisateur;
import ui.Login_RegisterUI; import ui.Login_RegisterUI;
import servlet.Get; import servlet.Get;
import servlet.Notify;
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
// les méthode finnissant par 2 sont le double de celle sans 2, servant à tester en local // les méthode finnissant par 2 sont le double de celle sans 2, servant à tester en local
if (liste.Constante.debug) { if (liste.Constante.debug) {
//on lance le server d'écoute de cmd //on lance le server d'écoute de cmd
GestionnaireListeUtilisateur.instance().ecoute2(2002); //GestionnaireListeUtilisateur.instance().ecoute2(2001);
//on crée manuellement des utilisateurs //debug1 //on crée manuellement des utilisateurs //debug1
GestionnaireListeUtilisateur.instance().envoie2("add$$$77$$$Moidebug$$$LocalHost$$$true"); //GestionnaireListeUtilisateur.instance().envoie2("add$$$77$$$Moidebug$$$LocalHost$$$true");
//on met à jour notre liste //on met à jour notre liste
GestionnaireListeUtilisateur.instance().majListe2(); //GestionnaireListeUtilisateur.instance().majListe2();
//J'ai le déplacer après l'identification
} else { } else {
//on lance le server d'écoute de cmd //on lance le server d'écoute de cmd
GestionnaireListeUtilisateur.instance().ecoute(); GestionnaireListeUtilisateur.instance().ecoute();
//on crée manuellement des utilisateurs //on crée manuellement des utilisateurs
GestionnaireListeUtilisateur.instance().envoie("add$$$77$$$Moi$$$LocalHost$$$true"); //GestionnaireListeUtilisateur.instance().envoie("add$$$77$$$Moi$$$LocalHost$$$true");
//on met à jour notre liste //on met à jour notre liste
GestionnaireListeUtilisateur.instance().majListe(); //GestionnaireListeUtilisateur.instance().majListe();
//idem
} }
// on Subscribe à la servlet /*// on Subscribe à la servlet
try { try {
Get.sendGET(); Get.sendGET();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}; };*/
//on lance le UI //on lance le UI
Thread t = new Thread(new Login_RegisterUI()); Thread t = new Thread(new Login_RegisterUI());

View file

@ -1,7 +1,11 @@
package liste; package liste;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import nom.GestionnaireNom;
import servlet.Post;
//import nom.GestionnaireNom; //import nom.GestionnaireNom;
public class GestionnaireListeUtilisateur { public class GestionnaireListeUtilisateur {
@ -43,14 +47,32 @@ public class GestionnaireListeUtilisateur {
//Demande à tout le monde d'envoyer leur infos (TypeListeUtilisateur) --> Uniquement lors de la connexion //Demande à tout le monde d'envoyer leur infos (TypeListeUtilisateur) --> Uniquement lors de la connexion
public void majListe() { public void majListe() {
envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); if (GestionnaireNom.instance().getDansReseau()) {
envoie("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " ");
}
try {
Post.sendPOST("listRequest$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
}
catch (IOException e) {
//TODO aussi traiter l'erreur
}
} }
//debug local //debug local
public void majListe2() { public void majListe2() {
envoie2("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " "); if (GestionnaireNom.instance().getDansReseau()) {
envoie2("listRequest"+ "$$$" + " " + "$$$" + " " + "$$$" + " " + "$$$" + " ");
}
try {
Post.sendPOST("listRequest$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
}
catch (IOException e) {
//TODO aussi traiter l'erreur
}
} }
//ecoute le port de broadcast pour recevoir le message personnalisé //ecoute le port de broadcast pour recevoir le message personnalisé

View file

@ -30,7 +30,7 @@ public class UdpBroadcastServer implements Runnable{
serverSocket.receive(datagramPacket); serverSocket.receive(datagramPacket);
String receivedMessage = new String(datagramPacket.getData(), 0, datagramPacket.getLength()); String receivedMessage = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println(receivedMessage); //debug System.out.println("Broadcast from udp server: " + receivedMessage); //debug
Thread t = new Thread( new TraitementCmdListe(receivedMessage, semaphore) ); Thread t = new Thread( new TraitementCmdListe(receivedMessage, semaphore) );
t.start(); t.start();

View file

@ -1,9 +1,11 @@
package nom; package nom;
import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import liste.GestionnaireListeUtilisateur; import liste.GestionnaireListeUtilisateur;
import servlet.Post;
public class GestionnaireNom{ public class GestionnaireNom{
@ -98,7 +100,7 @@ public class GestionnaireNom{
} }
//set dansReseau //set statut
public void setStatut(String statut) { public void setStatut(String statut) {
this.statut = statut; this.statut = statut;
@ -158,30 +160,66 @@ public class GestionnaireNom{
// Associe un nom à l'utilisateur et prévient les autres. // Associe un nom à l'utilisateur et prévient les autres.
public void nommer(String nom) { public void nommer(String nom) {
setNom(nom); setNom(nom);
GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); if (GestionnaireNom.instance().getDansReseau()) {
GestionnaireListeUtilisateur.instance().envoie("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau());
}
try {
Post.sendPOST("name$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
} catch (IOException e) {
//TODO Rajouter un message d'erreur
}
} }
//debug //debug
public void nommer2(String nom) { public void nommer2(String nom) {
setNom(nom); setNom(nom);
if (GestionnaireNom.instance().getDansReseau()) {
GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); GestionnaireListeUtilisateur.instance().envoie2("add"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau());
}
try {
Post.sendPOST("name$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
} catch (IOException e) {
//TODO Rajouter un message d'erreur
}
} }
// Supprime l'utilisateur et prévient les autres. // Supprime l'utilisateur et prévient les autres.
public void supprimer() { public void supprimer() {
GestionnaireListeUtilisateur.instance().envoie("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); if (GestionnaireNom.instance().getDansReseau()) {
GestionnaireListeUtilisateur.instance().envoie("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau());
}
try {
Post.sendPOST("delete$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
}
catch (IOException e) {
//TODO La aussi traiter l'erreur
}
} }
//debug //debug
public void supprimer2() { public void supprimer2() {
GestionnaireListeUtilisateur.instance().envoie2("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau()); if (GestionnaireNom.instance().getDansReseau()) {
GestionnaireListeUtilisateur.instance().envoie2("delete"+ "$$$" + getId() + "$$$" + getNom() + "$$$" + getIp() + "$$$" + getDansReseau());
}
try {
Post.sendPOST("delete$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
}
catch (IOException e) {
//TODO La aussi traiter l'erreur
}
} }

View file

@ -0,0 +1,18 @@
package servlet;
import java.io.IOException;
import clavardage.EnvoiMessageDistance;
import nom.GestionnaireNom;
public class Notify {
public static void notifier () {
//On indique au servlet que l'on est disponible pour recevoire des messages
try {
EnvoiMessageDistance.envoiMessage("command", GestionnaireNom.instance().getId(), "", "initialize");
} catch (IOException e) {
e.printStackTrace();
}
}
}

View file

@ -26,6 +26,7 @@ public class TCPServer {
this.socket = null; this.socket = null;
} }
catch (IOException e) { catch (IOException e) {
e.printStackTrace();
System.out.print("Could not create socket"); System.out.print("Could not create socket");
this.socket = null; this.socket = null;
} }

View file

@ -213,15 +213,6 @@ public class ListUI extends JFrame implements Runnable{
GestionnaireNom.instance().supprimer(); GestionnaireNom.instance().supprimer();
} }
// on envoie l'info au servlet
try {
Post.sendPOST("delete$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
} catch (IOException e) {
e.printStackTrace();
}
} }
}); });
} }

View file

@ -30,7 +30,10 @@ import bdd.Liaison;
import clavardage.GestionnaireMessagesDistants; import clavardage.GestionnaireMessagesDistants;
import clavardage.GestionnaireSessionsDistantes; import clavardage.GestionnaireSessionsDistantes;
import clavardage.GestionnaireSessionsLocales; import clavardage.GestionnaireSessionsLocales;
import liste.GestionnaireListeUtilisateur;
import nom.GestionnaireNom; import nom.GestionnaireNom;
import servlet.Notify;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
@ -231,8 +234,9 @@ public class Login_RegisterUI extends JFrame implements Runnable{
//debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main)) //debug --> utiliser pwd : admin et n'importe quel ID pour créer différents user (attention chaque user doit avoir un server (main))
if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après ) if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après )
GestionnaireNom.instance().setId(id); GestionnaireSessionsLocales.instance();
GestionnaireSessionsLocales.instance(); //Init(GestionnaireSessionsLocales) GestionnaireSessionsDistantes.instance();
GestionnaireMessagesDistants.instance();
dispose(); dispose();
@ -254,6 +258,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
} }
private void enter() { private void enter() {
String id = idField.getText(); String id = idField.getText();
String pwd = String.valueOf(passwordField.getPassword()); String pwd = String.valueOf(passwordField.getPassword());
@ -266,7 +271,6 @@ public class Login_RegisterUI extends JFrame implements Runnable{
Connection con = Liaison.getConnection(); Connection con = Liaison.getConnection();
st = con.prepareStatement(query); st = con.prepareStatement(query);
//System.out.println("la");
st.setString(1, id); st.setString(1, id);
st.setString(2, pwd); st.setString(2, pwd);
@ -276,10 +280,13 @@ public class Login_RegisterUI extends JFrame implements Runnable{
System.out.println("BDD SUCCESS"); System.out.println("BDD SUCCESS");
GestionnaireNom.instance().setId(id); GestionnaireNom.instance().setId(id);
Notify.notifier();
//Instantiation des gestionnaires //Instantiation des gestionnaires
GestionnaireSessionsLocales.instance(); GestionnaireSessionsLocales.instance();
GestionnaireSessionsDistantes.instance(); GestionnaireSessionsDistantes.instance();
GestionnaireMessagesDistants.instance(); GestionnaireMessagesDistants.instance();
GestionnaireListeUtilisateur.instance().majListe();
dispose(); dispose();

View file

@ -134,29 +134,13 @@ public class NomUI extends JFrame implements Runnable{
//Celui-ci ne peut pas être "vide" + protection cmd //Celui-ci ne peut pas être "vide" + protection cmd
if (!nom.isBlank() && !nom.contains("$$$")) { if (!nom.isBlank() && !nom.contains("$$$")) {
boolean nouvelUtilisateur = (GestionnaireNom.instance().getNom() == null);
if (liste.Constante.debug) { if (liste.Constante.debug) {
GestionnaireNom.instance().nommer2(nom); GestionnaireNom.instance().nommer2(nom);
} else { } else {
GestionnaireNom.instance().nommer(nom); GestionnaireNom.instance().nommer(nom);
} }
// on envoie l'info à la servlet
try {
if (nouvelUtilisateur) {
Post.sendPOST("new$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() ); // online par defaut ?
} else {
Post.sendPOST("name$$$" + GestionnaireNom.instance().getId() + "$$$" + GestionnaireNom.instance().getNom()+ "$$$"
+ GestionnaireNom.instance().getIp() + "$$$" + GestionnaireNom.instance().getDansReseau() + "$$$"
+ GestionnaireNom.instance().getStatut() );
}
} catch (IOException e) {
e.printStackTrace();
}
dispose(); dispose();
Thread t = new Thread(new ListUI()); Thread t = new Thread(new ListUI());