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 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 {
//Préparation du message
@ -114,6 +65,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;
import java.io.IOException;
import java.util.concurrent.Semaphore;
import data.Message;
import data.ServletResponse;
import liste.TraitementCmdListe;
import nom.GestionnaireNom;
public class GestionnaireMessagesDistants implements Runnable{
@ -24,13 +27,6 @@ public class GestionnaireMessagesDistants implements Runnable{
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) {
//On attend 1 seconde
@ -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 {
//Type de message inconnu. On l'ignore.
}

View file

@ -54,17 +54,6 @@ public class GestionnaireSessionsDistantes {
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;
}
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() {
GestionnaireNom gn = GestionnaireNom.instance();
while (true) {
while (gn.getDansReseau()) {
Socket ssocket = this.requestServer.accept();
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 ui.Login_RegisterUI;
import servlet.Get;
import servlet.Notify;
public class Main {
public static void main(String[] args) {
// les méthode finnissant par 2 sont le double de celle sans 2, servant à tester en local
if (liste.Constante.debug) {
//on lance le server d'écoute de cmd
GestionnaireListeUtilisateur.instance().ecoute2(2002);
//GestionnaireListeUtilisateur.instance().ecoute2(2001);
//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
GestionnaireListeUtilisateur.instance().majListe2();
//GestionnaireListeUtilisateur.instance().majListe2();
//J'ai le déplacer après l'identification
} else {
//on lance le server d'écoute de cmd
GestionnaireListeUtilisateur.instance().ecoute();
//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
GestionnaireListeUtilisateur.instance().majListe();
//GestionnaireListeUtilisateur.instance().majListe();
//idem
}
// on Subscribe à la servlet
/*// on Subscribe à la servlet
try {
Get.sendGET();
} catch (IOException e) {
e.printStackTrace();
};
};*/
//on lance le UI
Thread t = new Thread(new Login_RegisterUI());

View file

@ -1,7 +1,11 @@
package liste;
import java.io.IOException;
import java.util.ArrayList;
import nom.GestionnaireNom;
import servlet.Post;
//import nom.GestionnaireNom;
public class GestionnaireListeUtilisateur {
@ -43,14 +47,32 @@ public class GestionnaireListeUtilisateur {
//Demande à tout le monde d'envoyer leur infos (TypeListeUtilisateur) --> Uniquement lors de la connexion
public void majListe() {
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
public void majListe2() {
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é

View file

@ -30,7 +30,7 @@ public class UdpBroadcastServer implements Runnable{
serverSocket.receive(datagramPacket);
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) );
t.start();

View file

@ -1,9 +1,11 @@
package nom;
import java.io.IOException;
import java.net.InetAddress;
import liste.GestionnaireListeUtilisateur;
import servlet.Post;
public class GestionnaireNom{
@ -98,7 +100,7 @@ public class GestionnaireNom{
}
//set dansReseau
//set statut
public void setStatut(String statut) {
this.statut = statut;
@ -158,30 +160,66 @@ public class GestionnaireNom{
// Associe un nom à l'utilisateur et prévient les autres.
public void nommer(String nom) {
setNom(nom);
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
public void nommer2(String nom) {
setNom(nom);
if (GestionnaireNom.instance().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.
public void supprimer() {
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
public void supprimer2() {
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;
}
catch (IOException e) {
e.printStackTrace();
System.out.print("Could not create socket");
this.socket = null;
}

View file

@ -213,15 +213,6 @@ public class ListUI extends JFrame implements Runnable{
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.GestionnaireSessionsDistantes;
import clavardage.GestionnaireSessionsLocales;
import liste.GestionnaireListeUtilisateur;
import nom.GestionnaireNom;
import servlet.Notify;
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))
if( pwd.equals("admin") || id.equals("0") ) { //remplaver || par && -> facilite debug //TODO ( à remplacer par BDD après )
GestionnaireNom.instance().setId(id);
GestionnaireSessionsLocales.instance(); //Init(GestionnaireSessionsLocales)
GestionnaireSessionsLocales.instance();
GestionnaireSessionsDistantes.instance();
GestionnaireMessagesDistants.instance();
dispose();
@ -254,6 +258,7 @@ public class Login_RegisterUI extends JFrame implements Runnable{
}
private void enter() {
String id = idField.getText();
String pwd = String.valueOf(passwordField.getPassword());
@ -266,7 +271,6 @@ public class Login_RegisterUI extends JFrame implements Runnable{
Connection con = Liaison.getConnection();
st = con.prepareStatement(query);
//System.out.println("la");
st.setString(1, id);
st.setString(2, pwd);
@ -276,10 +280,13 @@ public class Login_RegisterUI extends JFrame implements Runnable{
System.out.println("BDD SUCCESS");
GestionnaireNom.instance().setId(id);
Notify.notifier();
//Instantiation des gestionnaires
GestionnaireSessionsLocales.instance();
GestionnaireSessionsDistantes.instance();
GestionnaireMessagesDistants.instance();
GestionnaireListeUtilisateur.instance().majListe();
dispose();

View file

@ -134,29 +134,13 @@ public class NomUI extends JFrame implements Runnable{
//Celui-ci ne peut pas être "vide" + protection cmd
if (!nom.isBlank() && !nom.contains("$$$")) {
boolean nouvelUtilisateur = (GestionnaireNom.instance().getNom() == null);
if (liste.Constante.debug) {
GestionnaireNom.instance().nommer2(nom);
} else {
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();
Thread t = new Thread(new ListUI());