Phase de debug sur la synchro de l'historique

这个提交包含在:
Nabzzz 2020-12-11 19:28:40 +01:00
父节点 af0f76c780
当前提交 9010fe3f23
共有 10 个文件被更改,包括 64 次插入14 次删除

二进制文件未显示。

查看文件

@ -27,6 +27,7 @@ public class ChatApp {
/* Map on l'on stocke localement les historiques des messages */ /* Map on l'on stocke localement les historiques des messages */
private Map<String,Historique> mapHistorique ; private Map<String,Historique> mapHistorique ;
private boolean historiqueAvailable = true;
/* ChatApp est associe a un utilisateur */ /* ChatApp est associe a un utilisateur */
private Utilisateur me; private Utilisateur me;
@ -53,11 +54,28 @@ public class ChatApp {
* @param pseudo Pseudo de l'utilisateur * @param pseudo Pseudo de l'utilisateur
* @param h nouvel Historique entre les deux utilisateurs * @param h nouvel Historique entre les deux utilisateurs
*/ */
public void majHistorique(String pseudo,Historique h) { public synchronized void majHistorique(Historique h) {
getMapHistorique().put(h.getUser2().getPseudo(),h); getMapHistorique().put(h.getUser2().getPseudo(),h);
} }
/*public void majHistorique2(MessageHorodate mh, String pseudo) {
Historique h = getMapHistorique().get(pseudo);
//h.addMessage(mh);
getMapHistorique().put(h.getUser2().getPseudo(),h);
}*/
public void majHistorique2(String mh, String pseudo) {
Historique h = getMapHistorique().get(pseudo);
MessageHorodate msghor = new MessageHorodate(this.getMe(),this.getMe(),"rien",1);
System.out.println(">>"+mh+"<<");
System.out.print(msghor.getDateHorodatage());
System.out.println(msghor.getDestinataire());
System.out.println(msghor.getSource());
System.out.println(msghor.getType());
h.addMessage(msghor);
getMapHistorique().put(h.getUser2().getPseudo(),h);
}
/** /**
* Modification du pseudo de l'utilisateur * Modification du pseudo de l'utilisateur
@ -160,7 +178,7 @@ public class ChatApp {
* @param pseudo Pseudo de l'utilisateur dont on souhaite obtenir l'historique * @param pseudo Pseudo de l'utilisateur dont on souhaite obtenir l'historique
* @return Un historique * @return Un historique
*/ */
public Historique getHist(String pseudo) { public synchronized Historique getHist(String pseudo) {
Historique h = this.mapHistorique.get(pseudo); Historique h = this.mapHistorique.get(pseudo);
if( h != null) { if( h != null) {
return h ; return h ;
@ -202,6 +220,14 @@ public class ChatApp {
} }
public boolean isHistoriqueAvailable() {
return historiqueAvailable;
}
public void setHistoriqueAvailable(boolean historiqueAvailable) {
this.historiqueAvailable = historiqueAvailable;
}
} }
class RunnerEcouteUDP implements Runnable { class RunnerEcouteUDP implements Runnable {

二进制文件未显示。

查看文件

@ -27,12 +27,12 @@ public class MessageHorodate {
this.setDestinataire(destinataire) ; this.setDestinataire(destinataire) ;
this.setSource(source) ; this.setSource(source) ;
this.setMessage(Message) ; this.setMessage(Message) ;
this.dateHorodatage = new Date(); this.setDateHorodatage(new Date());
this.type = type; this.type = type;
} }
public void setDate(Date d) { public void setDate(Date d) {
this.dateHorodatage=d; this.setDateHorodatage(d);
} }
/** /**
@ -60,7 +60,7 @@ public class MessageHorodate {
*/ */
public String dateToString() { public String dateToString() {
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return format.format(this.dateHorodatage); return format.format(this.getDateHorodatage());
} }
@ -78,11 +78,11 @@ public class MessageHorodate {
int type = Integer.parseInt(mots[2].split("::")[1]); int type = Integer.parseInt(mots[2].split("::")[1]);
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date(); Date date = new Date();
try { /*try {
date = format.parse(mots[3].split("::")[1]); date = format.parse(mots[3].split("::")[1]);
} catch (ParseException e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }*/
String payload = ""; String payload = "";
for(int i=4; i< mots.length; i++) { for(int i=4; i< mots.length; i++) {
if(mots[i].startsWith("Message::")) { if(mots[i].startsWith("Message::")) {
@ -92,7 +92,7 @@ public class MessageHorodate {
} }
MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type); MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
mh.setDate(date); //mh.setDate(date);
return mh ; return mh ;
} }
@ -129,4 +129,12 @@ public class MessageHorodate {
this.type = type; this.type = type;
} }
public Date getDateHorodatage() {
return dateHorodatage;
}
public void setDateHorodatage(Date dateHorodatage) {
this.dateHorodatage = dateHorodatage;
}
} }

二进制文件未显示。

二进制文件未显示。

二进制文件未显示。

二进制文件未显示。

二进制文件未显示。

查看文件

@ -49,7 +49,7 @@ public class TCPEchange {
Historique h = app.getHist(User2.getPseudo()); Historique h = app.getHist(User2.getPseudo());
h.addMessage(mh); h.addMessage(mh);
// on update la liste des historiques de app // on update la liste des historiques de app
app.majHistorique(User2.getPseudo(), h); app.majHistorique(h);
} }
try { try {
@ -131,11 +131,18 @@ class RunnerTCPEnvoi implements Runnable {
out.flush(); out.flush();
break; break;
} }
while(!app.isHistoriqueAvailable()) {
try{wait();
}catch(InterruptedException e) {}
}
app.setHistoriqueAvailable(false);
Historique h = app.getHist(Destinataire.getPseudo()); Historique h = app.getHist(Destinataire.getPseudo());
h.addMessage(mh); h.addMessage(mh);
// on update la liste des historiques de app // on update la liste des historiques de app
app.majHistorique(Destinataire.getPseudo(), h); app.majHistorique(h);
//app.majHistorique2(mh.toString(),Destinataire.getPseudo());
app.setHistoriqueAvailable(false);
notifyAll();
out.println(mh); out.println(mh);
System.out.println("Envoi d'un mesage"); System.out.println("Envoi d'un mesage");
out.flush(); out.flush();
@ -149,6 +156,7 @@ class RunnerTCPEnvoi implements Runnable {
// Gestion de l'exception de la fermeture de la socket // Gestion de l'exception de la fermeture de la socket
} }
} }
} }
// Reception // Reception
@ -193,10 +201,18 @@ class RunnerTCPEcoute implements Runnable {
MessageHorodate mh = MessageHorodate.stringToMessageHorodate(msg); MessageHorodate mh = MessageHorodate.stringToMessageHorodate(msg);
System.out.println("Type du message:"+mh.getType()); System.out.println("Type du message:"+mh.getType());
if(mh.getType()==1) { if(mh.getType()==1) {
while(!app.isHistoriqueAvailable()) {
try{wait();
}catch(InterruptedException e) {}
}
app.setHistoriqueAvailable(false);
System.out.println("Historique mis à jour lors de la reception"); System.out.println("Historique mis à jour lors de la reception");
Historique h = app.getHist(mh.getSource().getPseudo()); Historique h = app.getHist(mh.getSource().getPseudo());
h.addMessage(mh); h.addMessage(mh);
app.majHistorique(mh.getSource().getPseudo(), h); app.majHistorique(h);
app.setHistoriqueAvailable(true);
notifyAll();
//app.majHistorique2(mh,mh.getSource().getPseudo());
} }
else if(mh.getType()==0) { else if(mh.getType()==0) {
break; break;