Suite echange TCP

This commit is contained in:
Auriane Lartigue 2020-12-02 12:07:56 +01:00
parent 1cea2246c3
commit 9b173cd22d
8 changed files with 89 additions and 8 deletions

Binary file not shown.

View file

@ -2,6 +2,7 @@ import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@ -17,7 +18,7 @@ public class ChatApp {
/* Liste des utilisateurs actifs */ /* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ; private ListUtilisateurs actifUsers ;
private static ArrayList<Integer> ListPort = new ArrayList<Integer>(); private static ArrayList<Integer> ListPort = new ArrayList<Integer>();
private Map<Historique,String> mapHistorique ; private Map<String,Historique> mapHistorique ;
@ -49,8 +50,13 @@ public class ChatApp {
//ip.getHostAddress(); //ip.getHostAddress();
this.me = new Utilisateur(pseudo,port,ip); this.me = new Utilisateur(pseudo,port,ip);
this.actifUsers.addList(getMe()); this.actifUsers.addList(getMe());
this.mapHistorique = new HashMap<String,Historique>() ;
} }
public void majHistorique(String pseudo,Historique h) {
getMapHistorique().put(h.getUser2().getPseudo(),h);
}
/** /**
@ -112,6 +118,8 @@ public class ChatApp {
public static void main (String[] args) throws IOException { public static void main (String[] args) throws IOException {
//Integer p = 2345 ; //Integer p = 2345 ;
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ; ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
InetAddress localHost = InetAddress.getLocalHost() ;
System.out.println("Mon adress: "+ localHost.toString());
ListPort.add(1234); ListPort.add(1234);
ListPort.add(3000); ListPort.add(3000);
ListPort.add(4000); ListPort.add(4000);
@ -151,6 +159,22 @@ public class ChatApp {
public ListUtilisateurs getActifUsers() { public ListUtilisateurs getActifUsers() {
return actifUsers; return actifUsers;
} }
public Map<String,Historique> getMapHistorique() {
return mapHistorique;
}
public Historique getHist(String pseudo) {
Historique h = this.mapHistorique.get(pseudo);
if( h != null) {
return h ;
}
else {
h = new Historique(this.me, this.getActifUsers().getPseudoList(pseudo));
return h ;
}
}
} }
class Runner implements Runnable { class Runner implements Runnable {

Binary file not shown.

View file

@ -1,17 +1,47 @@
import java.util.ArrayList; import java.util.ArrayList;
/**
* <p>
* Classe permettant de sauvegarder les échanges entre deux utilisateurs
* </p>
*/
public class Historique { public class Historique {
private Utilisateur User1; private Utilisateur User1;
private Utilisateur User2; private Utilisateur User2;
// Liste conservant les differents échanges
private ArrayList<MessageHorodate> HistoriqueHorodate ; private ArrayList<MessageHorodate> HistoriqueHorodate ;
/**
* <p>
* Constructeur : un historique sauvegarde les echanges entre
* User1 et User2
* @param User1 - un utilisateur
* @param User2 - un second utilisateur
* </p>
*/
public Historique(Utilisateur User1, Utilisateur User2) { public Historique(Utilisateur User1, Utilisateur User2) {
this.User1 = User1; this.User1 = User1;
this.User2 = User2; this.User2 = User2;
this.HistoriqueHorodate = new ArrayList<MessageHorodate>(); this.HistoriqueHorodate = new ArrayList<MessageHorodate>();
} }
/**
* <p>
* On ajoute un message échangé dans la liste 'HistoriqueHorodate'
*
* @param mh - le message horodate échangé
* </p>
*/
public void addMessage(MessageHorodate mh) { public void addMessage(MessageHorodate mh) {
this.HistoriqueHorodate.add(mh); this.HistoriqueHorodate.add(mh);
} }
/**
* <p>
* getter pour recuperer le second utilisateur
* </p>
*/
public Utilisateur getUser2() {
return User2;
}
} }

Binary file not shown.

View file

@ -56,9 +56,16 @@ public class MessageHorodate {
return format.format(this.dateHorodatage); return format.format(this.dateHorodatage);
} }
public static MessageHorodate stringToMessageHorodate(String s) {
/**
* <p>
* Permet de re creer un message horodate a partir d'un string
* @return un messageHorodate
* </p>
*/
/* public static MessageHorodate stringToMessageHorodate(String s) {
MessageHorodate mh ; MessageHorodate mh ;
return mh ; return mh ;
} }*/
} }

Binary file not shown.

View file

@ -4,10 +4,21 @@ import java.io.PrintStream;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
/**
* <p>
* Classe representant les échanges TCP entre utilisateurs.
* </p>
*/
public class TCPEchange { public class TCPEchange {
public static void envoiTCP(Utilisateur User1,Utilisateur User2, String Msg ) { public static void envoiTCP(ChatApp app,Utilisateur User2, String Msg ) {
MessageHorodate mh = new MessageHorodate(User1, User2, Msg); // On cree un messagehorodate
MessageHorodate mh = new MessageHorodate(app.getMe(), User2, Msg);
// on ajoute le msg à son historique
Historique h = app.getHist(User2.getPseudo());
// on update la liste des historiques de app
app.majHistorique(User2.getPseudo(), h);
try { try {
Socket s = new Socket(User2.getIp(), User2.getPort()); Socket s = new Socket(User2.getIp(), User2.getPort());
PrintStream output = new PrintStream(s.getOutputStream()); PrintStream output = new PrintStream(s.getOutputStream());
@ -19,13 +30,13 @@ public class TCPEchange {
} }
} }
public static void ecouteTCP() { public static void ecouteTCP(ChatApp app) {
try { try {
ServerSocket ss = new ServerSocket(1234); ServerSocket ss = new ServerSocket(1234);
while(true) { while(true) {
System.out.println("Attente Session de clavardage"); System.out.println("Attente Session de clavardage");
Socket link = ss.accept(); Socket link = ss.accept();
new Thread(new RunnerTCP(link)).start(); new Thread(new RunnerTCP(link,app)).start();
} }
} }
catch (Exception e) { catch (Exception e) {
@ -36,9 +47,11 @@ public class TCPEchange {
class RunnerTCP implements Runnable { class RunnerTCP implements Runnable {
final Socket link; final Socket link;
private ChatApp app ;
public RunnerTCP(Socket link) { public RunnerTCP(Socket link,ChatApp app ) {
this.link = link; this.link = link;
this.app = app;
} }
@Override @Override
@ -50,6 +63,13 @@ class RunnerTCP implements Runnable {
while ((rcv = is.read()) != -1) { while ((rcv = is.read()) != -1) {
System.out.println("Received: "+ rcv); System.out.println("Received: "+ rcv);
} }
// On recree un messagehorodate à partir du message reçu
// on ajoute le msg à son historique
// on update la liste des historiques de app
System.out.println("Finishing thread"); System.out.println("Finishing thread");
is.close(); is.close();
link.close(); link.close();