Présence et statut à distance semblent fonctionner
This commit is contained in:
parent
ce21fc240b
commit
05138211a3
13 changed files with 176 additions and 129 deletions
|
@ -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);
|
||||
*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 dû 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());
|
||||
|
|
|
@ -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 Là 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 Là aussi traiter l'erreur
|
||||
}
|
||||
}
|
||||
|
||||
//ecoute le port de broadcast pour recevoir le message personnalisé
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
18
Projet_POO/src/servlet/Notify.java
Normal file
18
Projet_POO/src/servlet/Notify.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in a new issue