FEAT: Interface

This commit is contained in:
Lucàs
2022-12-05 17:54:49 +01:00
parent 75e873d44f
commit eb9d8fe6e7
11 changed files with 560 additions and 81 deletions
+60 -21
View File
@@ -1,8 +1,11 @@
package client;
import ui.FenetreClient;
import ui.FenetreErreur;
import utils.RSA;
import utils.ResolutionDeNom;
import javax.swing.*;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
@@ -11,56 +14,90 @@ import java.net.ConnectException;
import java.net.Socket;
import java.security.KeyPair;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Scanner;
public class Client {
public class Client extends Thread{
private final String SERVER_IP;
private final int SERVER_PORT;
private final FenetreClient fenetre;
private String pseudo;
private final Scanner scanner;
private ObjectInputStream inputStream;
private ObjectOutputStream outputStream;
private KeyPair clientKeys;
private PublicKey serverKey;
private String pseudo;
private ObjectInputStream inputStream;
private ObjectOutputStream outputStream;
public Client(String ip, int port) {
private ArrayList<String> fileAttenteMessage;
public Client(String ip, int port, String pseudo) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
this.SERVER_PORT = port;
this.pseudo = pseudo;
this.fenetre = null;
this.scanner = new Scanner(System.in);
this.clientKeys = RSA.genererCle();
this.fileAttenteMessage = new ArrayList<>();
}
public void start() {
System.out.print("Saisir un pseudo: ");
pseudo = scanner.nextLine();
public Client(String ip, int port, String pseudo, FenetreClient fenetre) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
this.SERVER_PORT = port;
this.pseudo = pseudo;
this.fenetre = fenetre;
this.scanner = new Scanner(System.in);
this.clientKeys = RSA.genererCle();
this.fileAttenteMessage = new ArrayList<>();
}
@Override
public void run() {
if (pseudo == null) {
System.out.print("Pseudo: ");
pseudo = scanner.nextLine();
}
try (Socket socket = new Socket(SERVER_IP, SERVER_PORT)) {
inputStream = new ObjectInputStream(socket.getInputStream());
outputStream = new ObjectOutputStream(socket.getOutputStream());
exchangeKeys();
sendMessage(pseudo);
// Ecoute du serveur
ListenThread threadClient = new ListenThread(this);
ListenThread threadClient = new ListenThread(this, fenetre);
threadClient.start();
// Ecoute de l'entrée du clavier
System.out.println("Tappez 'bye' pour quitter\n");
String message;
System.out.println("Tapez 'bye' pour quitter\n");
String message = "";
do {
message = scanner.nextLine();
sendMessage(message);
if (fileAttenteMessage.size() > 0) {
message = fileAttenteMessage.remove(0);
sendMessage(message);
}
} while (!Objects.equals(message, "bye"));
} catch (ConnectException e) {
System.err.println("Serveur non trouvé");
}catch (EOFException e) {
System.err.println("Connexion perdue");
System.err.println("Serveur non trouvé"); // TODO throw error
if (fenetre != null) {
new FenetreErreur("Serveur non trouvé", fenetre);
fenetre.deconnexion();
}
} catch (EOFException e) {
System.err.println("Connexion perdue"); // TODO throw error
if (fenetre != null) {
new FenetreErreur("Connexion perdue", fenetre);
fenetre.deconnexion();
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
@@ -84,9 +121,11 @@ public class Client {
return RSA.decrypter(messageCrypte, clientKeys.getPrivate());
}
public static void main(String[] args) {
Client client = new Client("localhost", 4444);
client.start();
/**
* Ajoute un message à la file d'attente
* @param message
*/
public void addMessage(String message) {
this.fileAttenteMessage.add(message);
}
}
+17
View File
@@ -1,5 +1,8 @@
package client;
import ui.FenetreClient;
import ui.FenetreErreur;
import java.io.EOFException;
import java.io.IOException;
import java.net.SocketException;
@@ -10,9 +13,16 @@ import java.net.SocketException;
public class ListenThread extends Thread {
private final Client client;
private final FenetreClient fenetre;
public ListenThread(Client client) {
this.client = client;
this.fenetre = null;
}
public ListenThread(Client client, FenetreClient fenetre) {
this.client = client;
this.fenetre = fenetre;
}
@Override
@@ -23,11 +33,18 @@ public class ListenThread extends Thread {
while (true) {
message = client.getMessage();
System.out.println(message);
if (fenetre != null) {
fenetre.displayNewMessage(message);
}
}
} catch (SocketException ignored) {
System.out.println("Vous avez quitté le salon");
} catch (EOFException ignored) {
System.err.println("Connexion perdue");
if (fenetre != null) {
new FenetreErreur("Connexion perdue", fenetre);
fenetre.deconnexion();
}
}catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}