Commentaires + README

This commit is contained in:
Lucàs
2022-12-07 10:51:28 +01:00
parent 8fb03bf6f9
commit 938969078e
5 changed files with 129 additions and 206 deletions
+7 -150
View File
@@ -2,27 +2,13 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/.idea/intellij-javadocs-4.0.1.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/uiDesigner.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/ListenThread.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/ListenThread.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/Server.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/Server.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/ThreadServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ThreadServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreClient.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreErreur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreErreur.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreServeur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreServeur.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/utils/AES.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/AES.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/utils/RSA.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/RSA.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/utils/ResolutionDeNom.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/utils/ResolutionDeNom.java" afterDir="false" />
</list>
<list id="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" name="Changes by burgu" comment="">
<change beforePath="$PROJECT_DIR$/src/client/Client.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/Client.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/client/ListenThread.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/client/ListenThread.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/Server.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/Server.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/server/ThreadServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/server/ThreadServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/ui/FenetreServeur.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/ui/FenetreServeur.java" afterDir="false" />
</list>
<list id="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" name="Changes by burgu" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -40,92 +26,6 @@
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="LineStatusTrackerManager">
<file path="$PROJECT_DIR$/src/client/ListenThread.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="10" end1="11" start2="16" end2="21" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="14" end1="14" start2="24" end2="25" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="15" end1="15" start2="26" end2="28" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="17" end1="17" start2="30" end2="35" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="22" end1="22" start2="40" end2="46" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="47" end1="48" start2="71" end2="72" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/server/Server.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="8" end1="9" start2="14" end2="22" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="10" end1="10" start2="23" end2="26" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="11" end1="11" start2="27" end2="31" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="12" end1="12" start2="32" end2="36" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="14" end1="14" start2="38" end2="43" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="17" end1="18" start2="46" end2="46" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="21" end1="21" start2="49" end2="55" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="35" end1="36" start2="69" end2="70" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="37" end1="37" start2="71" end2="72" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="39" end1="40" start2="74" end2="75" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="41" end1="41" start2="76" end2="77" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="42" end1="43" start2="78" end2="78" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="50" end1="55" start2="85" end2="85" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/client/Client.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="7" end1="8" start2="13" end2="13" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="20" end1="20" start2="25" end2="33" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="22" end1="22" start2="35" end2="36" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="26" end1="26" start2="40" end2="42" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="28" end1="30" start2="44" end2="44" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="31" end1="31" start2="45" end2="46" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="36" end1="36" start2="51" end2="69" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="48" end1="48" start2="81" end2="88" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="105" end1="105" start2="145" end2="150" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="113" end1="113" start2="158" end2="163" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="118" end1="118" start2="168" end2="174" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="125" end1="126" start2="181" end2="182" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/ui/FenetreServeur.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="5" end1="5" start2="11" end2="12" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="6" end1="6" start2="13" end2="20" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="12" end1="12" start2="26" end2="30" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="14" end1="14" start2="32" end2="35" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="18" end1="18" start2="39" end2="40" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="19" end1="19" start2="41" end2="43" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="20" end1="20" start2="44" end2="45" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="27" end1="27" start2="52" end2="55" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="29" end1="29" start2="57" end2="59" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="32" end1="32" start2="62" end2="63" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="36" end1="36" start2="67" end2="72" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="38" end1="39" start2="74" end2="75" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="45" end1="45" start2="81" end2="86" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
</ranges>
</file>
<file path="$PROJECT_DIR$/src/server/ThreadServer.java">
<ranges>
<range start1="0" end1="0" start2="0" end2="6" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="12" end1="12" start2="18" end2="26" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="15" end1="15" start2="29" end2="32" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="16" end1="16" start2="33" end2="37" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="17" end1="17" start2="38" end2="42" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="18" end1="18" start2="43" end2="47" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="19" end1="19" start2="48" end2="53" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="20" end1="21" start2="54" end2="58" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="23" end1="23" start2="60" end2="67" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="32" end1="32" start2="76" end2="84" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="72" end1="72" start2="124" end2="130" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="80" end1="80" start2="138" end2="146" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="85" end1="85" start2="151" end2="158" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="88" end1="90" start2="161" end2="166" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
<range start1="92" end1="92" start2="168" end2="175" changelist="ecb4d6c3-70b5-4e80-ba94-fcec6f42612f" />
<range start1="96" end1="98" start2="179" end2="184" changelist="79e91d13-7d5f-4b9a-954b-9bc7cde074fc" />
</ranges>
</file>
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
@@ -152,6 +52,7 @@
"com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrarySuperClass.JUnit5": "",
"create.test.in.the.same.root": "true",
"last_opened_file_path": "/Users/lucas/Documents/GitHub/projet-mini-chat/src/serveur",
"nodejs_package_manager_path": "npm",
"project.structure.last.edited": "Modules",
"project.structure.proportion": "0.15",
"project.structure.side.proportion": "0.2",
@@ -173,33 +74,7 @@
<recent name="utils" />
</key>
</component>
<component name="RunManager" selected="Application.Server">
<configuration name="App" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ui.App" />
<module name="projet-mini-chat" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="ui.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="Client" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="client.Client" />
<module name="projet-mini-chat" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="client.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<component name="RunManager" selected="Application.ui.FenetreClient">
<configuration name="FenetreServeur" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ui.FenetreServeur" />
<module name="projet-mini-chat" />
@@ -213,19 +88,6 @@
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="Server" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="server.Server" />
<module name="projet-mini-chat" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="server.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="ui.FenetreClient (1)" type="Application" factoryName="Application" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="ui.FenetreClient" />
<module name="projet-mini-chat" />
@@ -254,19 +116,13 @@
</configuration>
<list>
<item itemvalue="Application.ui.FenetreClient (1)" />
<item itemvalue="Application.App" />
<item itemvalue="Application.Client" />
<item itemvalue="Application.FenetreServeur" />
<item itemvalue="Application.ui.FenetreClient" />
<item itemvalue="Application.Server" />
</list>
<recent_temporary>
<list>
<item itemvalue="Application.Server" />
<item itemvalue="Application.App" />
<item itemvalue="Application.FenetreServeur" />
<item itemvalue="Application.ui.FenetreClient" />
<item itemvalue="Application.Client" />
<item itemvalue="Application.FenetreServeur" />
</list>
</recent_temporary>
</component>
@@ -282,7 +138,8 @@
<workItem from="1669119772164" duration="6834000" />
<workItem from="1669724625302" duration="6630000" />
<workItem from="1670230395395" duration="19588000" />
<workItem from="1670329829454" duration="6293000" />
<workItem from="1670329829454" duration="6520000" />
<workItem from="1670405222370" duration="1434000" />
</task>
<servers />
</component>
+18 -12
View File
@@ -1,16 +1,22 @@
# Question 6
<h1 align="center">Projet Mini Chat</h1>
<p>
<img alt="Version" src="https://img.shields.io/badge/version-1.0-blue.svg?cacheSeconds=2592000" />
</p>
## Avant la communication
Utiliser le RSA, avant toute communication.
Le client et le server génèrent 2 clés (une publique et une privées)
Ils s'échangent leurs clé publiques.
> Projet de réseau, semestre 5 Licence Informatique 2022-2023 à l'INU Champollion.
![img](https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Asymmetric_cryptography_-_step_1.svg/800px-Asymmetric_cryptography_-_step_1.svg.png)
## Auteurs
## Pendant la communication
Lors qu'un utilisateur veut envoyer un message, il crypte son
message avec la clé pulique de son interlocuteur et lui envoie.
La personne qui reçois le message, le décrypte le message avec
sa propre clé privée.
👤 **Gaël BURGUÈS**
![img](https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Asymmetric_cryptography_-_step_2.svg/800px-Asymmetric_cryptography_-_step_2.svg.png)
* Github: [@Gagl08](https://github.com/Gagl08)
👤 **Laurian DUFRECHOU**
* Github: [@Laurian-Dufrechou](https://github.com/Laurian-Dufrechou)
👤 **Lucàs VABRE**
* Github: [@LucasVbr](https://github.com/LucasVbr)
***
+84 -33
View File
@@ -31,24 +31,64 @@ import java.util.Scanner;
* @author Lucàs Vabre
*/
public class Client extends Thread{
public class Client extends Thread {
//elements d'un client
/**
* Adresse IP de connexion au serveur
*/
private final String SERVER_IP;
/**
* Port de connexion du serveur
*/
private final int SERVER_PORT;
/**
* Interface utilisateur
*/
private final FenetreClient fenetre;
/**
* Le pseudonyme du client
*/
private String pseudo;
private KeyPair clientKeys;
/**
* Paire de clés de chiffrage du client
*/
private final KeyPair clientKeys;
/**
* Clé publique du serveur
*/
private PublicKey serverKey;
/**
* Flux d'entrée pour la version console
*/
private final Scanner scanner;
// Sockets de connexion
/**
* Flux d'entrée du socket
*/
private ObjectInputStream inputStream;
/**
* Flux de sortie du socket
*/
private ObjectOutputStream outputStream;
private ArrayList<String> fileAttenteMessage;
/**
* File d'attente des messages à envoyer
*/
private final ArrayList<String> fileAttenteMessage;
/**
* Crée un nouveau client qui se connecte à un serveur
*
* @param ip Adresse du serveur (IP ou URI)
* @param port Port de connexion
*/
public Client(String ip, int port) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
this.SERVER_PORT = port;
@@ -62,10 +102,11 @@ public class Client extends Thread{
}
/**
* ancien object client sans fenetre
* @param ip adresse ip du client
* @param port numeros de port du client
* @param pseudo pseudo du client
* Crée un nouveau client qui se connecte à un serveur avec un pseudo
*
* @param ip Adresse du serveur (IP ou URI)
* @param port Port de connexion
* @param pseudo Le pseudo du client
*/
public Client(String ip, int port, String pseudo) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
@@ -80,11 +121,12 @@ public class Client extends Thread{
}
/**
* Object client actuel
* @param ip adresse ip du client
* @param port numeros de port du client
* @param pseudo nom du client
* @param fenetre fenetreClient assicié au client
* Crée un nouveau client lié à une interface utilisateur
*
* @param ip Adresse du serveur (IP ou URI)
* @param port Port de connexion au serveur
* @param pseudo Pseudonyme du client
* @param fenetre Interface du client
*/
public Client(String ip, int port, String pseudo, FenetreClient fenetre) {
this.SERVER_IP = ResolutionDeNom.getIPAddress(ip);
@@ -100,26 +142,30 @@ public class Client extends Thread{
@Override
public void run() {
// Demande la saisie du pseudo s'il n'est pas défini
if (pseudo == null) {
System.out.print("Pseudo: ");
pseudo = scanner.nextLine();
}
// Connexion au socket
try (Socket socket = new Socket(SERVER_IP, SERVER_PORT)) {
inputStream = new ObjectInputStream(socket.getInputStream());
outputStream = new ObjectOutputStream(socket.getOutputStream());
// Initialisation : envoi des clés et du pseudo
exchangeKeys();
sendMessage(pseudo);
// Ecoute du serveur
// Écoute du serveur
ListenThread threadClient = new ListenThread(this, fenetre);
threadClient.start();
// Ecoute de l'entrée du clavier
// Écoute de l'entrée du clavier
System.out.println("Tapez 'bye' pour quitter\n");
String message = "";
do {
// S'il y a un message dans la file d'attente, on l'envoie
if (fileAttenteMessage.size() > 0) {
message = fileAttenteMessage.remove(0);
sendMessage(message);
@@ -127,14 +173,15 @@ public class Client extends Thread{
} while (!Objects.equals(message, "bye"));
} catch (ConnectException e) {
System.err.println("Serveur non trouvé"); // TODO throw error
if (fenetre != null) {
System.err.println("Serveur non trouvé");
if (fenetre != null) { // Affiche l'erreur sur l'interface utilisateur
new FenetreErreur("Serveur non trouvé", fenetre);
fenetre.deconnexion();
}
} catch (EOFException e) {
System.err.println("Connexion perdue"); // TODO throw error
if (fenetre != null) {
System.err.println("Connexion perdue");
if (fenetre != null) { // Affiche l'erreur sur l'interface utilisateur
new FenetreErreur("Connexion perdue", fenetre);
fenetre.deconnexion();
}
@@ -144,11 +191,12 @@ public class Client extends Thread{
}
/**
* envoie la clef client au serveur
* @throws IOException
* @throws ClassNotFoundException
* Échange les clés publiques du client et du serveur
*
* @throws IOException Erreur de connexion
* @throws ClassNotFoundException L'objet reçu n'a pas pu être cast en PublicKey
*/
public void exchangeKeys() throws IOException, ClassNotFoundException {
private void exchangeKeys() throws IOException, ClassNotFoundException {
// Envoie sa clé
outputStream.writeObject(clientKeys.getPublic());
@@ -157,9 +205,10 @@ public class Client extends Thread{
}
/**
* envoie un message dans la socket
* @param message message a envoyer au serveur
* @throws IOException
* Envoie un message au serveur
*
* @param message Le message à envoyer
* @throws IOException Erreur de connexion au socket
*/
public void sendMessage(String message) throws IOException {
byte[] messageCrypte = RSA.encrypter(message, serverKey);
@@ -167,10 +216,11 @@ public class Client extends Thread{
}
/**
* Recupere un message evoye par le serveur
* @return
* @throws IOException
* @throws ClassNotFoundException
* Récupère un message du serveur
*
* @return Le message reçu
* @throws IOException Erreur de connexion au serveur
* @throws ClassNotFoundException L'objet reçu n'a pas pu être cast en byte[]
*/
public String getMessage() throws IOException, ClassNotFoundException {
byte[] messageCrypte = (byte[]) inputStream.readObject();
@@ -178,8 +228,9 @@ public class Client extends Thread{
}
/**
* Ajoute un message à la file d'attente
* @param message messsage a ajouter a la file
* Ajoute un message dans la file d'attente des messages à envoyer
*
* @param message Le message à envoyer
*/
public void addMessage(String message) {
this.fileAttenteMessage.add(message);
+15 -11
View File
@@ -22,10 +22,14 @@ import java.net.SocketException;
*/
public class ListenThread extends Thread {
/** Instance du client */
/**
* Instance du client
*/
private final Client client;
/** Interface utilisateur du client */
/**
* Interface utilisateur du client
*/
private final FenetreClient fenetre;
/**
@@ -39,10 +43,10 @@ public class ListenThread extends Thread {
}
/**
* Object d'ecoute avec fenetre
* Crée un nouveau thread lorsque le client utilise une interface utilisateur
*
* @param client client associe à l'ecoute
* @param fenetre fenetreClient associe à l'ecoute
* @param client client associe à l'écoute
* @param fenetre Interface utilisateur du client
*/
public ListenThread(Client client, FenetreClient fenetre) {
this.client = client;
@@ -56,16 +60,16 @@ public class ListenThread extends Thread {
String message;
while (true) {
message = client.getMessage();
// Log
System.out.println(message);
if (fenetre != null) {
fenetre.displayNewMessage(message);
if (fenetre != null) fenetre.displayNewMessage(message);
}
}
} catch (SocketException ignored) {
} catch (SocketException ignored) { // Le socket client est fermé
System.out.println("Vous avez quitté le salon");
} catch (EOFException ignored) {
} catch (EOFException ignored) { // Fermeture coté serveur
System.err.println("Connexion perdue");
if (fenetre != null) {
if (fenetre != null) { // Affiche une erreur sur l'interface utilisateur
new FenetreErreur("Connexion perdue", fenetre);
fenetre.deconnexion();
}
+5
View File
@@ -51,6 +51,7 @@ public class FenetreClient extends JFrame {
// Au lancement, on ne peut pas envoyer de message sans être connecté au serveur
messageInput.setEnabled(false);
envoyerButton.setEnabled(false);
deconnexionButton.setEnabled(false);
// Action des boutons
messageInput.addKeyListener(new KeyAdapter() {
@@ -114,10 +115,12 @@ public class FenetreClient extends JFrame {
addressInput.setEnabled(false);
portInput.setEnabled(false);
pseudoInput.setEnabled(false);
connexionButton.setEnabled(false);
// Active l'interface de tchat
messageInput.setEnabled(true);
envoyerButton.setEnabled(true);
deconnexionButton.setEnabled(true);
}
/**
@@ -137,10 +140,12 @@ public class FenetreClient extends JFrame {
addressInput.setEnabled(true);
portInput.setEnabled(true);
pseudoInput.setEnabled(true);
connexionButton.setEnabled(true);
// Désactive l'interface de tchat
messageInput.setEnabled(false);
envoyerButton.setEnabled(false);
deconnexionButton.setEnabled(false);
}
/**