Compare commits

...

53 commits

Author SHA1 Message Date
ab64e76fdd Ajout rapports 2021-02-14 18:03:19 +01:00
233e30f685 Mettre à jour 'README.md' 2021-02-14 17:09:50 +01:00
4e65509281 Mettre à jour 'README.md' 2021-02-14 17:08:49 +01:00
c26e58e2f0 Mettre à jour 'README.md' 2021-02-14 17:07:06 +01:00
ba39b3731a Mettre à jour 'README.md' 2021-02-14 17:06:28 +01:00
81919ff798 Mettre à jour 'README.md' 2021-02-14 17:05:16 +01:00
c2d35045bf Mettre à jour 'README.md' 2021-02-14 12:17:26 +01:00
f4c381c223 Mettre à jour 'README.md' 2021-02-14 12:12:03 +01:00
Nabzzz
d47ae20a7f Création d'un dossier rapport pour le rendu final 2021-02-14 11:24:01 +01:00
Nabzzz
0fc995c97d Ajout du code source du serveur, du war et du jar 2021-02-14 11:19:27 +01:00
715fbe41cf Ajout config json 2021-02-14 10:27:03 +01:00
Nabzzz
31a06d807e Mise en place du json 2021-02-11 17:10:51 +01:00
Nabzzz
8c3a3c66f7 Mise en place du json 2021-02-11 15:30:37 +01:00
Nabzzz
c4e5f8c1cd Mise en place du json 2021-02-11 15:11:25 +01:00
Nabzzz
51c81a61e3 Taille maximale des pseudonymes mise en place 2021-02-07 15:57:56 +01:00
d916a66bed Correction d'une erreur lors d'un modification de pseudo 2021-02-06 12:53:09 +01:00
ceef4a3427 Changement url server de presence 2021-02-06 09:56:19 +01:00
08b8c01c67 Conception 2.0é 2021-01-31 15:34:31 +01:00
7926d36bb6 Conception 2021-01-31 13:49:23 +01:00
d16aa90ff6 Mettre à jour 'README.md' 2021-01-30 14:07:34 +01:00
a4a8e4fddf Mettre à jour 'README.md' 2021-01-30 14:06:54 +01:00
eca1850e47 Mettre à jour 'README.md' 2021-01-30 13:59:47 +01:00
2273a9f8e8 debut Readme 2021-01-30 13:57:48 +01:00
6f72142e16 Javadoc 2021-01-30 13:50:00 +01:00
4f47290542 Nettoyage du code 2021-01-30 13:49:03 +01:00
7103a2b584 Correction : Un utilisateur ne peut pas communiquer plusieurs fois en même temps avec la même personne 2021-01-30 12:31:41 +01:00
f56866329d Modification Utilisateur 2021-01-24 13:53:41 +01:00
142a9e021c Synchronized 2021-01-24 13:17:32 +01:00
2724606830 Premier test échange TCP distant 2021-01-24 13:13:00 +01:00
c31ecd984e Nettoyage du code 2021-01-24 12:44:43 +01:00
Nabzzz
61e74c0a13 Initiation de la connexion TCP 2021-01-24 11:28:45 +01:00
1b03263509 Tests Distants-Distants / Distants-Internes / Internes-Internes UDP -> Succes 2021-01-23 16:50:12 +01:00
2098a9972e Ajout d'un utilisateur seuelement si il n'appartient pas deja a la liste 2021-01-23 16:23:39 +01:00
85f6e0f465 Changement modification pseudo bis 2021-01-23 16:11:57 +01:00
ed271e903e Changement modification pseudo 2021-01-23 15:56:38 +01:00
30f977636b Correction erreur Reponse connexion 2021-01-22 17:04:52 +01:00
4ec0611d3b AJout de break pour corriger certaines fonctions 2021-01-22 17:03:24 +01:00
6708097153 Gerer les connexions internes et externes tout en transmettant les utilisateurs déjà actifs 2021-01-22 16:53:47 +01:00
70072c694c Le server envoit la liste des utilisateurs actifs lorsqu'un utilisateur se connecte en distant 2021-01-22 16:05:58 +01:00
Nabzzz
5681fcfceb Bdd commentée pour pouvoir tester le serveur 2021-01-22 15:47:11 +01:00
Nabzzz
a6b25652b7 Correction erreur connexion (ChatApp.getInstance().isConnecte() dans envoiUnicast() ) 2021-01-20 15:49:53 +01:00
9fe8dd70d5 correction erreur dans connexion (setConnecte) 2021-01-20 14:08:35 +01:00
9ad9d34a91 correction erreur pseudo = null 2021-01-20 13:34:34 +01:00
032ab6520c Ajout fonction notify 2021-01-19 19:12:26 +01:00
Nabzzz
c3d61ca196 SendPost fonctionnelle (vraiment fonctionnelle) 2021-01-17 12:41:18 +01:00
Nabzzz
e6b7722471 SendPost fonctionnelle 2021-01-17 11:31:47 +01:00
Nabzzz
f0de008617 Mise en place des methodes pour l'implementation de la deuxieme partie 2021-01-16 12:59:02 +01:00
3545112960 generer javadoc 2021-01-03 16:15:32 +04:00
8490d5caad Ajout de commentaire 2021-01-03 16:12:12 +04:00
Nabzzz
4e188d0258 Bouton pour choix de type de connexion 2021-01-03 12:27:07 +01:00
6fb2e95c05 pb db avec vpn 2021-01-03 14:53:35 +04:00
d91a67fa86 Base de données INSA 2021-01-02 12:59:34 +04:00
85d3994d90 Merge branch 'NabilFX' 2020-12-29 18:09:25 +04:00
304 changed files with 64849 additions and 665 deletions

3
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

9
.idea/ChatApp-AL-NM.iml Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

4
.idea/misc.xml Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="13" project-jdk-type="JavaSDK" />
</project>

8
.idea/modules.xml Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ChatApp-AL-NM.iml" filepath="$PROJECT_DIR$/.idea/ChatApp-AL-NM.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

Binary file not shown.

7
Application/config.json Normal file
View file

@ -0,0 +1,7 @@
{
"BaseDeDonnesURL" : "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_006?",
"BaseDeDonnesLogin" : "tp_servlet_006",
"BaseDeDonneesMDP" : "baePh9ei",
"ServeurURL" : "https://srv-gei-tomcat.insa-toulouse.fr/Server_AL_NM/"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="mysql-connector-java-8.0.22.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

1
Implementation/bin/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/bin/

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Implementation</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,10 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=13
org.eclipse.jdt.core.compiler.compliance=13
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=13

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="lib" path="gradle/wrapper/gradle-wrapper.jar"/>
<classpathentry kind="output" path="build/classes/java/main"/>
</classpath>

View file

@ -1,6 +1,10 @@
<component name="ArtifactManager"> <component name="ArtifactManager">
<artifact type="jar" name="chatapp"> <artifact type="jar" name="chatapp">
<output-path>$PROJECT_DIR$/out/artifacts/chatapp</output-path> <output-path>$PROJECT_DIR$/out/artifacts/chatapp</output-path>
<root id="archive" name="chatapp.jar" /> <root id="archive" name="chatapp.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/src/main/resources/META-INF/MANIFEST.MF" />
</element>
</root>
</artifact> </artifact>
</component> </component>

View file

@ -0,0 +1,29 @@
<component name="ArtifactManager">
<artifact type="jar" name="chatapp:jar">
<output-path>$PROJECT_DIR$/out/artifacts/chatapp_jar</output-path>
<root id="archive" name="chatapp.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/src/resources/META-INF/MANIFEST.MF" />
</element>
<element id="library" level="project" name="Gradle: com.google.protobuf:protobuf-java:3.11.4" />
<element id="library" level="project" name="Gradle: mysql:mysql-connector-java:8.0.22" />
<element id="library" level="project" name="Gradle: org.apiguardian:apiguardian-api:1.1.0" />
<element id="library" level="project" name="Gradle: org.junit.jupiter:junit-jupiter-api:5.6.0" />
<element id="library" level="project" name="Gradle: org.junit.jupiter:junit-jupiter-engine:5.6.0" />
<element id="library" level="project" name="Gradle: org.junit.platform:junit-platform-commons:1.6.0" />
<element id="library" level="project" name="Gradle: org.junit.platform:junit-platform-engine:1.6.0" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-base:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-base:win:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-controls:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-controls:win:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-fxml:win:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-graphics:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-graphics:linux:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-graphics:mac:11.0.2" />
<element id="library" level="project" name="Gradle: org.openjfx:javafx-graphics:win:11.0.2" />
<element id="library" level="project" name="Gradle: org.opentest4j:opentest4j:1.2.0" />
<element id="library" level="project" name="lib" />
<element id="library" level="project" name="mysql-connector-java-8.0.22" />
</root>
</artifact>
</component>

View file

@ -0,0 +1,20 @@
<component name="ArtifactManager">
<artifact type="jar" name="chatapp.main:jar">
<output-path>$PROJECT_DIR$/out/artifacts/chatapp_main_jar</output-path>
<root id="archive" name="chatapp.main.jar">
<element id="module-output" name="chatapp.main" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-controls/11.0.2/6c763707769c18adce406904c771c2ad1fcc370b/javafx-controls-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/mysql/mysql-connector-java/8.0.22/ec8bfce16c8bd18d6cb598b1147aa145be1408f/mysql-connector-java-8.0.22.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/11.0.2/ef4c34f0ca77cd99100b76c2ccf1dce383572bb1/javafx-graphics-11.0.2-linux.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/11.0.2/e522eb4ea422eceeee207b1c266ba3db19b2343a/javafx-graphics-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/3.11.4/7ec0925cc3aef0335bbc7d57edfd42b0f86f8267/protobuf-java-3.11.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-controls/11.0.2/4ab633cf1eea60f76e2ae9905aedac862da88b08/javafx-controls-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-base/11.0.2/1852e57b8cf9a9b6488c33605bccd5d06ff210e1/javafx-base-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/11.0.2/c1d99ae5bc48e7173f4514a941d27d8f8c972c71/javafx-graphics-11.0.2-mac.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-fxml/11.0.2/b3242e4c031558574de2a1da685bb5fcdbb8a530/javafx-fxml-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-base/11.0.2/7fb2e4a8528ec9e434a9ac9ee98b39af79e6dcb8/javafx-base-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.openjfx/javafx-graphics/11.0.2/20459ea2cf714942bcbeb78a7f70ba3531dc1a44/javafx-graphics-11.0.2-win.jar" path-in-jar="/" />
<element id="artifact" artifact-name="chatapp" />
</root>
</artifact>
</component>

View file

@ -1,7 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="false" project-jdk-name="13" project-jdk-type="JavaSDK"> <component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" value="$PROJECT_DIR$/../../Javadoc" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="13" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>
</project> </project>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>chatapp</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -1,6 +1,7 @@
plugins { plugins {
id 'java' id 'java'
id 'application' id 'application'
id 'com.github.johnrengelman.shadow' version '6.1.0'
id 'org.openjfx.javafxplugin' version '0.0.9' id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.15.1' id 'org.beryx.jlink' version '2.15.1'
} }
@ -21,6 +22,7 @@ javafx {
dependencies { dependencies {
compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.22'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
@ -42,3 +44,13 @@ jlink {
test { test {
useJUnitPlatform() useJUnitPlatform()
} }
jar {
manifest {
attributes "Main-Class": "chatapp.Launcher"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?> <?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.GridPane?>
@ -24,24 +26,34 @@
</Text> </Text>
</children> </children>
</HBox> </HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;"> <HBox alignment="CENTER" prefHeight="304.0" prefWidth="598.0" style="-fx-background-color: #3299a8;">
<children> <children>
<GridPane alignment="CENTER" prefHeight="302.0" prefWidth="279.0"> <GridPane alignment="CENTER" prefHeight="275.0" prefWidth="448.0">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="123.19998779296876" vgrow="SOMETIMES" /> <RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="111.80001831054688" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="107.20001220703125" vgrow="SOMETIMES" /> <RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="69.39998168945314" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="33.60002441406249" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="27.400000000000034" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="79.39999999999998" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" /> <TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="3" />
<Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="287.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="2" GridPane.rowIndex="1"> <Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="453.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="3" GridPane.rowIndex="1">
<font> <font>
<Font name="OCR A Extended" size="27.0" /> <Font name="OCR A Extended" size="27.0" />
</font> </font>
</Button> </Button>
<RadioButton fx:id="remoteButton" mnemonicParsing="false" selected="true" text="Connexion distante" GridPane.columnIndex="1" GridPane.rowIndex="3">
<toggleGroup>
<ToggleGroup fx:id="lieu" />
</toggleGroup>
</RadioButton>
<RadioButton fx:id="localButton" mnemonicParsing="false" text="Connexion locale" toggleGroup="$lieu" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children> </children>
</GridPane> </GridPane>
</children> </children>

View file

@ -0,0 +1,185 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## chatapp start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/.." >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="chatapp"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and CHATAPP_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/lib/chatapp-1.0-SNAPSHOT.jar:$APP_HOME/lib/json-simple-1.1.1.jar:$APP_HOME/lib/mysql-connector-java-8.0.22.jar:$APP_HOME/lib/javafx-fxml-11.0.2-win.jar:$APP_HOME/lib/javafx-controls-11.0.2-win.jar:$APP_HOME/lib/javafx-controls-11.0.2.jar:$APP_HOME/lib/javafx-graphics-11.0.2-win.jar:$APP_HOME/lib/javafx-graphics-11.0.2-linux.jar:$APP_HOME/lib/javafx-graphics-11.0.2-mac.jar:$APP_HOME/lib/javafx-graphics-11.0.2.jar:$APP_HOME/lib/javafx-base-11.0.2-win.jar:$APP_HOME/lib/javafx-base-11.0.2.jar:$APP_HOME/lib/junit-4.10.jar:$APP_HOME/lib/protobuf-java-3.11.4.jar:$APP_HOME/lib/hamcrest-core-1.1.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $CHATAPP_OPTS -classpath "\"$CLASSPATH\"" chatapp.Launcher "$APP_ARGS"
exec "$JAVACMD" "$@"

View file

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem chatapp startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and CHATAPP_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\lib\chatapp-1.0-SNAPSHOT.jar;%APP_HOME%\lib\json-simple-1.1.1.jar;%APP_HOME%\lib\mysql-connector-java-8.0.22.jar;%APP_HOME%\lib\javafx-fxml-11.0.2-win.jar;%APP_HOME%\lib\javafx-controls-11.0.2-win.jar;%APP_HOME%\lib\javafx-controls-11.0.2.jar;%APP_HOME%\lib\javafx-graphics-11.0.2-win.jar;%APP_HOME%\lib\javafx-graphics-11.0.2-linux.jar;%APP_HOME%\lib\javafx-graphics-11.0.2-mac.jar;%APP_HOME%\lib\javafx-graphics-11.0.2.jar;%APP_HOME%\lib\javafx-base-11.0.2-win.jar;%APP_HOME%\lib\javafx-base-11.0.2.jar;%APP_HOME%\lib\junit-4.10.jar;%APP_HOME%\lib\protobuf-java-3.11.4.jar;%APP_HOME%\lib\hamcrest-core-1.1.jar
@rem Execute chatapp
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %CHATAPP_OPTS% -classpath "%CLASSPATH%" chatapp.Launcher %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable CHATAPP_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%CHATAPP_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View file

@ -0,0 +1,183 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## chatapp start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/.." >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="chatapp"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and CHATAPP_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/lib/chatapp-1.0-SNAPSHOT-all.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $CHATAPP_OPTS -jar "\"$CLASSPATH\"" "$APP_ARGS"
exec "$JAVACMD" "$@"

View file

@ -0,0 +1,84 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem chatapp startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..
@rem Add default JVM options here. You can also use JAVA_OPTS and CHATAPP_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\lib\chatapp-1.0-SNAPSHOT-all.jar
@rem Execute chatapp
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %CHATAPP_OPTS% -jar "%CLASSPATH%" %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable CHATAPP_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%CHATAPP_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View file

@ -1,28 +1,28 @@
chatapp/Protocol/RunnerEcouteTCP.java chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP chatapp.Protocol.RunnerEcouteTCP
chatapp/View/DemarrerSession.java chatapp/View/FenetreSession.java
chatapp.View.DemarrerSession chatapp.View.FenetreSession
chatapp/Controller/ChatApp.java chatapp/Protocol/HttpEchange.java
chatapp.Controller.ChatApp chatapp.Protocol.HttpEchange
chatapp/Model/DataBase.java chatapp/Model/DataBase.java
chatapp.Model.DataBase chatapp.Model.DataBase
chatapp/View/ChangementPseudo.java chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo chatapp.View.ChangementPseudo
chatapp/Protocol/RunnerEcouteUDP.java chatapp/View/View_Menu.java
chatapp.Protocol.RunnerEcouteUDP chatapp.View.View_Menu
chatapp/Launcher.java chatapp/Launcher.java
chatapp.Launcher chatapp.Launcher
chatapp/Model/ListUtilisateurs.java chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs chatapp.Model.ListUtilisateurs
chatapp/Protocol/UDPEchange.java chatapp/View/DemarrerSession.java
chatapp.Protocol.RunnerUDP chatapp.View.DemarrerSession
chatapp.Protocol.UDPEchange
chatapp/Model/MessageHorodate.java chatapp/Model/MessageHorodate.java
chatapp.Model.MessageHorodate chatapp.Model.MessageHorodate
chatapp/Main.java chatapp/Main.java
chatapp.Main chatapp.Main
chatapp/View/View_Menu.java chatapp/View/Clavardage.java
chatapp.View.View_Menu chatapp.View.Clavardage
chatapp.View.Clavardage$1
chatapp/Protocol/SessionClavardage.java chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage chatapp.Protocol.SessionClavardage
chatapp/View/ConnexionScreen.java chatapp/View/ConnexionScreen.java
@ -31,9 +31,10 @@ chatapp/View/View_Utilisateurs.java
chatapp.View.View_Utilisateurs chatapp.View.View_Utilisateurs
chatapp/Model/Utilisateur.java chatapp/Model/Utilisateur.java
chatapp.Model.Utilisateur chatapp.Model.Utilisateur
chatapp/View/FenetreSession.java chatapp/Protocol/UDPEchange.java
chatapp.View.FenetreSession chatapp.Protocol.RunnerUDP
chatapp.View.FenetreSession$1 chatapp.Protocol.UDPEchange
chatapp/View/Clavardage.java chatapp/Controller/ChatApp.java
chatapp.View.Clavardage chatapp.Controller.ChatApp
chatapp.View.Clavardage$1 chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -0,0 +1,14 @@
@startuml
title __CHATAPP's Component Diagram__\n
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

View file

@ -0,0 +1,7 @@
{
"BaseDeDonnesURL" : "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_006?",
"BaseDeDonnesLogin" : "tp_servlet_006",
"BaseDeDonneesMDP" : "baePh9ei",
"ServeurURL" : "https://srv-gei-tomcat.insa-toulouse.fr/Server_AL_NM/"
}

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="chatapp.View.ConnexionScreen">
<children>
<VBox prefHeight="400.0" prefWidth="600.0">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" style="-fx-background-color: #3299a8;">
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="ChatApp">
<font>
<Font name="OCR A Extended" size="48.0" />
</font>
</Text>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="598.0" style="-fx-background-color: #3299a8;">
<children>
<GridPane alignment="CENTER" prefHeight="275.0" prefWidth="448.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="111.80001831054688" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="69.39998168945314" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="33.60002441406249" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="27.400000000000034" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="79.39999999999998" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="3" />
<Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="453.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="3" GridPane.rowIndex="1">
<font>
<Font name="OCR A Extended" size="27.0" />
</font>
</Button>
<RadioButton fx:id="remoteButton" mnemonicParsing="false" selected="true" text="Connexion distante" GridPane.columnIndex="1" GridPane.rowIndex="3">
<toggleGroup>
<ToggleGroup fx:id="lieu" />
</toggleGroup>
</RadioButton>
<RadioButton fx:id="localButton" mnemonicParsing="false" text="Connexion locale" toggleGroup="$lieu" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children>
</GridPane>
</children>
</HBox>
<HBox alignment="CENTER" layoutX="10.0" layoutY="10.0" prefHeight="0.0" prefWidth="600.0" style="-fx-background-color: #3299a8;" />
</children>
</VBox>
</children>
</AnchorPane>

View file

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="chatapp.View.ChangementPseudo">
<children>
<VBox prefHeight="400.0" prefWidth="600.0">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" style="-fx-background-color: #3299a8;">
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Changement Pseudo">
<font>
<Font name="OCR A Extended" size="48.0" />
</font>
</Text>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<GridPane>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Button fx:id="validationButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#validerPseudo" prefHeight="38.0" prefWidth="287.0" style="-fx-background-color: #b0c926;" text="Valider" textFill="#3299a8" GridPane.columnSpan="2" GridPane.rowIndex="2">
<font>
<Font name="OCR A Extended" size="27.0" />
</font>
</Button>
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" GridPane.rowIndex="1" />
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Ancien :">
<font>
<Font size="19.0" />
</font>
</Text>
<Text fx:id="pseudonyme1" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Pseudo" GridPane.columnIndex="1">
<font>
<Font size="19.0" />
</font>
</Text>
</children>
</GridPane>
</children>
</HBox>
<HBox alignment="BOTTOM_RIGHT" prefHeight="63.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<Button fx:id="MenuButton" alignment="CENTER" mnemonicParsing="false" onAction="#retourMenu" style="-fx-background-color: #b0c926;" text="Retour au menu" textFill="WHITE">
<font>
<Font name="OCR A Extended" size="18.0" />
</font>
</Button>
</children>
</HBox>
</children>
</VBox>
</children>
</AnchorPane>

View file

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="chatapp.View.Clavardage">
<children>
<VBox prefHeight="400.0" prefWidth="600.0">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" style="-fx-background-color: #3299a8;">
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Session de Clavardage">
<font>
<Font name="OCR A Extended" size="48.0" />
</font>
</Text>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<GridPane prefHeight="282.0" prefWidth="402.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="257.0" minHeight="10.0" prefHeight="44.0" vgrow="NEVER" />
<RowConstraints maxHeight="257.0" minHeight="10.0" prefHeight="228.0" vgrow="NEVER" />
<RowConstraints maxHeight="257.0" minHeight="10.0" prefHeight="42.0" vgrow="NEVER" />
</rowConstraints>
<children>
<GridPane GridPane.rowIndex="2">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="327.0" minWidth="10.0" prefWidth="327.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="156.0" minWidth="10.0" prefWidth="75.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints />
<RowConstraints maxHeight="79.0" minHeight="0.0" prefHeight="60.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="AEnvoyer" prefHeight="26.0" prefWidth="447.0" promptText="Enter Text" GridPane.rowIndex="1" />
<Button fx:id="EnvoyerButton" mnemonicParsing="false" onAction="#envoyerMessage" prefHeight="27.0" prefWidth="73.0" text="Envoyer" GridPane.columnIndex="1" GridPane.rowIndex="1" />
</children>
</GridPane>
<GridPane prefHeight="34.0" prefWidth="345.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints halignment="RIGHT" hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Chat avec : ">
<font>
<Font size="19.0" />
</font>
</Text>
<Text fx:id="pseudonyme1" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Pseudo" textAlignment="CENTER" wrappingWidth="133.16357421875" GridPane.columnIndex="1">
<font>
<Font size="19.0" />
</font>
</Text>
<Button fx:id="plusButton" mnemonicParsing="false" onAction="#ajouterMessagesHistorique" style="-fx-background-color: #b0c926;" text="+" textAlignment="RIGHT" textFill="WHITE" GridPane.columnIndex="2">
<font>
<Font name="OCR A Extended" size="16.0" />
</font>
</Button>
</children>
</GridPane>
<TextArea fx:id="ChatText" prefHeight="200.0" prefWidth="200.0" GridPane.rowIndex="1" />
</children>
</GridPane>
</children>
</HBox>
<HBox alignment="BOTTOM_RIGHT" prefHeight="63.0" prefWidth="600.0" style="-fx-background-color: #3299a8;" />
</children>
</VBox>
</children>
</AnchorPane>

View file

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="chatapp.View.DemarrerSession">
<children>
<VBox prefHeight="400.0" prefWidth="600.0">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" style="-fx-background-color: #3299a8;">
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Démarrer Session">
<font>
<Font name="OCR A Extended" size="48.0" />
</font>
</Text>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<GridPane prefHeight="166.0" prefWidth="350.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="135.60001220703126" minHeight="10.0" prefHeight="88.20001220703125" vgrow="SOMETIMES" />
<RowConstraints maxHeight="201.9999984741211" minHeight="10.0" prefHeight="100.79998016357423" vgrow="SOMETIMES" />
<RowConstraints maxHeight="201.9999984741211" minHeight="10.0" prefHeight="112.80001983642575" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Choix d'un contact" GridPane.columnSpan="2">
<font>
<Font name="OCR A Extended" size="26.0" />
</font>
</Text>
<ComboBox fx:id="choixContact" onAction="#demarrerSessionAvec" prefHeight="26.0" prefWidth="355.0" GridPane.columnSpan="2" GridPane.rowIndex="1" />
</children>
</GridPane>
</children>
</HBox>
<HBox alignment="BOTTOM_RIGHT" prefHeight="63.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<Button fx:id="MenuButton" alignment="CENTER" mnemonicParsing="false" onAction="#retourMenu" style="-fx-background-color: #b0c926;" text="Retour au menu" textFill="WHITE">
<font>
<Font name="OCR A Extended" size="18.0" />
</font>
</Button>
</children>
</HBox>
</children>
</VBox>
</children>
</AnchorPane>

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<VBox prefHeight="400.0" prefWidth="640.0" style="-fx-background-color: #3299a8;" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="chatapp.View.View_Menu">
<children>
<MenuBar prefWidth="640.0" VBox.vgrow="NEVER">
<menus>
<Menu mnemonicParsing="false" text="Options">
<items>
<MenuItem fx:id="utilsActifsButton" onAction="#afficherUtilsActifs" mnemonicParsing="false" text="Utilisateurs actifs" />
<MenuItem fx:id="demarrerSessionButton" onAction="#demarrerSession" mnemonicParsing="false" text="Démarrer session" />
<MenuItem fx:id="changerPseudoButton" onAction="#changerPseudo" mnemonicParsing="false" text="Changer de pseudo" />
<MenuItem onAction="#deconnexion" mnemonicParsing="false" text="Déconnexion" />
</items>
</Menu>
</menus>
</MenuBar>
<AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS">
<children>
<GridPane layoutX="154.0" layoutY="119.0" prefHeight="82.0" prefWidth="392.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Bienvenue">
<font>
<Font name="OCR A Extended" size="30.0" />
</font>
</Text>
<Text fx:id="pseudonyme" fill="WHITE" strokeType="OUTSIDE" strokeWidth="0.0" text="Pseudo" GridPane.columnIndex="1">
<font>
<Font name="OCR A Extended" size="30.0" />
</font>
</Text>
</children>
</GridPane>
</children>
</AnchorPane>
</children>
</VBox>

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<?import javafx.scene.text.Text?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="chatapp.View.View_Utilisateurs">
<children>
<VBox prefHeight="400.0" prefWidth="600.0">
<children>
<HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" style="-fx-background-color: #3299a8;">
<children>
<Text fill="#b0c926" strokeType="OUTSIDE" strokeWidth="0.0" text="Qui est là?">
<font>
<Font name="OCR A Extended" size="48.0" />
</font>
</Text>
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<ScrollPane prefHeight="282.0" prefWidth="202.0">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="267.0" prefWidth="200.0">
<children>
<TextArea fx:id="ListeUtilisateurs" layoutY="12.0" prefHeight="267.2" prefWidth="200.0" style="-fx-background-color: #3299a8;" text="Aucun utilisateur actif" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="OCR A Extended" size="13.0" />
</font>
</TextArea>
</children>
</AnchorPane>
</content>
</ScrollPane>
</children>
</HBox>
<HBox alignment="BOTTOM_RIGHT" layoutX="10.0" layoutY="10.0" prefHeight="63.0" prefWidth="600.0" style="-fx-background-color: #3299a8;">
<children>
<Button fx:id="MenuButton" alignment="CENTER" mnemonicParsing="false" style="-fx-background-color: #b0c926;" onAction="#retourMenu" text="Retour au menu" textFill="WHITE">
<font>
<Font name="OCR A Extended" size="18.0" />
</font>
</Button>
</children></HBox>
</children>
</VBox>
</children>
</AnchorPane>

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -1,65 +1,121 @@
package chatapp.Controller; package chatapp.Controller;
import chatapp.Model.*; import chatapp.Model.DataBase;
import chatapp.Model.ListUtilisateurs;
import chatapp.Model.Utilisateur;
import chatapp.Protocol.*; import chatapp.Protocol.*;
import javafx.application.Application; import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* <p> Controller de l'application. C'est par cette méthode que chaque connexion et chaque session sont entamées.
* <br>Les différents attributs sont:
* <br> - actifsUsers: qui est la liste des utilisateurs actifs actuellement et connus par l'application
* <br> - me: qui est l'instance de la classe Utilisateur représentant l'utilisateur se connectant via cette instance de chatapp
* <br> - main: l'application de l'interface graphique qui s'occupe d'instancier chatapp
* <br> - runnerEcouteTCP: instance de runnerEcouteTCP, Thread permettant de recevoir des demandes de clavardage
* <br> - runnerEcouteUDP: instance de runnerEcouteUDP; Thread permettant de communiquer en UDP pour recevoir les demandes de connexion, deconnexion, changements de pseudo et leurs réponses associées
* <br> - connecte: booleen indiquant si l'on est connecté sur le reseau ou non
* <br> - db: instance permettant de se connecter à la base de donnees centralisée
* </p>
*/
public class ChatApp implements PropertyChangeListener { public class ChatApp implements PropertyChangeListener {
/* Liste des utilisateurs actifs */ /* Liste des utilisateurs actifs */
private ListUtilisateurs actifUsers ; private ListUtilisateurs actifUsers ;
/* TRUE si l'utilisateur est externe au reseau FALSE s'il est interne */
private boolean isExterne;
private HttpEchange externeEchange;
/* ChatApp est associe a un utilisateur */ /* ChatApp est associe a un utilisateur */
private Utilisateur me; private Utilisateur me;
/* ChatApp est associe a une application qui le lance et que chatapp doit fermer a la fin */ /* ChatApp est associe a une application qui le lance et que chatapp doit fermer a la fin */
private Application main; private Application main;
/* Instance de ChatApp */
private static ChatApp chatapp = null; private static ChatApp chatapp = null;
/* Gérer les multiples connexions en TCP. */
private RunnerEcouteTCP runnerEcouteTCP; private RunnerEcouteTCP runnerEcouteTCP;
/* Gérer les multiples connexions en UDP. */
private RunnerEcouteUDP runnerEcouteUDP; private RunnerEcouteUDP runnerEcouteUDP;
/* TRUE si l'utilisateur est connecte au reseau FALSE sinon */
private boolean connecte; private boolean connecte;
/* Acces a la base de donnée */
private DataBase db; private DataBase db;
/* Variable stockant les communications grâce aux IDs des utilisateurs */
public ArrayList<String> listeCommunication = new ArrayList<>();
/* Variable stockant le backslash nécessaire pour creer l'adresse du fichier json */
public static String FILE_SEPARATOR = System.getProperty("file.separator");
private JSONObject configJSON;
/**
* <p> Getter : Connecte
* <br> Permet de savoir si l'on est connecté</p>
* @return TRUE si connecté FALSE sinon
*/
public boolean isConnecte() { public boolean isConnecte() {
return connecte; return connecte;
} }
/** /**
* <p>Constructeur de l'application de chat</p> * <p>Constructeur de l'application de chat</p>
*
* @param pseudo Pseudo de l'utilisateur * @param pseudo Pseudo de l'utilisateur
* @param port Port de communication * @param port Port de communication
* @param main L'Application main
*/ */
public ChatApp(String pseudo, Integer port, Application main){ public ChatApp(String pseudo, Integer port, Application main){
this.actifUsers = new ListUtilisateurs() ; this.actifUsers = new ListUtilisateurs() ;
// Recuperer adresse IP de l'utilisateur InetAddress ip = UDPEchange.getCurrentIp(); // Recuperer adresse IP de l'utilisateur
InetAddress ip = null ;
ip = UDPEchange.getCurrentIp();
this.me = new Utilisateur(pseudo,port,ip); this.me = new Utilisateur(pseudo,port,ip);
this.actifUsers.addList(getMe()); this.actifUsers.addList(getMe());
this.main = main; this.main = main;
this.db= DataBase.getInstance();
this.connecte=false; this.connecte=false;
String path = System.getProperty("user.dir")+ FILE_SEPARATOR + "config.json";
System.out.println("Path is : "+path);
JSONParser jsonP = new JSONParser();
try {
this.configJSON = (JSONObject) jsonP.parse(new FileReader(path));
} catch (IOException e) {
System.out.println("Fichier JSON non trouvable");
e.printStackTrace();
} catch (ParseException e) {
System.out.println("Fichier JSON mal formé");
e.printStackTrace();
}
this.externeEchange = new HttpEchange(this);
this.db= DataBase.getInstance(this);
} }
/** /**
* <p>Methode permettant de créer qu'une seule instance de chatapp</p> * <p>Methode permettant de créer qu'une seule instance de chatapp</p>
* @param pseudo le pseudonyme que l'on souhaite donner à l'utilisateur * @param pseudo Le pseudonyme que l'on souhaite donner à l'utilisateur
* @param port le port auquel on souhaite receptionner les requêtees UDP * @param port Le port auquel on souhaite réceptionner les requêtees UDP
* @param main le stage de l'interface graphique qui crée l'instance * @param main Le stage de l'interface graphique qui crée l'instance
* @return une instance de chatapp * @return Une instance de chatapp
*/ */
public static synchronized ChatApp getInstance(String pseudo, Integer port, Application main){ public static synchronized ChatApp getInstance(String pseudo, Integer port, Application main){
if (chatapp == null) { if (chatapp == null) {
@ -69,33 +125,66 @@ public class ChatApp implements PropertyChangeListener {
} }
/** /**
* * <p> Methode permettant de récupérer l'instance de chatapp qui a ete créée au préalable</p>
* @return recupere l'instance de chatapp qui a ete creee au prealable * @return L'instance de chatapp
*/ */
public static ChatApp getInstance(){ public static ChatApp getInstance(){
return chatapp; return chatapp;
} }
/**
/*public void majHistorique2(MessageHorodate mh, String pseudo) { * <p>Methode appelée pour modifier le pseudo et fait appel a la fonction adequate selon que l'on est en interne ou en externe</p>
Historique h = getMapHistorique().get(pseudo); * @param nouveau Nouveau pseudo avec lequel on souhaite se renommer
//h.addMessage(mh); * @return TRUE si la modification du pseudo a réussi, FALSE sinon
getMapHistorique().put(h.getUser2().getPseudo(),h); * @throws IOException
}*/ */
public boolean modifierPseudo(String nouveau) throws IOException{
if(this.isExterne()){
return this.modifierPseudoExterne(nouveau);
}
else{
return modifierPseudoInterne(nouveau);
}
}
/** /**
* <p>Modification du pseudo de l'utilisateur * <p>Modification du pseudo de l'utilisateur en EXTERNE.
* Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</p> * <br>Envoie ses informations utilisateurs et son nouveau pseudo au serveur de présence.</p>
* * @param nouveau Le nouveau pseudo
* @param nouveau correspond au nouveau pseudo * @return False si modiferPseudo a échoué, True sinon
* @return False si modiferPseudo a echoue, True sinon
*/ */
public Boolean modifierPseudo(String nouveau) throws IOException { private boolean modifierPseudoExterne(String nouveau) {
// Message que l'on envoie à tous les utilisateurs actifs boolean reussi = false;
try {
if(externeEchange.sendPost("Pseudo " + nouveau)){
reussi = true ;
this.getMe().setPseudo(nouveau);
db.majPseudo(this.me.getId(),nouveau);
System.out.println("Changement pseudo accepte, nouvelle liste des utilisateurs actifs:");
this.getActifUsers().afficherListeUtilisateurs();
}
else{
System.out.println("Echec changement de pseudo");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return reussi;
}
/**
* <p>Modification du pseudo de l'utilisateur en INTERNE
* <br> Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</p>
* @param nouveau Le Nouveau pseudo
* @return False si modiferPseudo a échoué, True sinon
*/
public Boolean modifierPseudoInterne(String nouveau) throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n"; String broadcastMessage = "Demande Modification Pseudo\n" + this.getMe().toString() + "\n" + nouveau + "\n";
UDPEchange.EnvoiBroadcast(broadcastMessage); UDPEchange.envoiBroadcast(broadcastMessage);
try { try {
Thread.sleep(2000); Thread.sleep(2000);
/* L'utilisateur doit attendre la reponse de tous les utilisateurs connectes /* L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
@ -105,10 +194,10 @@ public class ChatApp implements PropertyChangeListener {
e.printStackTrace(); e.printStackTrace();
} }
if (UDPEchange.getPseudoValide()) { if (UDPEchange.getPseudoValide()) {
System.out.println("Modification pseudo reussie"); System.out.println("Modification pseudo reussi");
//Envoi un msg en broadcast a tout les utilisateurs pour les prevenir de son nouveau pseudo// //Envoi un msg en broadcast a tout les utilisateurs pour les prevenir de son nouveau pseudo//
broadcastMessage = "Modification pseudo reussie\n" + this.getMe().toString() + "\n" + nouveau + "\n"; broadcastMessage = "Modification pseudo reussi\n" + this.getMe().toString() + "\n" + nouveau + "\n";
UDPEchange.EnvoiBroadcast(broadcastMessage); UDPEchange.envoiBroadcast(broadcastMessage);
//-------Change son propre nom d'utilisateur-------// //-------Change son propre nom d'utilisateur-------//
this.getActifUsers().modifierList(this.getMe().getPseudo(), nouveau); this.getActifUsers().modifierList(this.getMe().getPseudo(), nouveau);
this.getMe().setPseudo(nouveau); this.getMe().setPseudo(nouveau);
@ -120,49 +209,66 @@ public class ChatApp implements PropertyChangeListener {
else else
{ {
System.out.println("Echec Modification pseudo"); System.out.println("Echec Modification pseudo");
return false; UDPEchange.setPseudoValide(true);
}
}
/**
* <p>Methode appelee lors de la connexion d'un nouvel utilisateur.
* Il va prevenir les utilisateurs du reseau de son arrivee.</p>
* @return False si Connexion a echoue, True sinon
*/
public Boolean connexion() throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
UDPEchange.EnvoiBroadcast(broadcastMessage);
try {
Thread.sleep(2000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
} catch (InterruptedException e) {
e.printStackTrace();
}
if (UDPEchange.getConnecte()) {
System.out.println("Connexion reussie");
return true;
}
else
{
System.out.println("Connexion echoue");
UDPEchange.setConnecte(true);
return false; return false;
} }
} }
/** /**
* <p>Methode appelee lors de la connexion de l'utilisateur, va prevenir les autres * <p>Méthode permettant d'appeler la fonction de connexion adequate selon que l'on est en externe ou en interne</p>
* utlisateurs du reseau de l'arrivee de l'utilisateur sur celui-ci</p> * @param pseudo Le pseudo avec lequel l'on souhaite se connecter
* @param pseudo le pseudonyme avec lequel l'utilisateur souhaite se connecter * @return True si la connexion a ete autorisée, false sinon
* @return False si Connexion a echoue, True sinon
* @throws IOException * @throws IOException
*/ */
public Boolean connexion(String pseudo) throws IOException { public boolean connexion(String pseudo) throws IOException{
// Message que l'on envoie à tous les utilisateurs actifs if(this.isExterne()){
try {
System.out.println("Demande de connexion distante");
return this.connexionExterne(pseudo);
} catch (InterruptedException e) {
e.printStackTrace();
return false;
}
}
else{
return connexionInterne(pseudo);
}
}
/**
* <p>Méthode appelée lors de la connexion de l'utilisateur en EXTERNE.
* <br> Va prévenir le serveur de présence de l'arrivée de l'utilisateur </p>
* @param pseudo Le pseudonyme avec lequel l'utilisateur souhaite se connecter
* @return False si Connexion a échoué, True sinon
* @throws IOException
*/
private boolean connexionExterne(String pseudo) throws IOException, InterruptedException{
this.me.setPseudo(pseudo);
if(externeEchange.sendPost("Connexion")){
this.connecte=true;
this.db.ajoutUtilisateurs(this.me.getId(),pseudo);
this.db.majUtilisateursActifs(true,this.me.getId());
return true;
}
else{
return false;
}
}
/**
* <p>Méthode appelée lors de la connexion de l'utilisateur en INTERNE,
* <br> Va prevenir les autres utlisateurs du réseau de l'arrivée de l'utilisateur sur celui-ci</p>
* @param pseudo Le pseudonyme avec lequel l'utilisateur souhaite se connecter
* @return False si Connexion a échoué, True sinon
* @throws IOException
*/
public Boolean connexionInterne(String pseudo) throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
this.me.setPseudo(pseudo); this.me.setPseudo(pseudo);
String broadcastMessage = "Connexion\n" + this.getMe().toString() ; String broadcastMessage = "Connexion\n" + this.getMe().toString() ;
UDPEchange.EnvoiBroadcast(broadcastMessage); UDPEchange.envoiBroadcast(broadcastMessage);
try { try {
Thread.sleep(2000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes Thread.sleep(2000); // L'utilisateur doit attendre la reponse de tous les utilisateurs connectes
} catch (InterruptedException e) { } catch (InterruptedException e) {
@ -184,8 +290,8 @@ public class ChatApp implements PropertyChangeListener {
} }
/** /**
* <p>Lance un thread pour ecouter les requetes TCP * <p>Lance un thread pour écouter les requêtes TCP
* Informe le pcs que chatapp ecoute les notifications qu'il envoie</p> * <br> Informe le pcs que chatapp écoute les notifications qu'il envoie</p>
*/ */
public void activerEcouteTCP(){ public void activerEcouteTCP(){
this.runnerEcouteTCP = new RunnerEcouteTCP(this); this.runnerEcouteTCP = new RunnerEcouteTCP(this);
@ -193,8 +299,8 @@ public class ChatApp implements PropertyChangeListener {
} }
/** /**
* <p>Demarre une session de clavardage avec l'utilisateur dont le pseudo est entre en parametre</p> * <p>Démarre une session de clavardage avec l'utilisateur dont le pseudo est entré en parametre</p>
* @param pseudo le pseudo de l'utilisateur avec lequel on souhaite communiquer * @param pseudo Le pseudo de l'utilisateur avec lequel on souhaite communiquer
*/ */
public void demarrerSession(String pseudo){ public void demarrerSession(String pseudo){
Utilisateur u2 = this.actifUsers.getPseudoList(pseudo); Utilisateur u2 = this.actifUsers.getPseudoList(pseudo);
@ -203,21 +309,67 @@ public class ChatApp implements PropertyChangeListener {
} }
/** /**
* <p>Lance le thread pour receptionner les requetes UDP</p> * <p>Lance le thread pour réceptionner les requetes UDP</p>
*/ */
public void activerEcouteUDP(){ public void activerEcouteUDP(){
this.runnerEcouteUDP = new RunnerEcouteUDP(this); this.runnerEcouteUDP = new RunnerEcouteUDP(this);
this.runnerEcouteUDP.start(); this.runnerEcouteUDP.start();
} }
/** /**
* <p>Methode appelee lors de la deconnexion de l'utilisateur. * <p>Méthode appelée lors de la connexion de l'utilisateur.
* Il va prevenir les utilisateurs du reseau de son depart.</p> * <br>La methode va appeler la fonction adequate selon que l'on est en interne ou en externe</p>
* * @throws IOException
*/ */
public void deconnexion() throws IOException{ public void deconnexion() throws IOException{
// Message que l'on envoie à tous les utilisateurs actifs if(this.isExterne()){
this.deconnexionExterne();
}
else{
deconnexionInterne();
}
}
/**
* <p>Methode appelee lors de la deconnexion en EXTERNE de l'utilisateur.
* <br>Il va prévenir le serveur de présence de son depart.</p>
*
*/
private void deconnexionExterne() throws IOException{
System.out.println("Deconnexion lancee");
boolean deco = false;
try {
deco = externeEchange.sendPost("Deconnexion");
} catch (InterruptedException e) {
e.printStackTrace();
}
if(deco){
System.out.print("Deconnexion reussie");
}
else{
System.out.println("Deconnexion echouee");
}
db.majUtilisateursActifs(false,this.me.getId());
this.connecte=false;
try {
main.stop();
} catch (Exception e) {
e.printStackTrace();
}
Platform.exit();
System.exit(0);
}
/**
* <p>Methode appelee lors de la deconnexion en INTERNE de l'utilisateur.
* <br>Il va prevenir les utilisateurs du reseau de son depart.</p>
* @throws IOException
*/
public void deconnexionInterne() throws IOException {
// Message que l'on envoie à tous les utilisateurs actifs
String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ; String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ;
UDPEchange.EnvoiBroadcast(broadcastMessage); UDPEchange.envoiBroadcast(broadcastMessage);
db.majUtilisateursActifs(false,this.me.getId()); db.majUtilisateursActifs(false,this.me.getId());
this.connecte=false; this.connecte=false;
try { try {
@ -230,58 +382,25 @@ public class ChatApp implements PropertyChangeListener {
} }
/** /**
* Getter * Getter : Chatapp
* @return Utilisateur associee a ChatApp * @return Utilisateur associée a ChatApp
*/ */
public Utilisateur getMe() { public Utilisateur getMe() {
return me; return me;
} }
/** /**
* Getter * Getter : actifUsers (Liste des utilisateurs actifs)
* @return Liste des utilisateurs actifs associee a ChatApp * @return Liste des utilisateurs actifs associée a ChatApp
*/ */
public ListUtilisateurs getActifUsers() { public ListUtilisateurs getActifUsers() {
return actifUsers; return actifUsers;
} }
/*public static void main (String[] args) throws IOException {
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1]),this.app) ;
System.out.println("On lance le chatapp");
ExecutorService execUDP = Executors.newFixedThreadPool(1000);
execUDP.submit(new RunnerEcouteUDP(app));
try {
app.connexion();
} catch (IOException e) {
e.printStackTrace();
}
ExecutorService execTCP = Executors.newFixedThreadPool(1000);
System.out.println("On lance l'écoute TCP de chatapp");
execTCP.submit(new RunnerEcouteTCP(app));
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(app.getMe().getPseudo().equals("Marvel")) {
app.getHist("Doudou").afficher10derniers();
System.out.println("Tentative de connexion avec Doudou");
TCPEchange.demarrerSession(app, app.actifUsers.getPseudoList("Doudou"));
}
}*/
/** /**
* <p>Handler des differents evenements que chatapp ecoute</p> * <p>Handler des différents évenements que chatapp écoute</p>
* @param evt l'evenement qui a ete indique par le pcs * @param evt L'évenement qui a ete indiqué par le pcs
*/ */
@Override @Override
public void propertyChange(PropertyChangeEvent evt) { public void propertyChange(PropertyChangeEvent evt) {
@ -294,16 +413,62 @@ public class ChatApp implements PropertyChangeListener {
} }
/** /**
* <p>Permet de recuperer stage de l'interface graphique qui a cree l'instance</p> * <p> Getter : Main
* @return le stage de l'interface graphique qui a cree l'instance * Permet de récuperer stage de l'interface graphique qui a crée l'instance
* </p>
* @return Le stage de l'interface graphique qui a crée l'instance
*/ */
public Application getMain() { public Application getMain() {
return main; return main;
} }
/** /**
* <p>Permet de recuperer la base de donnee associee</p> * <p> Getter : BDD
* @return la base de donnee associee * <br> Permet de récuperer la base de donnee associée
* </p>
* @return La base de donnee associée
*/ */
public DataBase getDb(){return this.db;} public DataBase getDb(){return this.db;}
/**
* <p> Getter : Externe
* <br> Permet de savoir si on est en externe ou en interne</p>
* @return TRUE si Externe FALSE sinon
*/
public boolean isExterne() {
return isExterne;
}
/**
* <p> Setter : Externe
* <br> Permet de définir si on est un utilisateur externe ou non</p>
* @param externe TRUE si Externe FALSE sinon
*/
public void setExterne(boolean externe) {
isExterne = externe;
}
/**
* <p>
* Un utilisateur ne peut pas ouvrir plusieurs sessions de clavardage avec le même utilisateur.
* <br> Cette methode compare les communications en cours pour retourner une liste d'utilisateurs avec
* lesquels les communications sont possibles
* </p>
* @return Une liste d'utilisateurs avec lesquels il peut communiquer
*/
public ArrayList<Utilisateur> createListeCommunicationPossible(){
ArrayList<Utilisateur> communication = new ArrayList<>();
for ( Utilisateur element : this.actifUsers.getActifUsers()){
if ( ! this.listeCommunication.contains(element.getId())){
communication.add(element);
}
}
return communication;
}
public JSONObject getConfigJSON() {
return configJSON;
}
} }

View file

@ -0,0 +1,58 @@
@startuml
title __CONTROLLER's Class Diagram__\n
namespace chatapp {
namespace Controller {
class chatapp.Controller.ChatApp {
+ listeCommunication : ArrayList<String>
{static} - chatapp : ChatApp
- connecte : boolean
- isExterne : boolean
- main : Application
+ ChatApp()
+ activerEcouteTCP()
+ activerEcouteUDP()
+ connexion()
+ connexionInterne()
+ createListeCommunicationPossible()
+ deconnexion()
+ deconnexionInterne()
+ demarrerSession()
+ getActifUsers()
+ getDb()
{static} + getInstance()
{static} + getInstance()
+ getMain()
+ getMe()
+ isConnecte()
+ isExterne()
+ modifierPseudo()
+ modifierPseudoInterne()
+ propertyChange()
+ setExterne()
- connexionExterne()
- deconnexionExterne()
- modifierPseudoExterne()
}
}
}
chatapp.Controller.ChatApp .up.|> java.beans.PropertyChangeListener
chatapp.Controller.ChatApp o-- chatapp.Model.ListUtilisateurs : actifUsers
chatapp.Controller.ChatApp o-- chatapp.Model.DataBase : db
chatapp.Controller.ChatApp o-- chatapp.Protocol.HttpEchange : externeEchange
chatapp.Controller.ChatApp o-- chatapp.Model.Utilisateur : me
chatapp.Controller.ChatApp o-- chatapp.Protocol.RunnerEcouteTCP : runnerEcouteTCP
chatapp.Controller.ChatApp o-- chatapp.Protocol.RunnerEcouteUDP : runnerEcouteUDP
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

View file

@ -4,14 +4,16 @@ import chatapp.Controller.ChatApp;
import javafx.application.Application; import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Screen;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.io.IOException; /**
* Cette classe extends Application.
* <br> Elle va permettre de faire le lien avec JavaFX.
*/
public class Main extends Application { public class Main extends Application {
/* Instance de ChatApp */
ChatApp chatapp; ChatApp chatapp;
/** /**
@ -21,7 +23,6 @@ public class Main extends Application {
*/ */
@Override @Override
public void start(Stage primaryStage) throws Exception { public void start(Stage primaryStage) throws Exception {
Rectangle2D tailleEcran = Screen.getPrimary().getBounds();
this.chatapp = ChatApp.getInstance("Null",1234,this); this.chatapp = ChatApp.getInstance("Null",1234,this);
FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/ConnexionScreen.fxml")); FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/ConnexionScreen.fxml"));
Scene scene1 = new Scene(fichier.load(),600,400); Scene scene1 = new Scene(fichier.load(),600,400);
@ -29,15 +30,10 @@ public class Main extends Application {
primaryStage.setTitle("ChatApp"); primaryStage.setTitle("ChatApp");
primaryStage.setMinWidth(600); primaryStage.setMinWidth(600);
primaryStage.setMinHeight(400); primaryStage.setMinHeight(400);
//primaryStage.setMaxWidth(600);
//primaryStage.setMaxHeight(400);
/*primaryStage.setMaxWidth(tailleEcran.getWidth());
primaryStage.setMaxHeight(tailleEcran.getHeight());*/
primaryStage.show(); primaryStage.show();
primaryStage.centerOnScreen(); primaryStage.centerOnScreen();
chatapp.activerEcouteTCP(); chatapp.activerEcouteTCP();
chatapp.activerEcouteUDP(); chatapp.activerEcouteUDP();
} }
/** /**
@ -48,8 +44,7 @@ public class Main extends Application {
public void stop() throws Exception { public void stop() throws Exception {
if(chatapp.isConnecte()){ if(chatapp.isConnecte()){
chatapp.deconnexion(); chatapp.deconnexion();
} } else {
else {
super.stop(); super.stop();
Platform.exit(); Platform.exit();
System.exit(0); System.exit(0);

View file

@ -1,46 +1,60 @@
package chatapp.Model; package chatapp.Model;
import chatapp.Controller.ChatApp;
import java.sql.*; import java.sql.*;
/** /**
* <p> * <p>
* Classe representant la Base de données. * Classe représentant la Base de données.
* Celle-ci stocke la liste des utilisateurs ainsi que les échanges entre eux * Celle-ci stocke la liste des utilisateurs ainsi que les échanges entre eux
* </p> * </p>
* Format de la table Utilisateurs
* <br> +--------+-------------+---------+---------------------+
* <br> | ID | Pseudo | Actif | Date d'inscription |
* <br> +--------+-------------+---------+---------------------+
* <br> - Id : Correspond à l'ID de l'utilisateur
* <br> - Pseudo : Dernier Pseudo utilisé pour cet ID, va etre remplacé par le pseudo actuel avec majPseudo
* <br> - Date d'inscription : Comme son nom l'indique le jour de l'inscription de cet utilisateur
* <br> - Actif : Boolean indiquant si l'utilisateur est actif
* <br>
* <br> Chaque communication entres utilisateurs sera stockée dans une table de la forme
* <br> +--------------+--------+---------+--------------+
* <br> | Destinataire | Source | Message | Date d'envoi |
* <br> +--------------+--------+---------+--------------+
* <br> - Destinataire : Id du destinataire du message
* <br> - Source : Id de celui qui envoie le message
* <br> - Message : Msg envoyé
* <br> - Date d'envoi : Date a laquelle Source a envoyé le message à destinataire
*/ */
public class DataBase { public class DataBase {
private final String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ;
/* URL pour accéder à la BDD */
private String dBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_006?" ;
/* Connection avec la BDD */
private Connection connection = null; private Connection connection = null;
private final String login = "tp_servlet_006";
private final String pswd = "baePh9ei";
/* Login pour se connecter à la BDD */
private String login = "tp_servlet_006";
/*Format de la table Utilisateurs /* Mdp pour se connecter à la BDD */
+--------+-------------+---------+---------------------+ private String pswd = "baePh9ei";
| ID | Pseudo | Actif | Date d'inscription |
+--------+-------------+---------+---------------------+
Id correspond à l'addresse IP
Pseudo : Dernier Pseudo utilisé pour cette adresse IP, va etre remplacé par le pseudo actuel avec majPseudo
Date d'inscription comme son nom l'indique le jour de l'inscription de cette utilisateur
Actif est un boolean indicant si l'utilisateur est actif
Chaque communication entres utilisateurs sera stocké dans une table de la forme private ChatApp chatapp;
+------------------+-----------+---------------+---------------+
| Destinataire | Source | Message | Date d'envoi |
+--------+---------------------+---------------+---------------+
Destinataire -> Id du destinataire du message
Source -> Id de celui qui envoie le message
Message -> Msg envoye
Date d'envoie -> Date a laquelle Source a envoye le message a destinataire
*/
private static final DataBase instance = null; // Singleton /* Singleton */
private static final DataBase instance = null;
/** /**
* Constructeur de la database * Constructeur de la database
* On installe le driver et on établit la connection. * <br> On installe le driver et on établit la connection.
*/ */
public DataBase() { public DataBase(ChatApp chatapp) {
this.chatapp = chatapp;
this.login = (String) chatapp.getConfigJSON().get("BaseDeDonnesLogin");
this.pswd = (String) chatapp.getConfigJSON().get("BaseDeDonneesMDP");
this.dBurl = (String) chatapp.getConfigJSON().get("BaseDeDonnesURL");
try { try {
//Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux //Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux
Class.forName("com.mysql.cj.jdbc.Driver"); Class.forName("com.mysql.cj.jdbc.Driver");
@ -54,8 +68,11 @@ public class DataBase {
// Nabil : DECOMMENTER CETTE LIGNE // Nabil : DECOMMENTER CETTE LIGNE
//this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234"); //this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234");
// Auriane : DECOMMENTER CETTE LIGNE // Auriane : DECOMMENTER CETTE LIGNE
this.connection = DriverManager.getConnection("jdbc:mysql://localhost:8889/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "root"); //this.connection = DriverManager.getConnection("jdbc:mysql://localhost:8889/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "root");
//this.connection = DriverManager.getConnection(this.DBurl,login,pswd); System.out.println(this.dBurl);
System.out.println(this.pswd);
System.out.println(this.login);
this.connection = DriverManager.getConnection(this.dBurl,this.login,this.pswd);
System.out.println("Connexion Etablie"); System.out.println("Connexion Etablie");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -65,39 +82,39 @@ public class DataBase {
/** /**
* Méthode permettant de renvoyer une instance de la classe DataBase * Méthode permettant de renvoyer une instance de la classe DataBase
* @return Retourne l'instance du singleton DataBase. * @return L'instance du singleton DataBase.
*/ */
public static DataBase getInstance() { public static DataBase getInstance(ChatApp chatapp) {
synchronized (DataBase.class) { synchronized (DataBase.class) {
return new DataBase(); return new DataBase(chatapp);
} }
} }
/** /**
* Methode permettant de creer une table pour stocker les messages entre deux utilisateurs * Methode permettant de créer une table pour stocker les messages entre deux utilisateurs
* @param ID1 Id du premier utilisateur * @param iD1 Id du premier utilisateur
* @param ID2 Id du second utilisateur * @param iD2 Id du second utilisateur
*/ */
public void CreationTableHistorique(String ID1 , String ID2) { public void creationTableHistorique(String iD1 , String iD2) {
// Pour eviter d'avoir les tables en double // Pour eviter d'avoir les tables en double
String petit; String petit;
String grand; String grand;
int comparaison = ID1.compareTo(ID2); int comparaison = iD1.compareTo(iD2);
if (comparaison < 0) { if (comparaison < 0) {
petit = ID1; petit = iD1;
grand = ID2 ; grand = iD2 ;
} }
else { else {
petit = ID2; petit = iD2;
grand = ID1 ; grand = iD1 ;
} }
String nomTable = "Chat_" + petit + "_" + grand ; String nomTable = "Chat_" + petit + "_" + grand ;
String Requete = "CREATE TABLE IF NOT EXISTS`" + nomTable +"` (\n" + "`Destinataire` varchar(100) NOT NULL,\n" + " `Source` varchar(100) NOT NULL,\n" + " `Envoi` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n" + " `Message` text NOT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;"; String requete = "CREATE TABLE IF NOT EXISTS`" + nomTable +"` (\n" + "`Destinataire` varchar(100) NOT NULL,\n" + " `Source` varchar(100) NOT NULL,\n" + " `Envoi` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n" + " `Message` text NOT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;";
System.out.println(Requete); System.out.println(requete);
PreparedStatement Ps = null ; PreparedStatement ps = null ;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(Requete); ps = connection.prepareStatement(requete);
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -105,8 +122,8 @@ public class DataBase {
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
assert Ps != null; assert ps != null;
Ps.executeUpdate(); ps.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println(" Echec executeUpdate "); System.out.println(" Echec executeUpdate ");
@ -114,18 +131,18 @@ public class DataBase {
} }
/** /**
* Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee * Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee
* @param ID Id de l'utilisateur qui vient de changer de pseudo * @param iD Id de l'utilisateur qui vient de changer de pseudo
* @param Pseudo Nouveau Pseudo de l'utilisateur * @param pseudo Nouveau Pseudo de l'utilisateur
*/ */
public void majPseudo( String ID , String Pseudo) { public void majPseudo( String iD , String pseudo) {
String requete= "UPDATE `Utilisateurs` SET `Pseudo`=? WHERE id=?"; String requete= "UPDATE `Utilisateurs` SET `Pseudo`=? WHERE id=?";
PreparedStatement Ps = null ; PreparedStatement ps = null ;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); ps = connection.prepareStatement(requete);
Ps.setString(1, Pseudo); // ? n°1 devient la valeur contenu dans Pseudo ps.setString(1, pseudo); // ? n°1 devient la valeur contenu dans Pseudo
Ps.setString(2, ID); // ? n°2 devient la valeur contenu dans ID ps.setString(2, iD); // ? n°2 devient la valeur contenu dans ID
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -133,8 +150,8 @@ public class DataBase {
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
assert Ps != null; assert ps != null;
Ps.executeUpdate(); ps.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println(" Echec executeUpdate "); System.out.println(" Echec executeUpdate ");
@ -144,32 +161,32 @@ public class DataBase {
/** /**
* Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee * Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnée
* @param IDdest Id de l'utilisateur Destinataire du message * @param iDdest Id de l'utilisateur Destinataire du message
* @param IDsrc Id de celui qui envoi le message * @param iDsrc Id de celui qui envoi le message
* @param Msg Message envoye entre les deux utilisateurs * @param msg Message envoye entre les deux utilisateurs
*/ */
public void ajoutHistorique(String IDdest , String IDsrc, String Msg) { public void ajoutHistorique(String iDdest , String iDsrc, String msg) {
String petit; String petit;
String grand; String grand;
int comparaison = IDdest.compareTo(IDsrc); int comparaison = iDdest.compareTo(iDsrc);
if (comparaison < 0) { if (comparaison < 0) {
petit = IDdest; petit = iDdest;
grand = IDsrc ; grand = iDsrc ;
} }
else { else {
petit = IDsrc; petit = iDsrc;
grand = IDdest ; grand = iDdest ;
} }
String nomTable = "Chat_" + petit + "_" + grand ; String nomTable = "Chat_" + petit + "_" + grand ;
String requete= "INSERT INTO `"+ nomTable +"`(`Destinataire`, `Source`, `Message`) VALUES ( ? , ? , ?)"; String requete= "INSERT INTO `"+ nomTable +"`(`Destinataire`, `Source`, `Message`) VALUES ( ? , ? , ?)";
PreparedStatement Ps = null ; PreparedStatement ps = null ;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); ps = connection.prepareStatement(requete);
Ps.setString(1, IDdest); // ? n°1 devient la valeur contenu dans IDdest ps.setString(1, iDdest); // ? n°1 devient la valeur contenu dans IDdest
Ps.setString(2, IDsrc); // ? n°2 devient la valeur contenu dans IDsrc ps.setString(2, iDsrc); // ? n°2 devient la valeur contenu dans IDsrc
Ps.setString(3, Msg); // ? n°3 devient la valeur contenu dans Msg ps.setString(3, msg); // ? n°3 devient la valeur contenu dans Msg
//La date de l'envoi n'a pas besoin d'être renseigné, elle est automatique //La date de l'envoi n'a pas besoin d'être renseigné, elle est automatique
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
@ -178,8 +195,8 @@ public class DataBase {
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
assert Ps != null; assert ps != null;
Ps.executeUpdate(); ps.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println(" Echec executeUpdate "); System.out.println(" Echec executeUpdate ");
@ -188,24 +205,24 @@ public class DataBase {
/** /**
* Methode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas deja * Méthode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas déjà
* @param ID Id de l'utilisateur que l'on veut rajouter * @param iD Id de l'utilisateur que l'on veut rajouter
* @param Pseudo pseudo actuelle de l'utilisateur * @param pseudo Pseudo actuelle de l'utilisateur
*/ */
public void ajoutUtilisateurs(String ID , String Pseudo ) { public void ajoutUtilisateurs(String iD , String pseudo ) {
if(this.idExiste(ID)){ if(this.idExiste(iD)){
this.majPseudo(ID, Pseudo); this.majPseudo(iD, pseudo);
} }
else { else {
// L'utilisateur n'existe pas , on va le rajouter. // L'utilisateur n'existe pas , on va le rajouter.
System.out.println("On rajoute l'utilisateur " + Pseudo); System.out.println("On rajoute l'utilisateur " + pseudo);
String requete = "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')"; String requete = "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')";
PreparedStatement Ps = null; PreparedStatement ps = null;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); ps = connection.prepareStatement(requete);
Ps.setString(1, ID); // ? n°1 devient la valeur contenu dans ID ps.setString(1, iD); // ? n°1 devient la valeur contenu dans ID
Ps.setString(2, Pseudo); // ? n°2 devient la valeur contenu dans Pseudo ps.setString(2, pseudo); // ? n°2 devient la valeur contenu dans Pseudo
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -213,8 +230,8 @@ public class DataBase {
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
assert Ps != null; assert ps != null;
Ps.executeUpdate(); ps.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println(" Echec executeUpdate "); System.out.println(" Echec executeUpdate ");
@ -223,9 +240,9 @@ public class DataBase {
} }
/** /**
* Methode permettant de mettre a jour les utilisateurs actuellement actif * Méthode permettant de mettre a jour les utilisateurs actuellement actif
* @param Id Id de l'utilisateur qui vient de se connecter ou deconnecter * @param Id Id de l'utilisateur qui vient de se connecter ou déconnecter
* @param Connecte Boolean true si il est connecte , false sinon * @param Connecte Boolean true si il est connecté , false sinon
*/ */
public void majUtilisateursActifs(Boolean Connecte, String Id) { public void majUtilisateursActifs(Boolean Connecte, String Id) {
String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?"; String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?";
@ -252,24 +269,24 @@ public class DataBase {
} }
/** /**
* Methode permettant de recuperer les N derniers messages envoyés entre 2 utilisateurs * Méthode permettant de récupérer les N derniers messages envoyés entre 2 utilisateurs
* @param ID Utilisateur associé a ChatApp * @param iD Utilisateur associé a ChatApp
* @param IDdestinataire Celui avec qui correspond ID * @param iDdestinataire Celui avec qui correspond ID
* @param N le nombre de messages souhaités * @param n Le nombre de messages souhaités
* @return Les N derniers Messages * @return Les N derniers Messages
*/ */
public String recupNMsg(String ID, String IDdestinataire, int N) { public String recupNMsg(String iD, String iDdestinataire, int n) {
StringBuilder Msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
String petit; String petit;
String grand; String grand;
int comparaison = ID.compareTo(IDdestinataire); int comparaison = iD.compareTo(iDdestinataire);
if (comparaison < 0) { if (comparaison < 0) {
petit = ID; petit = iD;
grand = IDdestinataire; grand = iDdestinataire;
} }
else { else {
petit = IDdestinataire; petit = iDdestinataire;
grand = ID ; grand = iD ;
} }
String nomTable = "Chat_" + petit + "_" + grand ; String nomTable = "Chat_" + petit + "_" + grand ;
String requete = "SELECT * FROM `"+ nomTable +"`"; String requete = "SELECT * FROM `"+ nomTable +"`";
@ -286,23 +303,23 @@ public class DataBase {
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
Integer Taille = tailleBDD(nomTable); Integer taille = tailleBDD(nomTable);
if(Taille < N ){ if(taille < n ){
N = Taille ; n = taille ;
} }
for(int i = 0 ; i < N; i++){ for(int i = 0 ; i < n; i++){
try { try {
assert rs != null; assert rs != null;
if( rs.next()){ if( rs.next()){
String IDSource = rs.getString("Source"); String iDSource = rs.getString("Source");
String Envoi = rs.getTimestamp("Envoi").toString(); String envoi = rs.getTimestamp("Envoi").toString();
String Message = rs.getString("Message"); String message = rs.getString("Message");
if (IDSource.equals(ID)) Msg.append("Moi (").append(Envoi).append(") : ").append(Message); if (iDSource.equals(iD)) msg.append("Moi (").append(envoi).append(") : ").append(message);
else { else {
String PseudoSource = getPseudo(IDSource) ; String pseudoSource = getPseudo(iDSource) ;
Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message); msg.append(pseudoSource).append(" (").append(envoi).append(") : ").append(message);
} }
Msg.append('\n'); msg.append('\n');
} }
// MSG de la forme : // MSG de la forme :
// Source (Date) : Texte // Source (Date) : Texte
@ -310,16 +327,16 @@ public class DataBase {
throwables.printStackTrace(); throwables.printStackTrace();
} }
} }
return Msg.toString(); return msg.toString();
} }
/** /**
* Methode permettant de recuperer le pseudo actuel d'un utilisateur en fonction de son ID * Méthode permettant de récupérer le pseudo actuel d'un utilisateur en fonction de son ID
* @param idSource Id de l'utilsateur dont on veut connaitre le pseudo * @param idSource Id de l'utilsateur dont on veut connaitre le pseudo
* @return Pseudo * @return Pseudo actuel
*/ */
private String getPseudo(String idSource) { private String getPseudo(String idSource) {
String Pseudo = "" ; String pseudo = "" ;
String requete= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + idSource + "'"; String requete= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + idSource + "'";
Statement stmt = null; Statement stmt = null;
ResultSet rs = null ; ResultSet rs = null ;
@ -337,34 +354,34 @@ public class DataBase {
try { try {
assert rs != null; assert rs != null;
if (rs.next()){ if (rs.next()){
Pseudo = rs.getString("Pseudo") ; pseudo = rs.getString("Pseudo") ;
} }
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
return Pseudo ; return pseudo ;
} }
/** /**
* Methode permettant de recuperer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs * Méthode permettant de récupérer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs
* @param ID Utilisateur associé a ChatApp * @param iD Utilisateur associé a ChatApp
* @param IDdestinataire Celui avec qui correspond ID * @param iDdestinataire Celui avec qui correspond ID
* @param deb On veut les messages à partir de l'indice deb * @param deb On veut les messages à partir de l'indice deb
* @param fin On veut les messages jusqu'a l'indice fin * @param fin On veut les messages jusqu'a l'indice fin
* @return Les messages d'une plage de donnée [deb,fin] * @return Les messages d'une plage de donnée [deb,fin]
*/ */
public String recupMsg(String ID, String IDdestinataire, int deb , int fin) { public String recupMsg(String iD, String iDdestinataire, int deb , int fin) {
StringBuilder Msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
String petit; String petit;
String grand; String grand;
int comparaison = ID.compareTo(IDdestinataire); int comparaison = iD.compareTo(iDdestinataire);
if (comparaison < 0) { if (comparaison < 0) {
petit = ID; petit = iD;
grand = IDdestinataire; grand = iDdestinataire;
} }
else { else {
petit = IDdestinataire; petit = iDdestinataire;
grand = ID ; grand = iD ;
} }
String nomTable = "Chat_" + petit + "_" + grand ; String nomTable = "Chat_" + petit + "_" + grand ;
String requete = "SELECT * FROM `"+ nomTable+"`"; String requete = "SELECT * FROM `"+ nomTable+"`";
@ -381,25 +398,25 @@ public class DataBase {
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
Integer Taille = tailleBDD(nomTable); Integer taille = tailleBDD(nomTable);
if(Taille < fin ){ if(taille < fin ){
fin = Taille ; fin = taille ;
} }
for(int i = 0 ; i < fin; i++){ for(int i = 0 ; i < fin; i++){
try { try {
assert rs != null; assert rs != null;
if( rs.next()){ if( rs.next()){
String IDSource = rs.getString("Source"); String iDSource = rs.getString("Source");
String Envoi = rs.getTimestamp("Envoi").toString(); String envoi = rs.getTimestamp("Envoi").toString();
String Message = rs.getString("Message"); String message = rs.getString("Message");
if (i >= deb) { if (i >= deb) {
if (IDSource.equals(ID)) { if (iDSource.equals(iD)) {
Msg.append("Moi (").append(Envoi).append(") : ").append(Message); msg.append("Moi (").append(envoi).append(") : ").append(message);
} else { } else {
String PseudoSource = getPseudo(IDSource); String PseudoSource = getPseudo(iDSource);
Msg.append(PseudoSource).append(" (").append(Envoi).append(") : ").append(Message); msg.append(PseudoSource).append(" (").append(envoi).append(") : ").append(message);
} }
Msg.append('\n'); msg.append('\n');
} }
} }
} catch (SQLException throwables) { } catch (SQLException throwables) {
@ -407,16 +424,16 @@ public class DataBase {
} }
} }
return Msg.toString(); return msg.toString();
} }
/** /**
* Cette méthode sert à recuperer la taille d'un base de donnée * Cette méthode sert à récupérer la taille d'un base de donnée
* @param nomTable Nom de la table de donnée dont on veut récuperer le nom * @param nomTable Nom de la table de donnée dont on veut récuperer le nom
* @return Taille de la BDD * @return Taille de la BDD
*/ */
public Integer tailleBDD(String nomTable) { public Integer tailleBDD(String nomTable) {
Integer Taille = 0 ; Integer taille = 0 ;
String requete = "SELECT * FROM `"+nomTable+ "`"; String requete = "SELECT * FROM `"+nomTable+ "`";
Statement stmt = null; Statement stmt = null;
ResultSet rs = null ; ResultSet rs = null ;
@ -438,20 +455,20 @@ public class DataBase {
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
Taille++; // on incremente Taille pour chaque solution trouvée taille++; // on incremente Taille pour chaque solution trouvée
} }
return Taille; return taille;
} }
/** /**
* Methode permettant de savoir si un utilisateur existe dans la base de donnée 'Utilisateurs' * Methode permettant de savoir si un utilisateur existe dans la base de donnée 'Utilisateurs'
* @param ID On recherche l'utilisateur dont l'ID est ID * @param iD On recherche l'utilisateur dont l'ID est ID
* @return True si l'utilisateur existe , False sinon * @return True si l'utilisateur existe , False sinon
*/ */
public boolean idExiste(String ID){ public boolean idExiste(String iD){
boolean existe = false ; boolean existe = false ;
// Verification que l'utilisateur n'existe pas // Verification que l'utilisateur n'existe pas
String requete = "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'"; String requete = "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + iD +"'";
Statement stmt; Statement stmt;
ResultSet rs = null ; ResultSet rs = null ;
try { try {
@ -460,22 +477,34 @@ public class DataBase {
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
try {
if(rs.next()){
existe = (!rs.equals(null)); existe = (!rs.equals(null));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return existe; return existe;
} }
public String getNomTable(Utilisateur U1, Utilisateur U2){ /**
* Méthode permettant de récupérer le nom de la table sont stockés les messages de 2 utilisateurs.
* @param u1 Un des 2 utilisateurs
* @param u2 Le second utilisateur
* @return Le nom de la table des historiques
*/
public String getNomTable(Utilisateur u1, Utilisateur u2){
String petit; String petit;
String grand; String grand;
int comparaison; int comparaison;
comparaison = U1.getId().compareTo(U2.getId()); comparaison = u1.getId().compareTo(u2.getId());
if (comparaison < 0) { if (comparaison < 0) {
petit = U1.getId(); petit = u1.getId();
grand = U2.getId(); grand = u2.getId();
} }
else { else {
petit = U2.getId() ; petit = u2.getId() ;
grand = U1.getId() ; grand = u1.getId() ;
} }
return "Chat_" + petit + "_" + grand ; return "Chat_" + petit + "_" + grand ;
} }

View file

@ -1,16 +1,17 @@
package chatapp.Model; package chatapp.Model;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* <p> * <p>
* Classe representant La liste des utilisateurs actifs, stockée localement * Classe représentant la liste des utilisateurs actifs, stockée localement.
* </p> * </p>
*/ */
public class ListUtilisateurs { public class ListUtilisateurs {
// On conserve dans cette liste tout les utilisateurs actuellement actifs /* On conserve dans cette liste tout les utilisateurs actuellement actifs */
private ArrayList<Utilisateur> actifUsers ; private ArrayList<Utilisateur> actifUsers ;
/** /**
@ -22,17 +23,18 @@ public class ListUtilisateurs {
/** /**
* Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers' * Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
* @param u on va rajouter cet utilisateur dans la liste * @param u On va rajouter cet utilisateur dans la liste
*/ */
public void addList(Utilisateur u) { public synchronized void addList(Utilisateur u) {
if((verifierUnicite(u.getPseudo()))) { if (! this.appartient(u)){
this.actifUsers.add(u); this.actifUsers.add(u);
} }
} }
/** /**
* Recuperer un utilisateur a partir de son pseudo * Récupérer un utilisateur à partir de son pseudo.
* @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver * @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
* @return L'utilisateur associé à ce pseudo
*/ */
public Utilisateur getPseudoList(String pseudo) { public Utilisateur getPseudoList(String pseudo) {
for(Utilisateur elem: this.actifUsers) for(Utilisateur elem: this.actifUsers)
@ -45,8 +47,10 @@ public class ListUtilisateurs {
} }
/** /**
* Recuperer un utilisateur a partir de son addresse IP * Récupérer un utilisateur à partir de son addresse IP
* @param ip @IP de l'utilisateur que l'on souhaite retrouver * @param ip Adresse IP de l'utilisateur que l'on souhaite retrouver
* @return L'utilisateur associé à l'adresse IP
* @throws Exception No such user with this IP address
*/ */
public Utilisateur getIPList(InetAddress ip) throws Exception { public Utilisateur getIPList(InetAddress ip) throws Exception {
for(Utilisateur elem: this.actifUsers) for(Utilisateur elem: this.actifUsers)
@ -59,10 +63,26 @@ public class ListUtilisateurs {
} }
/** /**
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur * Récupérer un utilisateur à partir de son ID
* @param u on va supprimer cet utilisateur dans la liste * @param iD L'ID de l'utilisateur que l'on souhaite retrouver
* @return L'utilisateur associé à l'adresse ID
* @throws Exception No such user with this ID
*/ */
public void supprimerList(Utilisateur u) { public Utilisateur getIDList(String iD) throws Exception {
for(Utilisateur elem: this.actifUsers)
{
if (elem.getId().equals(iD) ) {
return elem ;
}
}
throw new Exception("No such user with this ID") ;
}
/**
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
* @param u On va supprimer cet utilisateur dans la liste
*/
public synchronized void supprimerList(Utilisateur u) {
boolean Sup = false ; boolean Sup = false ;
for(Utilisateur elem: this.actifUsers) for(Utilisateur elem: this.actifUsers)
{ {
@ -70,6 +90,7 @@ public class ListUtilisateurs {
this.actifUsers.remove(elem); this.actifUsers.remove(elem);
Sup = true ; Sup = true ;
this.afficherListeUtilisateurs(); this.afficherListeUtilisateurs();
break;
} }
} }
if (!Sup) { if (!Sup) {
@ -79,35 +100,45 @@ public class ListUtilisateurs {
/** /**
* Modifier le pseudo d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers' * Modifier le pseudo d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
* @param ancien correspond au pseudo remplacer * @param ancien Pseudo à remplacer
* @param nouveau correspond au nouveau pseudo * @param nouveau Nouveau pseudo
*/ */
public void modifierList(String ancien , String nouveau) { public synchronized void modifierList(String ancien , String nouveau) {
for(Utilisateur elem: this.actifUsers) for(Utilisateur elem: this.actifUsers)
{ {
if (ancien.equals( elem.getPseudo() ) ) { if (ancien.equals( elem.getPseudo() ) ) {
this.actifUsers.remove(elem); this.actifUsers.remove(elem);
elem.setPseudo(nouveau); elem.setPseudo(nouveau);
this.addList(elem); this.addList(elem);
break ;
} }
} }
this.afficherListeUtilisateurs(); this.afficherListeUtilisateurs();
} }
/** /**
* Methode permettant de savoir si un utilisateur est contenu dans la liste 'actifUsers' * Méthode permettant de savoir si un utilisateur est contenu dans la liste 'actifUsers'
* @param u on souhait savoir si cette utilisateur appartient a la liste * @param u On souhaite savoir si cet utilisateur appartient a la liste
* @return True si il appartient, false sinon * @return True si il appartient, False sinon
*/ */
public Boolean appartient(Utilisateur u) { public Boolean appartient(Utilisateur u) {
return this.actifUsers.contains(u); boolean appartient = false ;
for(Utilisateur elem: this.actifUsers)
{
if (elem.getId().equals(u.getId())) {
appartient = true;
break;
}
}
System.out.println("Test appartient : " + appartient);
return appartient;
} }
/** /**
* Verifie qu'aucun autre utilisateur ne possede le meme pseudo * Vérifie qu'aucun autre utilisateur ne posséde le meme pseudo
* @param pseudo on va supprimer cet utilisateur dans la liste * @param pseudo Pseudo dont on veut vérifier l'unicité
* @return True si aucun utilisateur de la liste possede ce pseudo, false sinon * @return True si aucun utilisateur de la liste possède ce pseudo, False sinon
*/ */
public Boolean verifierUnicite(String pseudo) { public Boolean verifierUnicite(String pseudo) {
for(Utilisateur elem: this.actifUsers) for(Utilisateur elem: this.actifUsers)
@ -120,7 +151,7 @@ public class ListUtilisateurs {
} }
/** /**
* Methode affichant la liste des utilisateurs actifs * Méthode affichant la liste des utilisateurs actifs
*/ */
public void afficherListeUtilisateurs() { public void afficherListeUtilisateurs() {
System.out.println ("Liste des utilisateurs actifs : "); System.out.println ("Liste des utilisateurs actifs : ");
@ -133,7 +164,7 @@ public class ListUtilisateurs {
} }
/** /**
* Getter * Getter : ActifUsers (liste des utilisateurs actifs)
* @return La liste des utilisateurs actifs * @return La liste des utilisateurs actifs
*/ */
public ArrayList<Utilisateur> getActifUsers(){ public ArrayList<Utilisateur> getActifUsers(){

View file

@ -7,36 +7,51 @@ import java.util.Date;
/** /**
* <p> * <p>
* Classe representant les messages envoyes en TCP lors d'une session de clavardage. * Classe représentant les messages envoyés en TCP lors d'une session de clavardage.
* Un message Horodate est compose d'un destintaire, d'une source , d'un message et d'une date d'envoie. * <br> Un message Horodaté est composé :
* <br> - d'un destintaire,
* <br> - d'une source,
* <br> - d'un message,
* <br> - d'une date d'envoi.
* </p> * </p>
*/ */
public class MessageHorodate implements Serializable { public class MessageHorodate implements Serializable {
/* Un message est toujours adressé à un destinataire */
private Utilisateur destinataire ; private Utilisateur destinataire ;
/* Un message est toujours associé à un utilisateur source */
private Utilisateur source ; private Utilisateur source ;
/* La date d'horodatage du message */
private Date dateHorodatage ; private Date dateHorodatage ;
private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion
/* Le type d'un messge : 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion */
private int type;
/* Le corps du message */
private String Message; private String Message;
/** /**
* <p> * <p>
* Constructeur , le message va etre horodate * Constructeur , le message va etre horodaté
* @param destinataire - Destinataire du message * @param destinataire - Destinataire du message
* @param source - Source du message * @param source - Source du message
* @param Message - Message envoye * @param message - Message envoyé
* @param type - Le type du message
* </p> * </p>
*/ */
public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) { public MessageHorodate(Utilisateur destinataire, Utilisateur source, String message, int type) {
this.setDestinataire(destinataire) ; this.setDestinataire(destinataire) ;
this.setSource(source) ; this.setSource(source) ;
this.setMessage(Message) ; this.setMessage(message) ;
this.setDateHorodatage(new Date()); this.setDateHorodatage(new Date());
this.type = type; this.type = type;
} }
/** /**
* Setter: Date d'horodatage * Setter: Date d'horodatage
* On modifie le date d'horodatage * <br> On modifie le date d'horodatage
* @param d La nouvelle date d'horodatage
*/ */
public void setDate(Date d) { public void setDate(Date d) {
this.setDateHorodatage(d); this.setDateHorodatage(d);
@ -44,24 +59,24 @@ public class MessageHorodate implements Serializable {
/** /**
* <p> * <p>
* Permet de creer une representation string du message * Permet de créer une représentation string du message
* @return Les differents attributs de la classe sous forme de string * @return Les différents attributs de la classe sous forme de string
* </p> * </p>
*/ */
@Override @Override
public String toString() { public String toString() {
String Msg = ""; String msg = "";
Msg += ("Destinataire::" + this.getDestinataire() + "\n") ; msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
Msg += ("Source::" + this.getSource()+ "\n") ; msg += ("Source::" + this.getSource()+ "\n") ;
Msg += ("Type::"+ this.type+ "\n"); msg += ("Type::"+ this.type+ "\n");
Msg += ("Date::" + this.dateToString() + "\n") ; msg += ("Date::" + this.dateToString() + "\n") ;
Msg += ("Message::" + this.getMessage() + "\n" ); msg += ("Message::" + this.getMessage() + "\n" );
return Msg ; return msg ;
} }
/** /**
* <p> * <p>
* Permet de creer une representation string de la date d'horodatage * Permet de créer une représentation string de la date d'horodatage
* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss * @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
* </p> * </p>
*/ */
@ -73,7 +88,8 @@ public class MessageHorodate implements Serializable {
/** /**
* <p> * <p>
* Permet de re creer un message horodate a partir d'un string * Permet de re créer un message horodaté à partir d'un string
* @param s Le message permettant de re créer un msg horodaté
* @return un messageHorodate * @return un messageHorodate
* </p> * </p>
*/ */
@ -102,7 +118,8 @@ public class MessageHorodate implements Serializable {
/** /**
* Setter: Utilisateur Source * Setter: Utilisateur Source
* On modifie l'utilisateur source * <br> On modifie l'utilisateur source
* @param source Le nouvel utilisateur source
*/ */
public void setSource(Utilisateur source) { public void setSource(Utilisateur source) {
this.source = source; this.source = source;
@ -118,7 +135,8 @@ public class MessageHorodate implements Serializable {
/** /**
* Setter: Utilisateur Destinataire * Setter: Utilisateur Destinataire
* On modifie l'utilisateur Destinataire * <br> On modifie l'utilisateur Destinataire
* @param destinataire Le nouveau destinataire
*/ */
public void setDestinataire(Utilisateur destinataire) { public void setDestinataire(Utilisateur destinataire) {
this.destinataire = destinataire; this.destinataire = destinataire;
@ -134,7 +152,8 @@ public class MessageHorodate implements Serializable {
/** /**
* Setter: Message envoye * Setter: Message envoye
* On modifie le message envoye * <br> On modifie le message envoyé
* @param message Nouveau message
*/ */
public void setMessage(String message) { public void setMessage(String message) {
Message = message; Message = message;
@ -149,7 +168,8 @@ public class MessageHorodate implements Serializable {
} }
/** /**
* Setter: 'Type' du message horodate * Setter: 'Type' du message horodate
* On modifie l'integer 'Type' * <br> On modifie l'integer 'Type'
* @param Type Nouveau type
*/ */
public void setType(int Type) { public void setType(int Type) {
this.type = type; this.type = type;
@ -165,7 +185,8 @@ public class MessageHorodate implements Serializable {
/** /**
* Setter: Date d'horodatage * Setter: Date d'horodatage
* On modifie le date. * <br> On modifie le date.
* @param dateHorodatage Nouvelle date d'horodatage
*/ */
public void setDateHorodatage(Date dateHorodatage) { public void setDateHorodatage(Date dateHorodatage) {
this.dateHorodatage = dateHorodatage; this.dateHorodatage = dateHorodatage;

View file

@ -0,0 +1,113 @@
@startuml
title __MODEL's Class Diagram__\n
namespace chatapp {
namespace Model {
class chatapp.Model.DataBase {
- connection : Connection
- dBurl : String
{static} - instance : DataBase
- login : String
- pswd : String
+ DataBase()
+ ajoutHistorique()
+ ajoutUtilisateurs()
+ creationTableHistorique()
{static} + getInstance()
+ getNomTable()
+ idExiste()
+ majPseudo()
+ majUtilisateursActifs()
+ recupMsg()
+ recupNMsg()
+ tailleBDD()
- getPseudo()
}
}
}
namespace chatapp {
namespace Model {
class chatapp.Model.ListUtilisateurs {
- actifUsers : ArrayList<Utilisateur>
+ ListUtilisateurs()
+ addList()
+ afficherListeUtilisateurs()
+ appartient()
+ getActifUsers()
+ getIDList()
+ getIPList()
+ getPseudoList()
+ modifierList()
+ supprimerList()
+ verifierUnicite()
}
}
}
namespace chatapp {
namespace Model {
class chatapp.Model.MessageHorodate {
- Message : String
- dateHorodatage : Date
- type : int
+ MessageHorodate()
+ dateToString()
+ getDateHorodatage()
+ getDestinataire()
+ getMessage()
+ getSource()
+ getType()
+ setDate()
+ setDateHorodatage()
+ setDestinataire()
+ setMessage()
+ setSource()
+ setType()
{static} + stringToMessageHorodate()
+ toString()
}
}
}
namespace chatapp {
namespace Model {
class chatapp.Model.Utilisateur {
~ TAILLE_MAX : Integer
- id : String
- ip : InetAddress
- port : Integer
- pseudo : String
+ Utilisateur()
+ Utilisateur()
+ equals()
+ getId()
+ getIp()
+ getPort()
+ getPseudo()
+ setPort()
+ setPseudo()
{static} + stringToUtilisateur()
+ toString()
}
}
}
chatapp.Model.MessageHorodate .up.|> java.io.Serializable
chatapp.Model.MessageHorodate o-- chatapp.Model.Utilisateur : destinataire
chatapp.Model.MessageHorodate o-- chatapp.Model.Utilisateur : source
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

View file

@ -6,53 +6,115 @@ import java.net.UnknownHostException;
/** /**
* <p> * <p>
* Classe representant un Utilisateur * Classe representant un Utilisateur.
* Un Utilisateur est associe avec un pseudo, un numero de port, une addresse IP ainsi qu'un ID. * <br> Un Utilisateur est associé avec :
* <br> - un pseudo,
* <br> - un numéro de port,
* <br> - une addresse IP
* <br> - un ID.
* </p> * </p>
*/ */
public class Utilisateur { public class Utilisateur {
/* Un utilisateur possede un pseudo unique */
private String pseudo ; private String pseudo ;
/* Un port (utilisé lors de nos premiers tests pour tester le broadcast) */
private Integer port; private Integer port;
/* Un utilisateur est associé à une adresse IP */
private final InetAddress ip ; private final InetAddress ip ;
/* Chaque utilisateur possede un ID unique */
private final String id ; private final String id ;
/* La taille maximum d'un ID */
Integer TAILLE_MAX = 10;
/** /**
* Constructeur : Utilisateur * Constructeur : Utilisateur (3 paramètres)
* @param pseudo Le pseudo associe * @param pseudo Le pseudo associé
* @param port * @param port Le port
* @param ip * @param ip L'adresse IP
*/ */
public Utilisateur(String pseudo,Integer port, InetAddress ip ){ public Utilisateur(String pseudo,Integer port, InetAddress ip ){
this.setPseudo(pseudo) ; this.setPseudo(pseudo) ;
this.setPort(port); this.setPort(port);
this.ip = ip ; this.ip = ip ;
this.id = ip.getHostName() ; String aux= ip.getHostName() ;
if(aux.length() > TAILLE_MAX)
aux = aux.substring(0, TAILLE_MAX);
this.id = aux ;
} }
/**
* Constructeur : Utilisateur (4 paramètres)
* @param pseudo Le pseudo associé
* @param port Le port
* @param ip L'adresse IP
* @param id L'id
*/
public Utilisateur(String pseudo,Integer port, InetAddress ip , String id){
this.setPseudo(pseudo) ;
this.setPort(port);
this.ip = ip ;
this.id = id ;
}
/**
* Getter Pseudo
* @return Le pseudo de l'utilisateur
*/
public String getPseudo() { public String getPseudo() {
return pseudo; return pseudo;
} }
/**
* Setter Pseudo
* @param pseudo Le nouveau pseudo que l'on souhaite
*/
public void setPseudo(String pseudo) { public void setPseudo(String pseudo) {
this.pseudo = pseudo; this.pseudo = pseudo;
} }
/**
* Getter Port
* @return Le numéro de port de l'utilisateur
*/
public Integer getPort() { public Integer getPort() {
return port; return port;
} }
/**
* Setter Port
* @param port Le nouveau numéro de port
*/
public void setPort(Integer port) { public void setPort(Integer port) {
this.port = port; this.port = port;
} }
/**
* Getter IP
* @return L'adresse IP de l'utilisateur
*/
public InetAddress getIp() { public InetAddress getIp() {
return ip; return ip;
} }
/**
* Getter ID
* @return L'ID de l'utilisateur
*/
public String getId() { public String getId() {
return id; return id;
} }
/**
* Méthode permettant de convertir un objet Utilisateur en String
* <br> Format du string :
* <br> pseudo ___ | port ___ | ip ___ | id ___ | ( '___' sont à remplacer par les valeurs réels)
* @return L'utilisateur sous forme de String
*/
@Override @Override
public String toString(){ public String toString(){
String s = ""; String s = "";
@ -63,6 +125,11 @@ public class Utilisateur {
return s; return s;
} }
/**
* Méthode permettant de convertir un string en Utilisateur
* @param s Le paramètre String a transformé
* @return Un utilisateur
*/
public static Utilisateur stringToUtilisateur(String s) { public static Utilisateur stringToUtilisateur(String s) {
String name; String name;
Integer port = 0; Integer port = 0;
@ -75,14 +142,18 @@ public class Utilisateur {
id=mots[10]; id=mots[10];
Utilisateur user = null; Utilisateur user = null;
try { try {
user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1])); user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1]), id);
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
e.printStackTrace(); e.printStackTrace();
} }
return user; return user;
} }
/**
* Méthode permettant de comparer deux utilisateurs entre eux grace à leur ID.
* @param u L'utilisateur avec lequel on veut être comparer.
* @return True si ils ont le même ID, False sinon.
*/
public Boolean equals(Utilisateur u) { public Boolean equals(Utilisateur u) {
return this.getId().equals( u.getId() ) ; return this.getId().equals( u.getId() ) ;
} }

View file

@ -0,0 +1,165 @@
package chatapp.Protocol;
import chatapp.Controller.ChatApp;
import chatapp.Model.Utilisateur;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
/**
* <p>
* Classe representant les échanges HTTP entre un utilisateur distant et le servlet.
* </p>
*/
public class HttpEchange {
/* URL de notre serveur de presence */
private String url = "http://192.168.1.72:8080/Server_AL_NM/";
// private String url = "https://srv-gei-tomcat.insa-toulouse.fr/Server_AL_NM/";
//private String url = "https://srv-gei-tomcat.insa-toulouse.fr/Server_AL_NM/";
/* True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon */
private static boolean connecte = false;
/* Une instance de chatapp */
private ChatApp chatapp;
/**
* <p> Constructeur de la classe HttpEchange</p>
* @param chatapp La methode prend toujours en argument un paramètre chatApp associé à un utilisateur.
*/
public HttpEchange(ChatApp chatapp){
this.chatapp = chatapp;
this.url = (String) chatapp.getConfigJSON().get("ServeurURL");
}
/**
* <p> Cette méthode permet de communiquer avec le servlet grâce à des requetes http de type Post.</p>
* @param type Le type de message ("Connexion", "Changement de pseudo" , "Deconnexion") ainsi que les parametres associés
* @return True ou False selon la réponse a chaque type de message envoyé.
* @throws IOException
* @throws InterruptedException
*/
public boolean sendPost(String type) throws IOException, InterruptedException{
boolean reussi = false ;
/*---------------------------------CONNEXION---------------------------------*/
if (type.equals("Connexion")){
System.out.println("Tentative de connexion distante");
HttpClient client = HttpClient.newHttpClient();
String requestBody = "Connexion\n" + this.chatapp.getMe().toString() ;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
/* Partie réponse du servlet */
if(response.body().equals("")){
System.out.println("Reponse recue vide");
}
else {
switch (response.body().split("\n")[0]){
case "Reponse Connexion":
reussi = Boolean.parseBoolean(response.body().split("\n")[1]);
System.out.println("Connexion acceptee");
int max = response.body().split("\n").length ;
if (max > 2 ){
for (int i = 2 ; i < max ; i++){
String suite = response.body().split("\n")[i];
// Le server nous envoie les utilisateurs connectés en local ou à distance
if (!suite.equals("")){
System.out.println(suite);
this.chatapp.getActifUsers().addList(Utilisateur.stringToUtilisateur(suite));
}
}
}
break;
default:
System.out.println("Erreur dans le format de la réponse reçue");
}
}
}
/*---------------------------------DECONNEXION---------------------------------*/
else if(type.equals("Deconnexion")){
System.out.println("Tentative de deconnexion distante");
HttpClient client = HttpClient.newHttpClient();
String requestBody = "Deconnexion\n" + this.chatapp.getMe().toString() ;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
/* Partie réponse du servlet */
if(response.body().equals("")){
System.out.println("Reponse recue vide");
}
else {
System.out.println(response.body());
if(response.body().contains("Deconnexion")){
reussi = true;
System.out.println("Deconnexion acceptee");
}
}
}
/*---------------------------------PSEUDO---------------------------------*/
/*---------------------------Le nouveau pseudo----------------------------*/
else if(type.contains("Pseudo")){
String nouveau = type.split(" ")[1];
System.out.println("Tentative de modification de pseudo d'un hote distant");
HttpClient client = HttpClient.newHttpClient();
String requestBody = "Pseudo\n" + this.chatapp.getMe().toString() + "\n" + nouveau;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
/* Partie réponse du servlet */
if(response.body().equals("")){
System.out.println("Reponse recue vide");
}
else {
System.out.println(response.body());
switch (response.body().split("\n")[0]) {
case "Reponse Pseudo":
reussi = Boolean.parseBoolean(response.body().split("\n")[1]);
System.out.println("Connexion acceptee");
break;
default:
System.out.println("Erreur dans le format de la réponse reçue");
}
}
}
else{
System.out.println("Erreur de type");
}
return reussi;
}
/**
* Getter : Connecte
* @return Le boolean connecté (True s'il peut se connecter avec ce nom d'utilisateur , False sinon)
*/
public static Boolean getConnecte() {
return connecte;
}
/**
* Setter : Connecte
* @param value La nouvelle valeur du boolean de connexion
*/
public static void setConnecte(Boolean value) {
connecte = value ;
}
}

View file

@ -0,0 +1,121 @@
@startuml
title __PROTOCOL's Class Diagram__\n
namespace chatapp {
namespace Protocol {
class chatapp.Protocol.HttpEchange {
{static} - connecte : boolean
- url : String
+ HttpEchange()
{static} + getConnecte()
+ sendPost()
{static} + setConnecte()
}
}
}
namespace chatapp {
namespace Protocol {
class chatapp.Protocol.RunnerEcouteTCP {
- listeSessions : ArrayList<SessionClavardage>
- pcs : PropertyChangeSupport
+ RunnerEcouteTCP()
+ addPropertyChangeListener()
+ addSession()
+ ecouteTCP()
+ getSessionClavardage()
+ run()
}
}
}
namespace chatapp {
namespace Protocol {
class chatapp.Protocol.RunnerEcouteUDP {
+ RunnerEcouteUDP()
+ run()
}
}
}
namespace chatapp {
namespace Protocol {
class chatapp.Protocol.RunnerUDP {
~ data : DatagramPacket
+ RunnerUDP()
+ run()
}
}
}
namespace chatapp {
namespace Protocol {
class chatapp.Protocol.SessionClavardage {
- derniersMsg : ArrayList<MessageHorodate>
- in : ObjectInputStream
- link : Socket
- out : ObjectOutputStream
- pcs : PropertyChangeSupport
+ SessionClavardage()
+ SessionClavardage()
+ addPropertyChangeListener()
+ arretSession()
+ envoiMsg()
+ getApp()
+ getDernierMsg()
+ getIn()
+ getOut()
+ getU2()
+ initierSession()
+ run()
+ setApp()
+ setIn()
+ setLink()
+ setOut()
+ setU2()
}
}
}
namespace chatapp {
namespace Protocol {
class chatapp.Protocol.UDPEchange {
{static} - Connecte : Boolean
{static} - PseudoValide : Boolean
{static} + ecouteUDP()
{static} + envoiBroadcast()
{static} + envoiUnicast()
{static} + getConnecte()
{static} + getCurrentIp()
{static} + getPseudoValide()
{static} + setConnecte()
{static} + setPseudoValide()
{static} ~ listAllBroadcastAddresses()
}
}
}
chatapp.Protocol.HttpEchange o-- chatapp.Controller.ChatApp : chatapp
chatapp.Protocol.RunnerEcouteTCP o-- chatapp.Controller.ChatApp : app
chatapp.Protocol.RunnerEcouteUDP o-- chatapp.Controller.ChatApp : app
chatapp.Protocol.RunnerUDP .up.|> java.lang.Runnable
chatapp.Protocol.RunnerUDP o-- chatapp.Controller.ChatApp : app
chatapp.Protocol.SessionClavardage o-- chatapp.Controller.ChatApp : app
chatapp.Protocol.SessionClavardage o-- chatapp.Model.Utilisateur : u2
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

View file

@ -11,14 +11,17 @@ import java.util.ArrayList;
/** /**
* <p> * <p>
* Classe permettant de gérer les multiples connexions en TCP. * Classe permettant de gérer les multiples connexions en TCP.
* Extend la classe Thread. * <br> Extend la classe Thread.
* </p> * </p>
*/ */
public class RunnerEcouteTCP extends Thread { public class RunnerEcouteTCP extends Thread {
/* Une instance de ChaAapp */
public ChatApp app ; public ChatApp app ;
private PropertyChangeSupport pcs; private PropertyChangeSupport pcs;
// on conserve les sessions actives dans un attribut liste
private ArrayList<SessionClavardage> ListeSessions = new ArrayList<>(); /* on conserve les sessions actives dans un attribut liste */
private ArrayList<SessionClavardage> listeSessions = new ArrayList<>();
/** /**
* Constructeur * Constructeur
@ -31,8 +34,8 @@ public class RunnerEcouteTCP extends Thread {
} }
/** /**
* Permet aux classes qui appelle cette methode de connecter un PropertyChangeListener au PropertyChangeSupport * Permet aux classes qui appellent cette methode de connecter un PropertyChangeListener au PropertyChangeSupport
* @param pcl le propertyChangeListener qui va ecouter les evenements du propertyChangeSupport associe * @param pcl Le propertyChangeListener qui va ecouter les evenements du propertyChangeSupport associe
*/ */
public void addPropertyChangeListener(PropertyChangeListener pcl) { public void addPropertyChangeListener(PropertyChangeListener pcl) {
this.pcs.addPropertyChangeListener("NouvelleSession",pcl); this.pcs.addPropertyChangeListener("NouvelleSession",pcl);
@ -40,7 +43,7 @@ public class RunnerEcouteTCP extends Thread {
/** /**
* <p> * <p>
* Methode pour qu'un objet de la classe ChatApp soit constamment en a l'ecoute de potentielles connexions * Methode pour qu'un objet de la classe ChatApp soit constamment en a l'écoute de potentielles connexions
* @param app L'utilisateur en ecoute de potentielles communications * @param app L'utilisateur en ecoute de potentielles communications
* </p> * </p>
*/ */
@ -54,7 +57,7 @@ public class RunnerEcouteTCP extends Thread {
System.out.println("Attente Session de clavardage"); System.out.println("Attente Session de clavardage");
Socket link = ss.accept(); // Blocante Socket link = ss.accept(); // Blocante
SessionClavardage session = new SessionClavardage(link,app); SessionClavardage session = new SessionClavardage(link,app);
this.ListeSessions.add(session); this.listeSessions.add(session);
pcs.firePropertyChange("NouvelleSession",false,true); pcs.firePropertyChange("NouvelleSession",false,true);
} }
} }
@ -64,25 +67,25 @@ public class RunnerEcouteTCP extends Thread {
} }
/** /**
* Methode permettant d'ajouter une session active dans la liste 'ListeSessions' * Méthode permettant d'ajouter une session active dans la liste 'ListeSessions'
* @param session Session Active que l'on souhaite rajouter * @param session Session Active que l'on souhaite rajouter
*/ */
public void addSession(SessionClavardage session){ public void addSession(SessionClavardage session){
this.ListeSessions.add(session); this.listeSessions.add(session);
pcs.firePropertyChange("NouvelleSession",false,true); pcs.firePropertyChange("NouvelleSession",false,true);
} }
/** /**
* Methode permettant de recupere la derniere session de clavardage creee dans 'ListeSessions' * Méthode permettant de recupérer la derniere session de clavardage créée dans 'ListeSessions'
* @return Premiere Session Active * @return Premiere Session Active
*/ */
public SessionClavardage getSessionClavardage() { public SessionClavardage getSessionClavardage() {
return(this.ListeSessions.remove(0)); return(this.listeSessions.remove(0));
} }
/** /**
* Methode qui vient ecraser la méthode run de la classe Thread. * Méthode qui vient écraser la méthode run de la classe Thread.
* La méthode 'ecouteTCP' est appele. * La méthode 'ecouteTCP' est appelé.
*/ */
@Override @Override
public void run() { public void run() {

View file

@ -2,15 +2,28 @@ package chatapp.Protocol;
import chatapp.Controller.ChatApp; import chatapp.Controller.ChatApp;
/**
* <p>
* Classe permettant de gérer les multiples connexions en UDP.
* <br> Extend la classe Thread.
* </p>
*/
public class RunnerEcouteUDP extends Thread { public class RunnerEcouteUDP extends Thread {
ChatApp app ; ChatApp app ;
/**
* Constructeur
* @param app Un RunnerEcouteUDP est toujours associé à une application de Chat
*/
public RunnerEcouteUDP(ChatApp app) { public RunnerEcouteUDP(ChatApp app) {
this.app = app ; this.app = app ;
} }
/**
* Méthode qui vient ecraser la méthode run de la classe Thread.
* <br> La méthode 'ecouteUDP' est appelé.
*/
@Override @Override
public void run() { public void run() {
UDPEchange.ecouteUDP(app); UDPEchange.ecouteUDP(app);
} }
} }

View file

@ -1,50 +1,80 @@
package chatapp.Protocol; package chatapp.Protocol;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import chatapp.Controller.ChatApp; import chatapp.Controller.ChatApp;
import chatapp.Model.DataBase;
import chatapp.Model.MessageHorodate; import chatapp.Model.MessageHorodate;
import chatapp.Model.Utilisateur; import chatapp.Model.Utilisateur;
import chatapp.View.FenetreSession; import chatapp.View.FenetreSession;
import javafx.application.Platform; import javafx.application.Platform;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.ArrayList;
/**
* <p>
* Classe représentant une session de clavardage.
* <br> La classe hérite de la classe Thread et dispose de 2 constructeurs selon que l'on initie une demande de session ou que l'on recoit une demande.
* <br> Elle possède en attribut:
* <br> - link : la socket associée à la session de clavardage
* <br> - app : L'instance de chatapp
* <br> - u2: l'utilisateur avec lequel on communique
* <br> - out: le flux de donnees sortant
* <br> - in: le flux de donnees entrant
* <br> - pcs: Le PropertyChangeSupport permettant d'envoyer les notifications de MessageRecu et de FindeSession
* <br> - derniersMsg: la liste temporaire des derniers messages recus
* </p>
*/
public class SessionClavardage extends Thread { public class SessionClavardage extends Thread {
/* la socket associée à la session de clavardage */
private Socket link; private Socket link;
/* L'instance de chatapp */
private ChatApp app; private ChatApp app;
/* l'utilisateur avec lequel on communique */
private Utilisateur u2; private Utilisateur u2;
/* le flux de donnees sortant */
private ObjectOutputStream out; private ObjectOutputStream out;
/* le flux de donnees entrant */
private ObjectInputStream in; private ObjectInputStream in;
/* Le PropertyChangeSupport permettant d'envoyer les notifications de MessageRecu et de FindeSession */
private PropertyChangeSupport pcs; private PropertyChangeSupport pcs;
private ArrayList<MessageHorodate> derniersMsg; // on met temporairement les derniers msgs pour éviter les pb de synchro inter-threads
private int SessionID; /* On met temporairement les derniers msgs pour éviter les pb de synchro inter-threads */
private ArrayList<MessageHorodate> derniersMsg;
/**
* <p> Ce constructeur crée une session de clavardage quand on recoit une requete</p>
* @param link La socket associee a la requete TCP que l'on a recu
* @param app L'instance de chatapp
*/
public SessionClavardage(Socket link, ChatApp app) { public SessionClavardage(Socket link, ChatApp app) {
this.setLink(link); this.setLink(link);
this.setApp(app); this.setApp(app);
try { try {
this.setU2(app.getActifUsers().getIPList(link.getInetAddress()));
this.setOut(new ObjectOutputStream(link.getOutputStream())); this.setOut(new ObjectOutputStream(link.getOutputStream()));
this.setIn(new ObjectInputStream(link.getInputStream())); this.setIn(new ObjectInputStream(link.getInputStream()));
}catch(Exception e) { }catch(Exception e) {
e.getStackTrace(); e.getStackTrace();
} }
this.derniersMsg = new ArrayList<MessageHorodate>(); this.derniersMsg = new ArrayList<>();
this.SessionID = 2;
Platform.runLater( () ->
new FenetreSession(this)
);
this.pcs = new PropertyChangeSupport(this); this.pcs = new PropertyChangeSupport(this);
this.start(); this.start();
} }
/**
* <p> Le constructeur associe a l'envoi d'une requete TCP, lorsque que l'on veut initier une session de clavardage avec un utilisateur connecte</p>
* @param u2 L'utilisateur avec qui l'on souhaite démarrer une session de clavardage
* @param app L'instance de chataap associee
*/
public SessionClavardage(Utilisateur u2, ChatApp app) { public SessionClavardage(Utilisateur u2, ChatApp app) {
this.setU2(u2); this.setU2(u2);
this.setApp(app); this.setApp(app);
@ -57,36 +87,66 @@ public class SessionClavardage extends Thread {
e.printStackTrace(); e.printStackTrace();
} }
this.derniersMsg = new ArrayList<MessageHorodate>(); this.derniersMsg = new ArrayList<>();
this.pcs = new PropertyChangeSupport(this); this.pcs = new PropertyChangeSupport(this);
this.app.getDb().CreationTableHistorique("Doudou","Marvel");
this.start(); this.start();
this.initierSession();
Platform.runLater( () -> Platform.runLater( () ->
new FenetreSession(this) new FenetreSession(this)
); );
} }
/**
* Permet aux PropertyChangeListener de s'abonner aux notifications des evenements
* @param pcl Le PropertyListener qui souhaite s'abonner sur ce PropertyChangeSupport
*/
public void addPropertyChangeListener(PropertyChangeListener pcl){ public void addPropertyChangeListener(PropertyChangeListener pcl){
this.pcs.addPropertyChangeListener("MessageRecu",pcl); this.pcs.addPropertyChangeListener("MessageRecu",pcl);
this.pcs.addPropertyChangeListener("FinDeLaSession",pcl); this.pcs.addPropertyChangeListener("FinDeLaSession",pcl);
} }
/**
* <p> Methode permettant d'arreter cette session de clavardage et de prevenir l'autre utilisateur de la fin de la session</p>
*/
public void arretSession() { public void arretSession() {
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),".",2); MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),".",2);
try { try {
getOut().writeObject(msgh.toString()); getOut().writeObject(msgh.toString());
} catch (IOException e) { } catch (IOException e) {
//e.printStackTrace(); e.printStackTrace();
} }
finally { finally {
try { try {
link.close(); link.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* <p> Methode permettant d'initier une session de clavardage et de prevenir l'autre utilisateur du debut de la session</p>
*/
public void initierSession(){
String isExterne = "false";
if(this.app.isExterne()){
isExterne="true"; // on indiquera dans le message si l'on est externe ou interne
}
System.out.println("Ajout d'un utilisateur dans communication");
app.listeCommunication.add(getU2().getId());
System.out.println(app.listeCommunication.size());
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),isExterne,3);
try {
getOut().writeObject(msgh.toString());
} catch (IOException e) {
e.printStackTrace();
} }
} }
}
/**
* Methode transformant prenant un string pour le transmettre sous la forme d'un message horodate a l'utilisateur distant
* @param msg Le texte du message à envoyer
*/
public void envoiMsg(String msg) { public void envoiMsg(String msg) {
MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),msg,1); MessageHorodate msgh = new MessageHorodate(getU2(),getApp().getMe(),msg,1);
try { try {
@ -98,26 +158,35 @@ public class SessionClavardage extends Thread {
} }
/**
* <p> Methode permettant de recuperer le dernier message recu qui a ete mis dans la liste des messages recus.
* <br> Utilisée par l'interface graphique qui a ete avertie grace au PropertyChangeSupport</p>
* @return Le dernier message horodate recu
*/
public MessageHorodate getDernierMsg() { public MessageHorodate getDernierMsg() {
return this.derniersMsg.remove(0); return this.derniersMsg.remove(0);
} }
/**
* <p> Methode lancee par le thread, permet de receptionner les messages horodates recus et d'agir en conséquence selon le type de message recu</p>
*/
public void run() { public void run() {
String plaintext = null; String plaintext;
MessageHorodate msg = null; MessageHorodate msg = null;
System.out.println("Session demarre"); System.out.println("Session demarre");
app.getDb().CreationTableHistorique(app.getMe().getId(), u2.getId()); app.getDb().creationTableHistorique(app.getMe().getId(), u2.getId());
while(true) { while(true) {
try { try {
plaintext = (String) getIn().readObject(); plaintext = (String) getIn().readObject();
System.out.println("Message reçu");
msg = MessageHorodate.stringToMessageHorodate(plaintext); msg = MessageHorodate.stringToMessageHorodate(plaintext);
System.out.println(msg.getMessage());
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
pcs.firePropertyChange("FinDeLaSession", false, true); pcs.firePropertyChange("FinDeLaSession", false, true);
app.listeCommunication.remove(u2.getId());
break; break;
} }
if(msg.getType() == 2) { if(msg.getType() == 2) {
@ -127,60 +196,93 @@ public class SessionClavardage extends Thread {
} catch (IOException e) { } catch (IOException e) {
break; break;
} }
app.listeCommunication.remove(u2.getId());
break; break;
} }
else if(msg.getType() == 3) {
System.out.println("Session Initiee");
this.u2 = msg.getSource() ;
app.listeCommunication.add(u2.getId());
Platform.runLater( () ->
new FenetreSession(this)
);
}
else{
derniersMsg.add(msg); derniersMsg.add(msg);
pcs.firePropertyChange("MessageRecu",false,true); pcs.firePropertyChange("MessageRecu",false,true);}
} }
} }
/**
* Getter : Out
* @return Le flux d'ecriture des messages sortant
*/
public ObjectOutputStream getOut() { public ObjectOutputStream getOut() {
return out; return out;
} }
/**
* Setter : Out
* @param out Le flux d'ecriture des messages sortant
*/
public void setOut(ObjectOutputStream out) { public void setOut(ObjectOutputStream out) {
this.out = out; this.out = out;
} }
/**
* Getter : In
* @return Le flux de lecture des messages entrant
*/
public ObjectInputStream getIn() { public ObjectInputStream getIn() {
return in; return in;
} }
/**
* Setter : In
* @param in Le flux de lecture des messages entrant
*/
public void setIn(ObjectInputStream in) { public void setIn(ObjectInputStream in) {
this.in = in; this.in = in;
} }
public Socket getLink() { /**
return link; * Setter : Link
} * @param link La Socket asscciee a la connexion TCP et donc a la session
*/
public void setLink(Socket link) { public void setLink(Socket link) {
this.link = link; this.link = link;
} }
/**
* Getter : chatApp
* @return L'instance de chatApp
*/
public ChatApp getApp() { public ChatApp getApp() {
return app; return app;
} }
/**
* Setter : chatApp
* @param app L'instance de chatApp
*/
public void setApp(ChatApp app) { public void setApp(ChatApp app) {
this.app = app; this.app = app;
} }
/**
* Getter : Utilisateur 2
* @return L'utilisateur avec lequel on communique
*/
public Utilisateur getU2() { public Utilisateur getU2() {
return u2; return u2;
} }
/**
* Setter : Utilisateur 2
* @param u2 L'utilisateur avec lequel on communique
*/
public void setU2(Utilisateur u2) { public void setU2(Utilisateur u2) {
this.u2 = u2; this.u2 = u2;
} }
public int getSessionID() {
return SessionID;
}
public void setSessionID(int sessionID) {
SessionID = sessionID;
}
} }

View file

@ -19,26 +19,24 @@ import chatapp.Controller.*;
import chatapp.Model.*; import chatapp.Model.*;
/** /**
* <p> * <p>
* Classe representant les echanges UDP entre utilisateurs. * Classe representant les échanges UDP entre utilisateurs.
* </p> * </p>
*/ */
public class UDPEchange { public class UDPEchange {
/* True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon */
private static Boolean Connecte = true; private static Boolean Connecte = true;
// True si l'utilisateur peut se connecter avec ce nom d'utilisateur , False sinon
private static Boolean EcouteEnCours = false;
/** /**
* Getter * Getter : Connecte
* @return le boolean connecte (True s'il peut se connecter avec ce nom d'utilisateur , False sinon) * @return Le boolean connecte (True s'il peut se connecter avec ce nom d'utilisateur , False sinon)
*/ */
public static Boolean getConnecte() { public static Boolean getConnecte() {
return Connecte; return Connecte;
} }
/** /**
* Setter * Setter : Connecte
* @param value La nouvelle valeur du boolean de connexion * @param value La nouvelle valeur du boolean de connexion
*/ */
public static void setConnecte(Boolean value) { public static void setConnecte(Boolean value) {
@ -49,27 +47,27 @@ public class UDPEchange {
// True si l'utilisateur a (ou demande) un pseudo valide , False sinon // True si l'utilisateur a (ou demande) un pseudo valide , False sinon
/** /**
* Getter * Getter : Pseudo Valide
* @return le boolean PseudoValide (True s'il peut utiliser ce pseudo , False sinon) * @return Le boolean PseudoValide (True s'il peut utiliser ce pseudo , False sinon)
*/ */
public static Boolean getPseudoValide() { public static Boolean getPseudoValide() {
return PseudoValide; return PseudoValide;
} }
/** /**
* Setter * Setter : PseudoValise
* @param value La nouvelle valeur du boolean concernant le pseudo valide * @param value La nouvelle valeur du boolean concernant le pseudo valide
*/ */
public static void setPseudoValide(Boolean value) { public static void setPseudoValide(Boolean value) {
PseudoValide = value ; PseudoValide = value ;
} }
/**<p> /**<p>
* Permet de recuperer l'adresse de l'hote sur le reseau au format IPv4. * Getter : Ip
* Si plusieurs adresses sont disponibles (plusieurs cartes réseaux), choisit la premiere trouvee * <br>Permet de recuperer l'adresse de l'hote sur le reseau au format IPv4.
* <br> Si plusieurs adresses sont disponibles (plusieurs cartes réseaux), choisit la premiere trouvée
* </p> * </p>
* @return l'adresse IP au format IPv4 * @return L'adresse IP au format IPv4
*/ */
public static InetAddress getCurrentIp() { public static InetAddress getCurrentIp() {
try { try {
@ -93,16 +91,17 @@ public class UDPEchange {
} }
return null; return null;
} }
/** /**
* <p> * <p>
* ©thode permettant d'envoyer un message à tout les utilisateurs * Méthode permettant d'envoyer un message à tout les utilisateurs à l'aide du protocole UDP
* a l'aide du protocole UDP
* </p> * </p>
* @param broadcastMessage correspond au message a transmettre aux utilisateurs * @param broadcastMessage Message à transmettre aux utilisateurs
* @throws IOException
*/ */
public static void EnvoiBroadcast(String broadcastMessage) throws IOException { public static void envoiBroadcast(String broadcastMessage) throws IOException {
int port = 1234 ; int port = 1234 ;
// Envoie en broadcast à tous les utilsateurs // Envoie en broadcast à tous les utilisateurs
for (InetAddress broadcastAddr : listAllBroadcastAddresses()) { for (InetAddress broadcastAddr : listAllBroadcastAddresses()) {
DatagramSocket socket = new DatagramSocket(); DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true); socket.setBroadcast(true);
@ -122,13 +121,11 @@ public class UDPEchange {
/** /**
* <p> * <p>
* Methode permettant la reception de messages d'utilisateurs * Methode permettant la reception de messages d'utilisateurs à l'aide du protocole UDP
* a l'aide du protocole UDP
* </p> * </p>
* @param app L'application de chat de l'utilisateur qui receptionne le message * @param app L'application de chat de l'utilisateur qui receptionne le message
*/ */
public static void ecouteUDP(ChatApp app) public static void ecouteUDP(ChatApp app) {
{
DatagramSocket socket = null; DatagramSocket socket = null;
ExecutorService exec = Executors.newFixedThreadPool(1000); ExecutorService exec = Executors.newFixedThreadPool(1000);
try { try {
@ -146,7 +143,7 @@ public class UDPEchange {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Un thread est lance à chaque reception d'un message // Un thread est lance à chaque reception d'un message
System.out.println("Message recu!"); System.out.println("Message recu!");
exec.submit(new RunnerUDP(data,app)); exec.submit(new RunnerUDP(data,app));
} }
@ -154,29 +151,32 @@ public class UDPEchange {
/** /**
* <p> * <p>
* Methode permettant d'envoyer un message a utilisateur en particulier * Méthode permettant d'envoyer un message a utilisateur en particulier
* a l'aide du protocole UDP * a l'aide du protocole UDP
* </p> * </p>
* @param Adress l'addresse de l'utilisateur * @param address L'adresse IP de l'utilisateur
* @param Message correspond au message à transmettre a l'utilisateur * @param message Message message à transmettre a l'utilisateur
* @throws IOException
*/ */
public static void envoiUnicast( InetAddress Adress , String Message ) throws IOException { public static void envoiUnicast( InetAddress address , String message ) throws IOException {
if (ChatApp.getInstance().isConnecte()){
DatagramSocket socket = new DatagramSocket(); DatagramSocket socket = new DatagramSocket();
byte[]buffer = Message.getBytes(); byte[]buffer = message.getBytes();
DatagramPacket packet = new DatagramPacket( buffer, buffer.length, Adress, 1234 ); DatagramPacket packet = new DatagramPacket( buffer, buffer.length, address, 1234 );
socket.send(packet); socket.send(packet);
socket.close(); socket.close();
System.out.println("***********Message envoye***********"); System.out.println("***********Message envoye***********");
System.out.println("Dest Ip: " + Adress.toString()); System.out.println("Dest Ip: " + address.toString());
System.out.println("Dest port: " + String.valueOf(1234)); System.out.println("Dest port: " + String.valueOf(1234));
System.out.println("Contenu: "); System.out.println("Contenu: ");
System.out.println(Message); System.out.println(message);
System.out.println("************************************"); System.out.println("************************************");
} }
}
/** /**
* <p> * <p>
* Methode permettant de recuperer la liste des adresses de broadcast, chacune associer à une interface de la machine * Methode permettant de recuperer la liste des adresses de broadcast, chacune associer à une interface de la machine
* </p> * </p>
*/ */
static List<InetAddress> listAllBroadcastAddresses() throws SocketException { static List<InetAddress> listAllBroadcastAddresses() throws SocketException {
@ -205,13 +205,18 @@ public class UDPEchange {
/** /**
* <p> * <p>
* Classe implementant l'interface Runnable. * Classe implementant l'interface Runnable.
* Contient les traitements a executer dans un thread lancer par des methodes de la class UDPEchange * <br> Contient les traitements a executer dans un thread lancer par des méthodes de la class UDPEchange
* </p> * </p>
*/ */
class RunnerUDP implements Runnable { class RunnerUDP implements Runnable {
final DatagramPacket data ; final DatagramPacket data ;
ChatApp app ; ChatApp app ;
/**
* Constructeur RunnerUDP
* @param data Un datagramPacket
* @param app Instance de chatapp
*/
public RunnerUDP(DatagramPacket data, ChatApp app) { public RunnerUDP(DatagramPacket data, ChatApp app) {
this.data= data; this.data= data;
this.app = app ; this.app = app ;
@ -220,7 +225,7 @@ class RunnerUDP implements Runnable {
/** /**
* <p> * <p>
* Methode qui redefinie les traitements qui seront executes dans le thread: * Methode qui redefinie les traitements qui seront executes dans le thread:
* Met à jour la liste des utilisateurs actifs * <br> Met à jour la liste des utilisateurs actifs
* </p> * </p>
* *
*/ */
@ -248,10 +253,14 @@ class RunnerUDP implements Runnable {
reponse += "false\n"; reponse += "false\n";
} }
else { else {
if(!u.getPseudo().equals("root")){
System.out.println("Ajout d'un nouvel utilisateur dans la liste des Utilisateurs"); System.out.println("Ajout d'un nouvel utilisateur dans la liste des Utilisateurs");
( app.getActifUsers() ).addList(u); ( app.getActifUsers() ).addList(u);
reponse += "true\n"; reponse += "true\n";
}
else{
System.out.println("Non ajout de root dans la liste");
}
} }
reponse += app.getMe().toString(); reponse += app.getMe().toString();
@ -272,12 +281,28 @@ class RunnerUDP implements Runnable {
//******************************************************************************************************* //*******************************************************************************************************
if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion if (Type.equals("Reponse Connexion")) { // Un utilisateur te repond suite à ta demande de connexion
if((received.split("\n")[1]).equals("true")) { if((received.split("\n")[1]).equals("true")) {
Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[2]); Utilisateur u = Utilisateur.stringToUtilisateur(received.split("\n")[2]);
if(!u.getPseudo().equals("root")) { // on ajoute jamais root c'est le server
app.getActifUsers().addList(u); app.getActifUsers().addList(u);
app.getActifUsers().afficherListeUtilisateurs(); app.getActifUsers().afficherListeUtilisateurs();
} }
else{
System.out.println("Le serveur nous a repondu");
int max = received.split("\n").length ;
if (max > 3 ){
for (int i = 3 ; i < max ; i++){
String suite = received.split("\n")[i];
// Le server nous envoie les utilisateurs connectés en local ou à distance
if (!suite.equals("")){
app.getActifUsers().addList(Utilisateur.stringToUtilisateur(suite));
System.out.println("root m'a transmis les infos de l'utilisateur " +Utilisateur.stringToUtilisateur(suite).toString() );
}
}
}
}
}
else { else {
System.out.println("Pseudo deja pris"); System.out.println("Pseudo deja pris");
UDPEchange.setConnecte(false); UDPEchange.setConnecte(false);
@ -291,19 +316,19 @@ class RunnerUDP implements Runnable {
//******************************************************************************************************************* //*******************************************************************************************************************
if (Type.equals("Demande Modification Pseudo")) { if (Type.equals("Demande Modification Pseudo")) {
Utilisateur Source = Utilisateur.stringToUtilisateur(received.split("\n")[1]); Utilisateur source = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
if (! Source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même if (! source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même
String nouveau = received.split("\n")[2] ; String nouveau = received.split("\n")[2] ;
String Message = ""; String message = "";
if(( app.getActifUsers() ).verifierUnicite(nouveau)) { if(( app.getActifUsers() ).verifierUnicite(nouveau)) {
Message = "Bon Choix Pseudo\n" + nouveau ; message = "Bon Choix Pseudo\n" + nouveau ;
} }
else { else {
Message = "Mauvais Choix Pseudo\n" ; message = "Mauvais Choix Pseudo\n" ;
} }
System.out.println(Message); System.out.println(message);
try { try {
UDPEchange.envoiUnicast(Source.getIp(),Message); UDPEchange.envoiUnicast(source.getIp(),message);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -316,15 +341,18 @@ class RunnerUDP implements Runnable {
//************************************************************************************************************ //************************************************************************************************************
if (Type.equals("Modification pseudo reussi")) { if (Type.equals("Modification pseudo reussi")) {
Utilisateur Source = Utilisateur.stringToUtilisateur(received.split("\n")[1]); Utilisateur source = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
if (! Source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même if (! source.equals(this.app.getMe())) { // On envoit en broadcast mais on ne souhaite pas recevoir de message de nous même
String nouveau = received.split("\n")[2] ; String nouveau = received.split("\n")[2] ;
if(app.getActifUsers().appartient(Source)) { // On verifie d'abord que Source appartient bien a la liste des utilisateurs actifs System.out.println("Je rentre ici");
app.getActifUsers().modifierList(Source.getPseudo(), nouveau); if(app.getActifUsers().appartient(source)) { // On verifie d'abord que Source appartient bien a la liste des utilisateurs actifs
} System.out.println(source.getPseudo() + " va etre changer en : " + nouveau);
{ app.getActifUsers().modifierList(source.getPseudo(), nouveau);
} else {
System.out.println(source.getPseudo() + " va etre ajouter en : " + nouveau);
// Suite a une perte d'un message lors d'une connexion l'utilisateur Source n'apparait pas dans la liste // Suite a une perte d'un message lors d'une connexion l'utilisateur Source n'apparait pas dans la liste
app.getActifUsers().addList(Source); source.setPseudo(nouveau);
app.getActifUsers().addList(source);
} }
} }
} }
@ -357,9 +385,15 @@ class RunnerUDP implements Runnable {
if (Type.equals("Deconnexion")) { if (Type.equals("Deconnexion")) {
( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); ( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1]));
} }
//*********************************************************************************************************
//*********************************************************************************************************
//*******************************Connexion d'un utilisateur externe****************************************
//*********************************************************************************************************
//*********************************************************************************************************
if (Type.equals("Connexion Externe")) {
Utilisateur nouveau = Utilisateur.stringToUtilisateur(received.split("\n")[1]);
app.getActifUsers().addList(nouveau);
}
} }
} }

View file

@ -16,7 +16,11 @@ package chatapp.View;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import javafx.stage.Stage; import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de changer de pseudo
* </p>
*/
public class ChangementPseudo { public class ChangementPseudo {
@FXML // ResourceBundle that was given to the FXMLLoader @FXML // ResourceBundle that was given to the FXMLLoader
@ -37,16 +41,14 @@ public class ChangementPseudo {
@FXML // fx:id="MenuButton" @FXML // fx:id="MenuButton"
private Button MenuButton; // Value injected by FXMLLoader private Button MenuButton; // Value injected by FXMLLoader
/* Une instance de chatApp */
private ChatApp chatApp; private ChatApp chatApp;
@FXML private int MaxLength=10;
void nouveauPseudo(ActionEvent event) {
}
@FXML @FXML
/** /**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p> * <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Retour au menu
*/ */
void retourMenu(ActionEvent event) { void retourMenu(ActionEvent event) {
System.out.println("Retour au menu principal"); System.out.println("Retour au menu principal");
@ -65,9 +67,18 @@ public class ChangementPseudo {
@FXML @FXML
/** /**
* <p> Handler permettant de lancer la verrification de l'unicite du ppseudo sur pression du validtionButton</p> * <p> Handler permettant de lancer la verrification de l'unicite du ppseudo sur pression du validtionButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Valider pseudo
*/ */
void validerPseudo(ActionEvent event) { void validerPseudo(ActionEvent event) {
boolean pseudoOK = false; boolean pseudoOK = false;
if (pseudonyme.getText().length() > MaxLength) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Connexion");
// Header Text: null
alert.setHeaderText(null);
alert.setContentText("Echec de Connexion: le pseudo entre fait plus de " + MaxLength + " caracteres");
alert.showAndWait();
} else {
try { try {
pseudoOK = chatApp.modifierPseudo(pseudonyme.getText()); pseudoOK = chatApp.modifierPseudo(pseudonyme.getText());
} catch (IOException e) { } catch (IOException e) {
@ -75,8 +86,7 @@ public class ChangementPseudo {
} }
if (pseudoOK) { if (pseudoOK) {
this.retourMenu(null); this.retourMenu(null);
} } else {
else{
Alert alert = new Alert(Alert.AlertType.INFORMATION); Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Changement pseudo"); alert.setTitle("Changement pseudo");
// Header Text: null // Header Text: null
@ -85,6 +95,7 @@ public class ChangementPseudo {
alert.showAndWait(); alert.showAndWait();
} }
} }
}
/** /**
* <p> Initialization de la classe ChangementPseudo et permet d'initialiser les parametres</p> * <p> Initialization de la classe ChangementPseudo et permet d'initialiser les parametres</p>
@ -94,6 +105,5 @@ public class ChangementPseudo {
chatApp = ChatApp.getInstance(); chatApp = ChatApp.getInstance();
pseudonyme1.setText(chatApp.getMe().getPseudo()); pseudonyme1.setText(chatApp.getMe().getPseudo());
this.validationButton.setDefaultButton(true); this.validationButton.setDefaultButton(true);
//System.out.println(this.validationButton.isDefaultButton());
} }
} }

View file

@ -9,7 +9,6 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import chatapp.Controller.ChatApp;
import chatapp.Model.MessageHorodate; import chatapp.Model.MessageHorodate;
import chatapp.Model.Utilisateur; import chatapp.Model.Utilisateur;
import chatapp.Protocol.SessionClavardage; import chatapp.Protocol.SessionClavardage;
@ -23,6 +22,11 @@ import javafx.scene.control.TextField;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import javafx.stage.Stage; import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de clavarder avec un utilisateur.
* </p>
*/
public class Clavardage implements Initializable, PropertyChangeListener { public class Clavardage implements Initializable, PropertyChangeListener {
@FXML //fx:id="plusButton" @FXML //fx:id="plusButton"
public Button plusButton; public Button plusButton;
@ -47,12 +51,19 @@ public class Clavardage implements Initializable, PropertyChangeListener {
@FXML // fx:id="MenuButton" @FXML // fx:id="MenuButton"
/* L'utilisateur destinataire */
private Utilisateur u2; private Utilisateur u2;
/* Une session de clavardage */
private SessionClavardage session; private SessionClavardage session;
/* Le nom de la table dans la BDD stockant l'historique des messages */
private String nomTable; private String nomTable;
@FXML @FXML
/** /**
* <p>Handler gerant l'envoi du message contenu dans le TextField AEnvoyer et sur pression du bouton EnvoyerButton</p> * <p>Handler gerant l'envoi du message contenu dans le TextField AEnvoyer et sur pression du bouton EnvoyerButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Envoyer
*/ */
void envoyerMessage(ActionEvent event) { void envoyerMessage(ActionEvent event) {
String msg = AEnvoyer.getText(); String msg = AEnvoyer.getText();
@ -69,13 +80,11 @@ public class Clavardage implements Initializable, PropertyChangeListener {
/** /**
* Setter * Setter : Session
* @param session la session a associer a la classe * @param session La session a associer a la classe
*/ */
public void setSession(SessionClavardage session) { public void setSession(SessionClavardage session) {
this.session = session; this.session = session;
this.session.addPropertyChangeListener(this); this.session.addPropertyChangeListener(this);
this.u2=session.getU2(); this.u2=session.getU2();
this.pseudonyme1.setText(u2.getPseudo()); this.pseudonyme1.setText(u2.getPseudo());
@ -83,8 +92,8 @@ public class Clavardage implements Initializable, PropertyChangeListener {
/** /**
* <p>Handler des differents evenements auxquels s'est abonne le PropertyChangeListener * <p>Handler des differents evenements auxquels s'est abonne le PropertyChangeListener
* La classe est informee lorsque la session recoit un message ou lorsque la session se termine </p> * <br> La classe est informee lorsque la session recoit un message ou lorsque la session se termine </p>
* @param evt l'evenement informe par le pcs * @param evt L'evenement informe par le pcs
*/ */
@Override @Override
public void propertyChange(PropertyChangeEvent evt) { public void propertyChange(PropertyChangeEvent evt) {
@ -111,6 +120,10 @@ public class Clavardage implements Initializable, PropertyChangeListener {
} }
/**
* Getter : Session
* @return La session de Clavardage
*/
public SessionClavardage getSession(){ public SessionClavardage getSession(){
return session; return session;
} }
@ -127,12 +140,12 @@ public class Clavardage implements Initializable, PropertyChangeListener {
} }
/** /**
* <p> Permet de recepurer plus de messages stoces dans la database en appuyant sur le bouton plusButton</p> * <p> Permet de recupérer plus de messages stoces dans la database en appuyant sur le bouton plusButton</p>
* @param actionEvent * @param actionEvent L'utilisateur a appuye sur le bouton plus pour obtenir tout l'utilisateur
*/ */
public void ajouterMessagesHistorique(ActionEvent actionEvent) { public void ajouterMessagesHistorique(ActionEvent actionEvent) {
this.nomTable = this.session.getApp().getDb().getNomTable(u2,this.session.getApp().getMe()); this.nomTable = this.session.getApp().getDb().getNomTable(u2,this.session.getApp().getMe());
String historique = this.session.getApp().getDb().recupNMsg(session.getApp().getMe().getId(),this.u2.getId(), this.session.getApp().getDb().tailleBDD("Chat_mbp-de-auriane.home_mbp-de-auriane.home")); String historique = this.session.getApp().getDb().recupNMsg(session.getApp().getMe().getId(),this.u2.getId(), this.session.getApp().getDb().tailleBDD(nomTable));
ChatText.clear(); ChatText.clear();
ChatText.insertText(0,historique); ChatText.insertText(0,historique);
} }

View file

@ -13,15 +13,31 @@ import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.stage.Stage; import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de se connecter.
* L'utilisateur rentre un pseudo et choisit une connexion distante ou locale.
* </p>
*/
public class ConnexionScreen { public class ConnexionScreen {
/* Bouton de connexion */
public Button connexionButton; public Button connexionButton;
/* Zone de texte où inserer le pseudonyme souhaité */
public TextField pseudonyme; public TextField pseudonyme;
/* RadioButton : l'utilisateur est distant */
public RadioButton remoteButton;
/* RadioButton : l'utilisateur est local */
public RadioButton localButton;
private int MaxLength = 10;
@FXML // ResourceBundle that was given to the FXMLLoader @FXML // ResourceBundle that was given to the FXMLLoader
private ResourceBundle resources; private ResourceBundle resources;
@ -30,17 +46,34 @@ public class ConnexionScreen {
@FXML // This method is called by the FXMLLoader when initialization is complete @FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() { void initialize() {
connexionButton.setDefaultButton(true); connexionButton.setDefaultButton(true); // Appuyer sur entrée equivaut a cliquer sur le bouton de connexion
} }
/** /**
* <p>Handler permettant de lancer la connexion avec le pseudonyme contenu dans le TextField pseudonyme en appuyant sur le connexionButton * <p>
* Handler permettant de lancer la connexion avec le pseudonyme contenu dans le TextField pseudonyme en appuyant sur le connexionButton
* </p> * </p>
* @param actionEvent * @param actionEvent L'utilisateur vient d'appuyer sur le bouton connexion
*/ */
public void connexion(ActionEvent actionEvent) { public void connexion(ActionEvent actionEvent) {
Boolean connexion = false; Boolean connexion = false;
if (this.localButton.isSelected()) {
// PARTIE CONNEXION LOCALE
ChatApp.getInstance().setExterne(false);
} else {
// PARTIE CONNEXION DISTANTE
ChatApp.getInstance().setExterne(true);
}
if (pseudonyme.getText().length() > MaxLength) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Connexion");
// Header Text: null
alert.setHeaderText(null);
alert.setContentText("Echec de Connexion: le pseudo entre fait plus de " + MaxLength + " caracteres");
alert.showAndWait();
} else {
try { try {
connexion = ChatApp.getInstance().connexion(pseudonyme.getText()); connexion = ChatApp.getInstance().connexion(pseudonyme.getText());
} catch (IOException e) { } catch (IOException e) {
@ -53,8 +86,7 @@ public class ConnexionScreen {
alert.setHeaderText(null); alert.setHeaderText(null);
alert.setContentText("Echec de Connexion: le pseudo " + pseudonyme.getText() + " est deja pris"); alert.setContentText("Echec de Connexion: le pseudo " + pseudonyme.getText() + " est deja pris");
alert.showAndWait(); alert.showAndWait();
} } else {
else{
Stage stage = (Stage) connexionButton.getScene().getWindow(); Stage stage = (Stage) connexionButton.getScene().getWindow();
Parent root = null; Parent root = null;
try { try {
@ -68,3 +100,4 @@ public class ConnexionScreen {
} }
} }
} }
}

View file

@ -6,6 +6,7 @@ package chatapp.View;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import chatapp.Controller.ChatApp; import chatapp.Controller.ChatApp;
@ -20,7 +21,11 @@ import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.ComboBox; import javafx.scene.control.ComboBox;
import javafx.stage.Stage; import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant de choisir un utilisateur avec qui clavarder.
* </p>
*/
public class DemarrerSession { public class DemarrerSession {
@FXML // ResourceBundle that was given to the FXMLLoader @FXML // ResourceBundle that was given to the FXMLLoader
@ -34,19 +39,20 @@ public class DemarrerSession {
@FXML // fx:id="MenuButton" @FXML // fx:id="MenuButton"
private Button MenuButton; // Value injected by FXMLLoader private Button MenuButton; // Value injected by FXMLLoader
/* Instance de chatApp */
private ChatApp chatApp; private ChatApp chatApp;
/** /**
* <p> Handler permettant de demarrer une session de clavardage avec le contact choisi dans la comboBox choixContaact</p> * <p> Handler permettant de demarrer une session de clavardage avec le contact choisi dans la comboBox choixContaact</p>
* @param event * @param event L'utilisateur vient de selectionner un utilisateur
*/ */
@FXML @FXML
void demarrerSessionAvec(ActionEvent event) { void demarrerSessionAvec(ActionEvent event) { chatApp.demarrerSession(choixContact.getValue()); }
chatApp.demarrerSession(choixContact.getValue());
}
/** /**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p> * <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
* @param event L'utilisateur vient d'appuyer sur le bouton Retour au menu
*/ */
@FXML @FXML
void retourMenu(ActionEvent event) { void retourMenu(ActionEvent event) {
@ -68,10 +74,9 @@ public class DemarrerSession {
@FXML // This method is called by the FXMLLoader when initialization is complete @FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() { void initialize() {
this.chatApp = ChatApp.getInstance(); this.chatApp = ChatApp.getInstance();
ListUtilisateurs utils = chatApp.getActifUsers(); ArrayList<Utilisateur> Com = chatApp.createListeCommunicationPossible();
for(Utilisateur u : utils.getActifUsers()){ for(Utilisateur u : Com ){
choixContact.getItems().add(u.getPseudo()); choixContact.getItems().add(u.getPseudo());
} }
} }
} }

View file

@ -1,44 +1,37 @@
package chatapp.View; package chatapp.View;
import chatapp.Protocol.SessionClavardage; import chatapp.Protocol.SessionClavardage;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
/**
* <p>
* Classe permettant d'ouvrir une nouvelle fenetre afin de clavarder avec un utilisateur.
* </p>
*/
public class FenetreSession extends Stage { public class FenetreSession extends Stage {
SessionClavardage session;
/** /**
* <p> Permet l'ouverture de la fenetre associee a la session de clavardage</p> * <p> Permet l'ouverture de la fenetre associee a la session de clavardage</p>
* @param session Un objet FenetreSession est attribué avec un objet de type SessionClavardage
*/ */
public FenetreSession(SessionClavardage session) { public FenetreSession(SessionClavardage session) {
FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/View_Clavardage.fxml")); FXMLLoader fichier = new FXMLLoader(getClass().getResource("/fenetres/View_Clavardage.fxml"));
try{ try{
Parent rootchat = fichier.load(); Parent rootchat = fichier.load();
Clavardage controller = fichier.getController(); Clavardage controller = fichier.getController();
System.out.println("Session id "+session.getSessionID());
//controller.printsalut();
controller.setSession(session); controller.setSession(session);
Scene scene1 = null; Scene scene1;
scene1 = new Scene(rootchat,600,400); scene1 = new Scene(rootchat,600,400);
this.setScene(scene1); this.setScene(scene1);
this.setTitle("Session avec "+session.getU2().getPseudo()); this.setTitle("Session avec "+session.getU2().getPseudo());
this.setMinWidth(600); this.setMinWidth(600);
this.setMinHeight(400); this.setMinHeight(400);
//this.setMaxWidth(600);
//this.setMaxHeight(400);
this.show(); this.show();
this.centerOnScreen(); this.centerOnScreen();
this.setOnCloseRequest(new EventHandler<WindowEvent>() { this.setOnCloseRequest(we -> session.arretSession());
public void handle(WindowEvent we) {
session.arretSession();
}
});
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View file

@ -0,0 +1,134 @@
@startuml
title __VIEW's Class Diagram__\n
namespace chatapp {
namespace View {
class chatapp.View.ChangementPseudo {
- MenuButton : Button
- location : URL
- pseudonyme : TextField
- pseudonyme1 : Text
- resources : ResourceBundle
- validationButton : Button
~ initialize()
~ retourMenu()
~ validerPseudo()
}
}
}
namespace chatapp {
namespace View {
class chatapp.View.Clavardage {
+ plusButton : Button
- AEnvoyer : TextField
- ChatText : TextArea
- EnvoyerButton : Button
- location : URL
- nomTable : String
- pseudonyme1 : Text
- resources : ResourceBundle
+ ajouterMessagesHistorique()
+ getSession()
+ initialize()
+ propertyChange()
+ setSession()
~ envoyerMessage()
}
}
}
namespace chatapp {
namespace View {
class chatapp.View.ConnexionScreen {
+ connexionButton : Button
+ localButton : RadioButton
+ pseudonyme : TextField
+ remoteButton : RadioButton
- location : URL
- resources : ResourceBundle
+ connexion()
~ initialize()
}
}
}
namespace chatapp {
namespace View {
class chatapp.View.DemarrerSession {
- MenuButton : Button
- choixContact : ComboBox<String>
- location : URL
- resources : ResourceBundle
~ demarrerSessionAvec()
~ initialize()
~ retourMenu()
}
}
}
namespace chatapp {
namespace View {
class chatapp.View.FenetreSession {
+ FenetreSession()
}
}
}
namespace chatapp {
namespace View {
class chatapp.View.View_Menu {
+ changerPseudoButton : MenuItem
+ demarrerSessionButton : MenuItem
+ pseudonyme : Text
+ utilsActifsButton : MenuItem
- location : URL
- resources : ResourceBundle
+ afficherUtilsActifs()
+ changerPseudo()
+ deconnexion()
+ demarrerSession()
~ initialize()
}
}
}
namespace chatapp {
namespace View {
class chatapp.View.View_Utilisateurs {
+ ListeUtilisateurs : TextArea
+ MenuButton : Button
- location : URL
- resources : ResourceBundle
+ retourMenu()
~ initialize()
}
}
}
chatapp.View.ChangementPseudo o-- chatapp.Controller.ChatApp : chatApp
chatapp.View.Clavardage .up.|> java.beans.PropertyChangeListener
chatapp.View.Clavardage .up.|> javafx.fxml.Initializable
chatapp.View.Clavardage o-- chatapp.Protocol.SessionClavardage : session
chatapp.View.Clavardage o-- chatapp.Model.Utilisateur : u2
chatapp.View.DemarrerSession o-- chatapp.Controller.ChatApp : chatApp
chatapp.View.FenetreSession -up-|> javafx.stage.Stage
chatapp.View.View_Menu o-- chatapp.Controller.ChatApp : chatapp
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

View file

@ -1,12 +1,7 @@
package chatapp.View; package chatapp.View;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import chatapp.Controller.ChatApp; import chatapp.Controller.ChatApp;
import javafx.application.Platform;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
@ -16,15 +11,36 @@ import javafx.scene.control.MenuItem;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
/**
* <p>
* Classe representant la page d'accueil. Elle est composé d'un menu en haut a gauche.
* Au centre un petit message "Bienvenue" suivi du pseudo de l'utilisateur est affiché.
* </p>
*/
public class View_Menu { public class View_Menu {
/* Le pseudo de l'utilisateur */
public Text pseudonyme; public Text pseudonyme;
/* Choix dans la bar de menu : Connaitre les utilisateurs actifs */
public MenuItem utilsActifsButton; public MenuItem utilsActifsButton;
/* Choix dans la bar de menu : Demarrer une session de clavardage */
public MenuItem demarrerSessionButton; public MenuItem demarrerSessionButton;
/* Choix dans la bar de menu : Changer de pseudo */
public MenuItem changerPseudoButton; public MenuItem changerPseudoButton;
@FXML // ResourceBundle that was given to the FXMLLoader @FXML // ResourceBundle that was given to the FXMLLoader
private ResourceBundle resources; private ResourceBundle resources;
/* Une instance de chatApp */
private ChatApp chatapp; private ChatApp chatapp;
@FXML // URL location of the FXML file that was given to the FXMLLoader @FXML // URL location of the FXML file that was given to the FXMLLoader
private URL location; private URL location;
@ -36,7 +52,7 @@ public class View_Menu {
/** /**
* <p>Handler permettant d'aller a la scene View_Utilisateurs pour afficher la liste des utilisateurs actifs</p> * <p>Handler permettant d'aller a la scene View_Utilisateurs pour afficher la liste des utilisateurs actifs</p>
* @param actionEvent * @param actionEvent L'utilisateur a choisit l'option afficher utilisateurs actifs dans le menu
*/ */
public void afficherUtilsActifs(ActionEvent actionEvent) { public void afficherUtilsActifs(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow(); Stage stage = (Stage) pseudonyme.getScene().getWindow();
@ -53,7 +69,7 @@ public class View_Menu {
/** /**
* <p>Handler permettant d'aller a la scene Demarrer_Session pour choisir un utilisateur avec qui clavarder * <p>Handler permettant d'aller a la scene Demarrer_Session pour choisir un utilisateur avec qui clavarder
* @param actionEvent * @param actionEvent L'utilisateur a choisit l'option de demarrer une session de clavardage dans le menu
*/ */
public void demarrerSession(ActionEvent actionEvent) { public void demarrerSession(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow(); Stage stage = (Stage) pseudonyme.getScene().getWindow();
@ -70,7 +86,7 @@ public class View_Menu {
/** /**
* <p>Handler permettant d'aller a la scene View_ChangementPseudo pour changer son pseudonyme * <p>Handler permettant d'aller a la scene View_ChangementPseudo pour changer son pseudonyme
* @param actionEvent * @param actionEvent L'utilisateur a choisit l'option changer de pseudo
*/ */
public void changerPseudo(ActionEvent actionEvent) { public void changerPseudo(ActionEvent actionEvent) {
Stage stage = (Stage) pseudonyme.getScene().getWindow(); Stage stage = (Stage) pseudonyme.getScene().getWindow();
@ -87,14 +103,11 @@ public class View_Menu {
/** /**
* <p>Handler permettant de se deconnecter et fermer l'application * <p>Handler permettant de se deconnecter et fermer l'application
* @param actionEvent * @param actionEvent L'utilisateur a choisit l'option Deconnexion dans le menu
*/ */
public void deconnexion(ActionEvent actionEvent) { public void deconnexion(ActionEvent actionEvent) {
try { try {
chatapp.deconnexion(); chatapp.deconnexion();
/*chatapp.getMain().stop();
Platform.exit();
System.exit(0);*/
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} catch (Exception e) { } catch (Exception e) {

View file

@ -15,11 +15,19 @@ import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.TextArea; import javafx.scene.control.TextArea;
import javafx.stage.Stage; import javafx.stage.Stage;
/**
* <p>
* Classe representant l'interface graphique permettant d'afficher les utilisateurs actifs
* </p>
*/
public class View_Utilisateurs { public class View_Utilisateurs {
/* La zone d'affichage des utilisateurs actifs */
public TextArea ListeUtilisateurs; public TextArea ListeUtilisateurs;
/* Bouton de retour au menu */
public Button MenuButton; public Button MenuButton;
@FXML // ResourceBundle that was given to the FXMLLoader @FXML // ResourceBundle that was given to the FXMLLoader
private ResourceBundle resources; private ResourceBundle resources;
@ -29,18 +37,16 @@ public class View_Utilisateurs {
@FXML // This method is called by the FXMLLoader when initialization is complete @FXML // This method is called by the FXMLLoader when initialization is complete
void initialize() { void initialize() {
ListUtilisateurs utilisateurs = ChatApp.getInstance().getActifUsers(); ListUtilisateurs utilisateurs = ChatApp.getInstance().getActifUsers();
ListeUtilisateurs.setText(""); ListeUtilisateurs.setText("");
for(Utilisateur elem : utilisateurs.getActifUsers()) { for(Utilisateur elem : utilisateurs.getActifUsers()) {
ListeUtilisateurs.appendText( " - " +elem.getPseudo() + '\n'); ListeUtilisateurs.appendText( " - " +elem.getPseudo() + '\n');
} }
ListeUtilisateurs.setEditable(false); ListeUtilisateurs.setEditable(false);
} }
/** /**
* <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p> * <p> Handler permettant de retourner au menu principal sur pression du MenuButton</p>
* @param actionEvent L'utilisateur vient d'appuyer sur le bouton Retour au menu
*/ */
public void retourMenu(ActionEvent actionEvent) { public void retourMenu(ActionEvent actionEvent) {
Stage stage = (Stage) MenuButton.getScene().getWindow(); Stage stage = (Stage) MenuButton.getScene().getWindow();

View file

@ -0,0 +1,32 @@
@startuml
title __CHATAPP's Class Diagram__\n
namespace chatapp {
class chatapp.Launcher {
{static} + main()
}
}
namespace chatapp {
class chatapp.Main {
{static} + main()
+ start()
+ stop()
}
}
chatapp.Main -up-|> javafx.application.Application
chatapp.Main o-- chatapp.Controller.ChatApp : chatapp
right footer
PlantUML diagram generated by SketchIt! (https://bitbucket.org/pmesmeur/sketch.it)
For more information about this tool, please contact philippe.mesmeur@gmail.com
endfooter
@enduml

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?> <?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.GridPane?>
@ -24,24 +26,34 @@
</Text> </Text>
</children> </children>
</HBox> </HBox>
<HBox alignment="CENTER" prefHeight="304.0" prefWidth="600.0" style="-fx-background-color: #3299a8;"> <HBox alignment="CENTER" prefHeight="304.0" prefWidth="598.0" style="-fx-background-color: #3299a8;">
<children> <children>
<GridPane alignment="CENTER" prefHeight="302.0" prefWidth="279.0"> <GridPane alignment="CENTER" prefHeight="275.0" prefWidth="448.0">
<columnConstraints> <columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="123.19998779296876" vgrow="SOMETIMES" /> <RowConstraints maxHeight="254.19998168945312" minHeight="10.0" prefHeight="111.80001831054688" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="107.20001220703125" vgrow="SOMETIMES" /> <RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="69.39998168945314" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="33.60002441406249" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="27.400000000000034" vgrow="SOMETIMES" />
<RowConstraints maxHeight="217.80000152587894" minHeight="10.0" prefHeight="79.39999999999998" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="2" /> <TextField fx:id="pseudonyme" prefHeight="26.0" prefWidth="447.0" promptText="Pseudonyme" GridPane.columnSpan="3" />
<Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="287.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="2" GridPane.rowIndex="1"> <Button fx:id="connexionButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#connexion" prefHeight="38.0" prefWidth="453.0" style="-fx-background-color: #b0c926;" text="Connexion" textFill="#3299a8" GridPane.columnSpan="3" GridPane.rowIndex="1">
<font> <font>
<Font name="OCR A Extended" size="27.0" /> <Font name="OCR A Extended" size="27.0" />
</font> </font>
</Button> </Button>
<RadioButton fx:id="remoteButton" mnemonicParsing="false" selected="true" text="Connexion distante" GridPane.columnIndex="1" GridPane.rowIndex="3">
<toggleGroup>
<ToggleGroup fx:id="lieu" />
</toggleGroup>
</RadioButton>
<RadioButton fx:id="localButton" mnemonicParsing="false" text="Connexion locale" toggleGroup="$lieu" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</children> </children>
</GridPane> </GridPane>
</children> </children>

View file

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: chatapp.Launcher

View file

@ -0,0 +1,63 @@
package src.Controller;
import java.util.ArrayList;
/**
* <p>
* Classe permettant de sauvegarder les échanges entre deux utilisateurs
* </p>
*/
public class Historique {
private Utilisateur User1;
private Utilisateur User2;
// Liste conservant les differents échanges
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) {
this.User1 = User1;
this.User2 = User2;
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) {
this.HistoriqueHorodate.add(mh);
}
/**
* <p>
* getter pour recuperer le second utilisateur
* </p>
*/
public Utilisateur getUser2() {
return User2;
}
public void afficher10derniers() {
System.out.println("Demarrage de l'affichage partiel de l'historique");
System.out.println("Il y a actuellement " + HistoriqueHorodate.size() +" elements dans l'historique");
int n =10;
if(HistoriqueHorodate.size()<=10) {
n = HistoriqueHorodate.size();
}
for(int i = 0; i<n;i++) {
String exp = HistoriqueHorodate.get(i).getSource().getPseudo();
String payload = HistoriqueHorodate.get(i).getMessage();
System.out.println(exp+" : "+payload);
}
}
}

View file

@ -0,0 +1,125 @@
package src.Controller;
import java.net.InetAddress;
import java.util.ArrayList;
public class ListUtilisateurs {
private ArrayList<Utilisateur> actifUsers ;
public ListUtilisateurs() {
this.actifUsers = new ArrayList<Utilisateur>() ;
}
/**
* Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
*
* @param u on va rajouter cet utilisateur dans la liste
*/
public void addList(Utilisateur u) {
if((verifierUnicite(u.getPseudo()))) {
this.actifUsers.add(u);
}
}
/**
* Recuperer un utilisateur à partir de son pseudo
*
* @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
*/
public Utilisateur getPseudoList(String pseudo) {
for(Utilisateur elem: this.actifUsers)
{
if (elem.getPseudo().equals(pseudo) ) {
return elem ;
}
}
return null ;
}
public Utilisateur getIPList(InetAddress ip) throws Exception {
for(Utilisateur elem: this.actifUsers)
{
if (elem.getIp().equals(ip) ) {
return elem ;
}
}
throw new Exception("No such user with this IP address") ;
}
/**
* Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
*
* @param u on va supprimer cet utilisateur dans la liste
*/
public void supprimerList(Utilisateur u) {
Boolean Sup = false ;
for(Utilisateur elem: this.actifUsers)
{
if (elem.equals(u) ) {
this.actifUsers.remove(elem);
Sup = true ;
this.afficherListeUtilisateurs();
}
}
if (!Sup) {
System.out.println("Tentative de retirer un objet non contenu dans la liste");
}
}
/**
* Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'
*
* @param ancien correspond au pseudo remplacer
* @param nouveau correspond au nouveau pseudo
*/
public void modifierList(String ancien , String nouveau) {
for(Utilisateur elem: this.actifUsers)
{
if (ancien.equals( elem.getPseudo() ) ) {
this.actifUsers.remove(elem);
elem.setPseudo(nouveau);;
this.addList(elem);
}
}
this.afficherListeUtilisateurs();
}
public Boolean appartient(Utilisateur u) {
return this.actifUsers.contains(u);
}
/**
* Verifie qu'aucun autre utilisateur ne possède le même pseudo
*
* @param u on va supprimer cet utilisateur dans la liste
*/
public Boolean verifierUnicite(String pseudo) {
for(Utilisateur elem: this.actifUsers)
{
if (pseudo.equals( elem.getPseudo() ) ) {
return false ;
}
}
return true;
}
/**
* Méthode affichant la liste des utilisateurs actifs
*
*/
public String afficherListeUtilisateurs() {
System.out.println ("Liste des utilisateurs actifs : ");
String Utilisateur = "" ;
for(Utilisateur elem: this.actifUsers)
{
System.out.println (elem.toString());
Utilisateur += (elem + "\n");
}
return Utilisateur;
}
}

View file

@ -0,0 +1,142 @@
package src.Controller;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.Serializable;
/**
* <p>
* Classe representant les messages envoyés en TCP lors d'une session de clavardage
* </p>
*/
public class MessageHorodate implements Serializable {
private Utilisateur destinataire ;
private Utilisateur source ;
private Date dateHorodatage ;
private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion
private String Message;
/**
* <p>
* Constructeur , le message va etre horodate
* @param destinataire - Destinataire du message
* @param source - Source du message
* @param Message - Message envoye
* </p>
*/
public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) {
this.setDestinataire(destinataire) ;
this.setSource(source) ;
this.setMessage(Message) ;
this.setDateHorodatage(new Date());
this.type = type;
}
public void setDate(Date d) {
this.setDateHorodatage(d);
}
/**
* <p>
* permet de creer une representation string du message
* @return Les differents attributs de la classe sous forme de string
* </p>
*/
@Override
public String toString() {
String Msg = "";
Msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
Msg += ("Source::" + this.getSource()+ "\n") ;
Msg += ("Type::"+ this.type+ "\n");
Msg += ("Date::" + this.dateToString() + "\n") ;
Msg += ("Message::" + this.getMessage() + "\n" );
return Msg ;
}
/**
* <p>
* permet de creer une representation string de la date d'horodatage
* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
* </p>
*/
public String dateToString() {
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
return format.format(this.getDateHorodatage());
}
/**
* <p>
* Permet de re creer un message horodate a partir d'un string
* @return un messageHorodate
* </p>
*/
public static MessageHorodate stringToMessageHorodate(String s) {
String mots[] = s.split("\n");
Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]);
Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]);
int type = Integer.parseInt(mots[2].split("::")[1]);
DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
/*try {
date = format.parse(mots[3].split("::")[1]);
} catch (Exception e) {
e.printStackTrace();
}*/
String payload = "";
for(int i=4; i< mots.length; i++) {
if(mots[i].startsWith("Message::")) {
mots[i]=mots[i].split("::")[1];
}
payload += mots[i]+"\n";
}
MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
//mh.setDate(date);
return mh ;
}
public Utilisateur getSource() {
return source;
}
public void setSource(Utilisateur source) {
this.source = source;
}
public Utilisateur getDestinataire() {
return destinataire;
}
public void setDestinataire(Utilisateur destinataire) {
this.destinataire = destinataire;
}
public String getMessage() {
return Message;
}
public void setMessage(String message) {
Message = message;
}
public int getType() {
return type;
}
public void setType(int Type) {
this.type = type;
}
public Date getDateHorodatage() {
return dateHorodatage;
}
public void setDateHorodatage(Date dateHorodatage) {
this.dateHorodatage = dateHorodatage;
}
}

View file

@ -0,0 +1,77 @@
package src.Controller;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Utilisateur extends Object {
private String pseudo ;
private Integer port;
private InetAddress ip ;
private String id ;
public Utilisateur(String pseudo,Integer port, InetAddress ip ){
this.setPseudo(pseudo) ;
this.setPort(port);
this.ip = ip ;
this.id = ip.getHostName() ;
}
public String getPseudo() {
return pseudo;
}
public void setPseudo(String pseudo) {
this.pseudo = pseudo;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public InetAddress getIp() {
return ip;
}
public String getId() {
return id;
}
@Override
public String toString(){
String s = "";
s+="pseudo " + this.pseudo + " | ";
s+="port " + (this.port).toString() + " | ";
s+="ip " + (this.ip).toString() + " | ";
s+="id " + (this.id).toString() + " | ";
return s;
}
public static Utilisateur stringToUtilisateur(String s) {
String name = "";
Integer port = 0;
String ip = "" ;
String id = "";
String mots[] = s.split(" ");
name=mots[1];
port=Integer.parseInt(mots[4]);
ip=mots[7];
id=mots[10];
Utilisateur user = null;
try {
user = new Utilisateur(name,port,InetAddress.getByName(ip.split("/")[1]));
} catch (UnknownHostException e) {
e.printStackTrace();
}
return user;
}
public Boolean equals(Utilisateur u) {
return this.getId().equals( u.getId() ) ;
}
}

View file

@ -2,10 +2,10 @@
<!-- NewPage --> <!-- NewPage -->
<html lang="fr"> <html lang="fr">
<head> <head>
<!-- Generated by javadoc (13-ea) on Wed Dec 02 12:11:15 CET 2020 --> <!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>All Classes</title> <title>All Classes</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2020-12-02"> <meta name="dc.created" content="2021-01-30">
<meta name="description" content="class index"> <meta name="description" content="class index">
<meta name="generator" content="javadoc/AllClassesIndexWriter"> <meta name="generator" content="javadoc/AllClassesIndexWriter">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"> <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
@ -37,11 +37,12 @@ loadScripts(document, 'script');</script>
<!-- --> <!-- -->
</a> </a>
<ul class="navList" title="Navigation"> <ul class="navList" title="Navigation">
<li><a href="package-summary.html">Package</a></li> <li><a href="index.html">Overview</a></li>
<li>Package</li>
<li>Class</li> <li>Class</li>
<li><a href="overview-tree.html">Tree</a></li> <li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li> <li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li> <li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li> <li><a href="help-doc.html">Help</a></li>
</ul> </ul>
</div> </div>
@ -79,47 +80,132 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</thead> </thead>
<tbody> <tbody>
<tr class="altColor" id="i0"> <tr class="altColor" id="i0">
<td class="colFirst"><a href="ChatApp.html" title="class in &lt;Unnamed&gt;">ChatApp</a></td> <td class="colFirst"><a href="chatapp/View/ChangementPseudo.html" title="class in chatapp.View">ChangementPseudo</a></td>
<th class="colLast" scope="row"> <th class="colLast" scope="row">
<div class="block"> <div class="block">
Classe récapitulant toutes les actions possibles pour un utilisateur</div> Classe representant l'interface graphique permettant de changer de pseudo</div>
</th> </th>
</tr> </tr>
<tr class="rowColor" id="i1"> <tr class="rowColor" id="i1">
<td class="colFirst"><a href="Historique.html" title="class in &lt;Unnamed&gt;">Historique</a></td> <td class="colFirst"><a href="chatapp/Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a></td>
<th class="colLast" scope="row"> <th class="colLast" scope="row">
<div class="block"> <div class="block"> Controller de l'application.</div>
Classe permettant de sauvegarder les échanges entre deux utilisateurs</div>
</th> </th>
</tr> </tr>
<tr class="altColor" id="i2"> <tr class="altColor" id="i2">
<td class="colFirst"><a href="ListUtilisateurs.html" title="class in &lt;Unnamed&gt;">ListUtilisateurs</a></td> <td class="colFirst"><a href="chatapp/View/Clavardage.html" title="class in chatapp.View">Clavardage</a></td>
<th class="colLast" scope="row">&nbsp;</th>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><a href="MessageHorodate.html" title="class in &lt;Unnamed&gt;">MessageHorodate</a></td>
<th class="colLast" scope="row"> <th class="colLast" scope="row">
<div class="block"> <div class="block">
Classe representant les messages envoyés en TCP lors d'une session de clavardage</div> Classe representant l'interface graphique permettant de clavarder avec un utilisateur.</div>
</th>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><a href="chatapp/View/ConnexionScreen.html" title="class in chatapp.View">ConnexionScreen</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe representant l'interface graphique permettant de se connecter.</div>
</th> </th>
</tr> </tr>
<tr class="altColor" id="i4"> <tr class="altColor" id="i4">
<td class="colFirst"><a href="TCPEchange.html" title="class in &lt;Unnamed&gt;">TCPEchange</a></td> <td class="colFirst"><a href="chatapp/Model/DataBase.html" title="class in chatapp.Model">DataBase</a></td>
<th class="colLast" scope="row"> <th class="colLast" scope="row">
<div class="block"> <div class="block">
Classe representant les échanges TCP entre utilisateurs.</div> Classe représentant la Base de données.</div>
</th> </th>
</tr> </tr>
<tr class="rowColor" id="i5"> <tr class="rowColor" id="i5">
<td class="colFirst"><a href="UDPEchange.html" title="class in &lt;Unnamed&gt;">UDPEchange</a></td> <td class="colFirst"><a href="chatapp/View/DemarrerSession.html" title="class in chatapp.View">DemarrerSession</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe representant l'interface graphique permettant de choisir un utilisateur avec qui clavarder.</div>
</th>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><a href="chatapp/View/FenetreSession.html" title="class in chatapp.View">FenetreSession</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe permettant d'ouvrir une nouvelle fenetre afin de clavarder avec un utilisateur.</div>
</th>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><a href="chatapp/Protocol/HttpEchange.html" title="class in chatapp.Protocol">HttpEchange</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe representant les échanges HTTP entre un utilisateur distant et le servlet.</div>
</th>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><a href="chatapp/Launcher.html" title="class in chatapp">Launcher</a></td>
<th class="colLast" scope="row">&nbsp;</th>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><a href="chatapp/Model/ListUtilisateurs.html" title="class in chatapp.Model">ListUtilisateurs</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe représentant la liste des utilisateurs actifs, stockée localement.</div>
</th>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><a href="chatapp/Main.html" title="class in chatapp">Main</a></td>
<th class="colLast" scope="row">
<div class="block">Cette classe extends Application.</div>
</th>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><a href="chatapp/Model/MessageHorodate.html" title="class in chatapp.Model">MessageHorodate</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe représentant les messages envoyés en TCP lors d'une session de clavardage.</div>
</th>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><a href="chatapp/Protocol/RunnerEcouteTCP.html" title="class in chatapp.Protocol">RunnerEcouteTCP</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe permettant de gérer les multiples connexions en TCP.</div>
</th>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><a href="chatapp/Protocol/RunnerEcouteUDP.html" title="class in chatapp.Protocol">RunnerEcouteUDP</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe permettant de gérer les multiples connexions en UDP.</div>
</th>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><a href="chatapp/Protocol/SessionClavardage.html" title="class in chatapp.Protocol">SessionClavardage</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe représentant une session de clavardage.</div>
</th>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><a href="chatapp/Protocol/UDPEchange.html" title="class in chatapp.Protocol">UDPEchange</a></td>
<th class="colLast" scope="row"> <th class="colLast" scope="row">
<div class="block"> <div class="block">
Classe representant les échanges UDP entre utilisateurs.</div> Classe representant les échanges UDP entre utilisateurs.</div>
</th> </th>
</tr> </tr>
<tr class="altColor" id="i6"> <tr class="altColor" id="i16">
<td class="colFirst"><a href="Utilisateur.html" title="class in &lt;Unnamed&gt;">Utilisateur</a></td> <td class="colFirst"><a href="chatapp/Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></td>
<th class="colLast" scope="row">&nbsp;</th> <th class="colLast" scope="row">
<div class="block">
Classe representant un Utilisateur.</div>
</th>
</tr>
<tr class="rowColor" id="i17">
<td class="colFirst"><a href="chatapp/View/View_Menu.html" title="class in chatapp.View">View_Menu</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe representant la page d'accueil.</div>
</th>
</tr>
<tr class="altColor" id="i18">
<td class="colFirst"><a href="chatapp/View/View_Utilisateurs.html" title="class in chatapp.View">View_Utilisateurs</a></td>
<th class="colLast" scope="row">
<div class="block">
Classe representant l'interface graphique permettant d'afficher les utilisateurs actifs</div>
</th>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@ -137,11 +223,12 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<!-- --> <!-- -->
</a> </a>
<ul class="navList" title="Navigation"> <ul class="navList" title="Navigation">
<li><a href="package-summary.html">Package</a></li> <li><a href="index.html">Overview</a></li>
<li>Package</li>
<li>Class</li> <li>Class</li>
<li><a href="overview-tree.html">Tree</a></li> <li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li> <li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li> <li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li> <li><a href="help-doc.html">Help</a></li>
</ul> </ul>
</div> </div>

View file

@ -2,10 +2,10 @@
<!-- NewPage --> <!-- NewPage -->
<html lang="fr"> <html lang="fr">
<head> <head>
<!-- Generated by javadoc (13-ea) on Wed Dec 02 12:11:15 CET 2020 --> <!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>All Packages</title> <title>All Packages</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2020-12-02"> <meta name="dc.created" content="2021-01-30">
<meta name="description" content="package index"> <meta name="description" content="package index">
<meta name="generator" content="javadoc/AllPackagesIndexWriter"> <meta name="generator" content="javadoc/AllPackagesIndexWriter">
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"> <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
@ -37,11 +37,12 @@ loadScripts(document, 'script');</script>
<!-- --> <!-- -->
</a> </a>
<ul class="navList" title="Navigation"> <ul class="navList" title="Navigation">
<li><a href="package-summary.html">Package</a></li> <li><a href="index.html">Overview</a></li>
<li>Package</li>
<li>Class</li> <li>Class</li>
<li><a href="overview-tree.html">Tree</a></li> <li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li> <li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li> <li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li> <li><a href="help-doc.html">Help</a></li>
</ul> </ul>
</div> </div>
@ -79,7 +80,23 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
</thead> </thead>
<tbody> <tbody>
<tr class="altColor"> <tr class="altColor">
<th class="colFirst" scope="row"><a href="package-summary.html">&lt;Unnamed&gt;</a></th> <th class="colFirst" scope="row"><a href="chatapp/package-summary.html">chatapp</a></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="chatapp/Controller/package-summary.html">chatapp.Controller</a></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="chatapp/Model/package-summary.html">chatapp.Model</a></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="chatapp/Protocol/package-summary.html">chatapp.Protocol</a></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="chatapp/View/package-summary.html">chatapp.View</a></th>
<td class="colLast">&nbsp;</td> <td class="colLast">&nbsp;</td>
</tr> </tr>
</tbody> </tbody>
@ -98,11 +115,12 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
<!-- --> <!-- -->
</a> </a>
<ul class="navList" title="Navigation"> <ul class="navList" title="Navigation">
<li><a href="package-summary.html">Package</a></li> <li><a href="index.html">Overview</a></li>
<li>Package</li>
<li>Class</li> <li>Class</li>
<li><a href="overview-tree.html">Tree</a></li> <li><a href="overview-tree.html">Tree</a></li>
<li><a href="deprecated-list.html">Deprecated</a></li> <li><a href="deprecated-list.html">Deprecated</a></li>
<li><a href="index-all.html">Index</a></li> <li><a href="index-files/index-1.html">Index</a></li>
<li><a href="help-doc.html">Help</a></li> <li><a href="help-doc.html">Help</a></li>
</ul> </ul>
</div> </div>

View file

@ -0,0 +1,697 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>ChatApp</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Controller, class: ChatApp">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9,"i10":9,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Controller</a></div>
<h1 title="Class ChatApp" class="title">Class ChatApp</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Controller.ChatApp</div>
</div>
<section class="description">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>java.beans.PropertyChangeListener</code>, <code>java.util.EventListener</code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">ChatApp</span>
extends java.lang.Object
implements java.beans.PropertyChangeListener</pre>
<div class="block"><p> Controller de l'application. C'est par cette méthode que chaque connexion et chaque session sont entamées.
<br>Les différents attributs sont:
<br> - actifsUsers: qui est la liste des utilisateurs actifs actuellement et connus par l'application
<br> - me: qui est l'instance de la classe Utilisateur représentant l'utilisateur se connectant via cette instance de chatapp
<br> - main: l'application de l'interface graphique qui s'occupe d'instancier chatapp
<br> - runnerEcouteTCP: instance de runnerEcouteTCP, Thread permettant de recevoir des demandes de clavardage
<br> - runnerEcouteUDP: instance de runnerEcouteUDP; Thread permettant de communiquer en UDP pour recevoir les demandes de connexion, deconnexion, changements de pseudo et leurs réponses associées
<br> - connecte: booleen indiquant si l'on est connecté sur le reseau ou non
<br> - db: instance permettant de se connecter à la base de donnees centralisée
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<td class="colFirst"><code>java.util.ArrayList&lt;java.lang.String&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#listeCommunication">listeCommunication</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(java.lang.String,java.lang.Integer,javafx.application.Application)">ChatApp</a></span>&#8203;(java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
javafx.application.Application&nbsp;main)</code></th>
<td class="colLast">
<div class="block">Constructeur de l'application de chat</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#activerEcouteTCP()">activerEcouteTCP</a></span>()</code></th>
<td class="colLast">
<div class="block">Lance un thread pour écouter les requêtes TCP
<br> Informe le pcs que chatapp écoute les notifications qu'il envoie</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#activerEcouteUDP()">activerEcouteUDP</a></span>()</code></th>
<td class="colLast">
<div class="block">Lance le thread pour réceptionner les requetes UDP</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#connexion(java.lang.String)">connexion</a></span>&#8203;(java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Méthode permettant d'appeler la fonction de connexion adequate selon que l'on est en externe ou en interne</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#connexionInterne(java.lang.String)">connexionInterne</a></span>&#8203;(java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Méthode appelée lors de la connexion de l'utilisateur en INTERNE,
<br> Va prevenir les autres utlisateurs du réseau de l'arrivée de l'utilisateur sur celui-ci</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>java.util.ArrayList&lt;<a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#createListeCommunicationPossible()">createListeCommunicationPossible</a></span>()</code></th>
<td class="colLast">
<div class="block">
Un utilisateur ne peut pas ouvrir plusieurs sessions de clavardage avec le même utilisateur.</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#deconnexion()">deconnexion</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode appelée lors de la déconnexion de l'utilisateur.</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#deconnexionInterne()">deconnexionInterne</a></span>()</code></th>
<td class="colLast">
<div class="block">Methode appelee lors de la deconnexion en INTERNE de l'utilisateur.</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#demarrerSession(java.lang.String)">demarrerSession</a></span>&#8203;(java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Démarre une session de clavardage avec l'utilisateur dont le pseudo est entré en parametre</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code><a href="../Model/ListUtilisateurs.html" title="class in chatapp.Model">ListUtilisateurs</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getActifUsers()">getActifUsers</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : actifUsers (Liste des utilisateurs actifs)</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>static <a href="ChatApp.html" title="class in chatapp.Controller">ChatApp</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getInstance()">getInstance</a></span>()</code></th>
<td class="colLast">
<div class="block"> Methode permettant de récupérer l'instance de chatapp qui a ete créée au préalable</div>
</td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>static <a href="ChatApp.html" title="class in chatapp.Controller">ChatApp</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getInstance(java.lang.String,java.lang.Integer,javafx.application.Application)">getInstance</a></span>&#8203;(java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
javafx.application.Application&nbsp;main)</code></th>
<td class="colLast">
<div class="block">Methode permettant de créer qu'une seule instance de chatapp</div>
</td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>javafx.application.Application</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMain()">getMain</a></span>()</code></th>
<td class="colLast">
<div class="block"> Getter : Main
Permet de récuperer stage de l'interface graphique qui a crée l'instance</div>
</td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code><a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMe()">getMe</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : Chatapp</div>
</td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isConnecte()">isConnecte</a></span>()</code></th>
<td class="colLast">
<div class="block"> Getter : Connecte
<br> Permet de savoir si l'on est connecté</div>
</td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isExterne()">isExterne</a></span>()</code></th>
<td class="colLast">
<div class="block"> Getter : Externe
<br> Permet de savoir si on est en externe ou en interne</div>
</td>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#modifierPseudo(java.lang.String)">modifierPseudo</a></span>&#8203;(java.lang.String&nbsp;nouveau)</code></th>
<td class="colLast">
<div class="block">Methode appelée pour modifier le pseudo et fait appel a la fonction adequate selon que l'on est en interne ou en externe</div>
</td>
</tr>
<tr class="altColor" id="i16">
<td class="colFirst"><code>java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#modifierPseudoInterne(java.lang.String)">modifierPseudoInterne</a></span>&#8203;(java.lang.String&nbsp;nouveau)</code></th>
<td class="colLast">
<div class="block">Modification du pseudo de l'utilisateur en INTERNE
<br> Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</div>
</td>
</tr>
<tr class="rowColor" id="i17">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#propertyChange(java.beans.PropertyChangeEvent)">propertyChange</a></span>&#8203;(java.beans.PropertyChangeEvent&nbsp;evt)</code></th>
<td class="colLast">
<div class="block">Handler des différents évenements que chatapp écoute</div>
</td>
</tr>
<tr class="altColor" id="i18">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setExterne(boolean)">setExterne</a></span>&#8203;(boolean&nbsp;externe)</code></th>
<td class="colLast">
<div class="block"> Setter : Externe
<br> Permet de définir si on est un utilisateur externe ou non</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<li class="blockList">
<section class="fieldDetails"><a id="field.detail">
<!-- -->
</a>
<h2>Field Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="listeCommunication">listeCommunication</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.util.ArrayList&lt;java.lang.String&gt;</span>&nbsp;<span class="memberName">listeCommunication</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(java.lang.String,java.lang.Integer,javafx.application.Application)">ChatApp</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">ChatApp</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
javafx.application.Application&nbsp;main)</span></div>
<div class="block"><p>Constructeur de l'application de chat</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Pseudo de l'utilisateur</dd>
<dd><code>port</code> - Port de communication</dd>
<dd><code>main</code> - L'Application main</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="isConnecte()">isConnecte</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">isConnecte</span>()</div>
<div class="block"><p> Getter : Connecte
<br> Permet de savoir si l'on est connecté</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>TRUE si connecté FALSE sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getInstance(java.lang.String,java.lang.Integer,javafx.application.Application)">getInstance</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="ChatApp.html" title="class in chatapp.Controller">ChatApp</a></span>&nbsp;<span class="memberName">getInstance</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
javafx.application.Application&nbsp;main)</span></div>
<div class="block"><p>Methode permettant de créer qu'une seule instance de chatapp</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le pseudonyme que l'on souhaite donner à l'utilisateur</dd>
<dd><code>port</code> - Le port auquel on souhaite réceptionner les requêtees UDP</dd>
<dd><code>main</code> - Le stage de l'interface graphique qui crée l'instance</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Une instance de chatapp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getInstance()">getInstance</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="ChatApp.html" title="class in chatapp.Controller">ChatApp</a></span>&nbsp;<span class="memberName">getInstance</span>()</div>
<div class="block"><p> Methode permettant de récupérer l'instance de chatapp qui a ete créée au préalable</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'instance de chatapp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="modifierPseudo(java.lang.String)">modifierPseudo</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">modifierPseudo</span>&#8203;(<span class="arguments">java.lang.String&nbsp;nouveau)</span>
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>Methode appelée pour modifier le pseudo et fait appel a la fonction adequate selon que l'on est en interne ou en externe</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>nouveau</code> - Nouveau pseudo avec lequel on souhaite se renommer</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>TRUE si la modification du pseudo a réussi, FALSE sinon</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="modifierPseudoInterne(java.lang.String)">modifierPseudoInterne</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">modifierPseudoInterne</span>&#8203;(<span class="arguments">java.lang.String&nbsp;nouveau)</span>
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>Modification du pseudo de l'utilisateur en INTERNE
<br> Envoie en broadcast ses informations utilisateurs et son nouveau pseudo</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>nouveau</code> - Le Nouveau pseudo</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>False si modiferPseudo a échoué, True sinon</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="connexion(java.lang.String)">connexion</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">connexion</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo)</span>
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>Méthode permettant d'appeler la fonction de connexion adequate selon que l'on est en externe ou en interne</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le pseudo avec lequel l'on souhaite se connecter</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True si la connexion a ete autorisée, false sinon</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="connexionInterne(java.lang.String)">connexionInterne</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">connexionInterne</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo)</span>
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>Méthode appelée lors de la connexion de l'utilisateur en INTERNE,
<br> Va prevenir les autres utlisateurs du réseau de l'arrivée de l'utilisateur sur celui-ci</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le pseudonyme avec lequel l'utilisateur souhaite se connecter</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>False si Connexion a échoué, True sinon</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="activerEcouteTCP()">activerEcouteTCP</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">activerEcouteTCP</span>()</div>
<div class="block"><p>Lance un thread pour écouter les requêtes TCP
<br> Informe le pcs que chatapp écoute les notifications qu'il envoie</p></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="demarrerSession(java.lang.String)">demarrerSession</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">demarrerSession</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo)</span></div>
<div class="block"><p>Démarre une session de clavardage avec l'utilisateur dont le pseudo est entré en parametre</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le pseudo de l'utilisateur avec lequel on souhaite communiquer</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="activerEcouteUDP()">activerEcouteUDP</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">activerEcouteUDP</span>()</div>
<div class="block"><p>Lance le thread pour réceptionner les requetes UDP</p></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="deconnexion()">deconnexion</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">deconnexion</span>()
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>Méthode appelée lors de la déconnexion de l'utilisateur.
<br>La methode va appeler la fonction adequate selon que l'on est en interne ou en externe</p></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="deconnexionInterne()">deconnexionInterne</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">deconnexionInterne</span>()
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>Methode appelee lors de la deconnexion en INTERNE de l'utilisateur.
<br>Il va prevenir les utilisateurs du reseau de son depart.</p></div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getMe()">getMe</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getMe</span>()</div>
<div class="block">Getter : Chatapp</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Utilisateur associée a ChatApp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getActifUsers()">getActifUsers</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../Model/ListUtilisateurs.html" title="class in chatapp.Model">ListUtilisateurs</a></span>&nbsp;<span class="memberName">getActifUsers</span>()</div>
<div class="block">Getter : actifUsers (Liste des utilisateurs actifs)</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Liste des utilisateurs actifs associée a ChatApp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="propertyChange(java.beans.PropertyChangeEvent)">propertyChange</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">propertyChange</span>&#8203;(<span class="arguments">java.beans.PropertyChangeEvent&nbsp;evt)</span></div>
<div class="block"><p>Handler des différents évenements que chatapp écoute</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>propertyChange</code>&nbsp;in interface&nbsp;<code>java.beans.PropertyChangeListener</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>evt</code> - L'évenement qui a ete indiqué par le pcs</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getMain()">getMain</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">javafx.application.Application</span>&nbsp;<span class="memberName">getMain</span>()</div>
<div class="block"><p> Getter : Main
Permet de récuperer stage de l'interface graphique qui a crée l'instance
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le stage de l'interface graphique qui a crée l'instance</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="isExterne()">isExterne</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">isExterne</span>()</div>
<div class="block"><p> Getter : Externe
<br> Permet de savoir si on est en externe ou en interne</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>TRUE si Externe FALSE sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setExterne(boolean)">setExterne</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setExterne</span>&#8203;(<span class="arguments">boolean&nbsp;externe)</span></div>
<div class="block"><p> Setter : Externe
<br> Permet de définir si on est un utilisateur externe ou non</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>externe</code> - TRUE si Externe FALSE sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="createListeCommunicationPossible()">createListeCommunicationPossible</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.util.ArrayList&lt;<a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&gt;</span>&nbsp;<span class="memberName">createListeCommunicationPossible</span>()</div>
<div class="block"><p>
Un utilisateur ne peut pas ouvrir plusieurs sessions de clavardage avec le même utilisateur.
<br> Cette methode compare les communications en cours pour retourner une liste d'utilisateurs avec
lesquels les communications sont possibles
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Une liste d'utilisateurs avec lesquels il peut communiquer</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,126 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>chatapp.Controller</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Controller">
<meta name="generator" content="javadoc/PackageWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="package-declaration">
<script type="text/javascript">var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<main role="main">
<div class="header">
<h1 title="Package" class="title">Package&nbsp;chatapp.Controller</h1>
</div>
<div class="contentContainer">
<section class="summary">
<ul class="blockList">
<li class="blockList">
<div class="typeSummary">
<table>
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="ChatApp.html" title="class in chatapp.Controller">ChatApp</a></th>
<td class="colLast">
<div class="block"> Controller de l'application.</div>
</td>
</tr>
</tbody>
</table>
</div>
</li>
</ul>
</section>
</div>
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,115 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>chatapp.Controller Class Hierarchy</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="tree: package: chatapp.Controller">
<meta name="generator" content="javadoc/PackageTreeWriter">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="package-tree">
<script type="text/javascript">var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<main role="main">
<div class="header">
<h1 class="title">Hierarchy For Package chatapp.Controller</h1>
<span class="packageHierarchyLabel">Package Hierarchies:</span>
<ul class="horizontal">
<li><a href="../../overview-tree.html">All Packages</a></li>
</ul>
</div>
<div class="contentContainer">
<section class="hierarchy">
<h2 title="Class Hierarchy">Class Hierarchy</h2>
<ul>
<li class="circle">java.lang.Object
<ul>
<li class="circle">chatapp.Controller.<a href="ChatApp.html" title="class in chatapp.Controller"><span class="typeNameLink">ChatApp</span></a> (implements java.beans.PropertyChangeListener)</li>
</ul>
</li>
</ul>
</section>
</div>
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,249 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>Launcher</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp, class: Launcher">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../script.js"></script>
<script type="text/javascript" src="../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../deprecated-list.html">Deprecated</a></li>
<li><a href="../index-files/index-1.html">Index</a></li>
<li><a href="../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp</a></div>
<h1 title="Class Launcher" class="title">Class Launcher</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Launcher</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">Launcher</span>
extends java.lang.Object</pre>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">Launcher</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#main(java.lang.String%5B%5D)">main</a></span>&#8203;(java.lang.String[]&nbsp;args)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;()">Launcher</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">Launcher</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="main(java.lang.String[])">main</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">main</span>&#8203;(<span class="arguments">java.lang.String[]&nbsp;args)</span></div>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../deprecated-list.html">Deprecated</a></li>
<li><a href="../index-files/index-1.html">Index</a></li>
<li><a href="../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

328
Javadoc/chatapp/Main.html Normal file
View file

@ -0,0 +1,328 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>Main</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp, class: Main">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../script.js"></script>
<script type="text/javascript" src="../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":9,"i1":10,"i2":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../deprecated-list.html">Deprecated</a></li>
<li><a href="../index-files/index-1.html">Index</a></li>
<li><a href="../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp</a></div>
<h1 title="Class Main" class="title">Class Main</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">javafx.application.Application
<div class="inheritance">chatapp.Main</div>
</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">Main</span>
extends javafx.application.Application</pre>
<div class="block">Cette classe extends Application.
<br> Elle va permettre de faire le lien avec JavaFX.</div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li class="blockList">
<section class="nestedClassSummary"><a id="nested.class.summary">
<!-- -->
</a>
<h2>Nested Class Summary</h2>
<div class="inheritedList">
<h2>Nested classes/interfaces inherited from class&nbsp;javafx.application.Application</h2>
<a id="nested.classes.inherited.from.class.javafx.application.Application">
<!-- -->
</a><code>javafx.application.Application.Parameters</code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="inheritedList">
<h3>Fields inherited from class&nbsp;javafx.application.Application</h3>
<a id="fields.inherited.from.class.javafx.application.Application">
<!-- -->
</a><code>STYLESHEET_CASPIAN, STYLESHEET_MODENA</code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">Main</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#main(java.lang.String%5B%5D)">main</a></span>&#8203;(java.lang.String[]&nbsp;args)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#start(javafx.stage.Stage)">start</a></span>&#8203;(javafx.stage.Stage&nbsp;primaryStage)</code></th>
<td class="colLast">
<div class="block">Permet de lancer la fenetre principale de l'application</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
<td class="colLast">
<div class="block"> Handler associe a la fermeture de l'application</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;javafx.application.Application</h3>
<a id="methods.inherited.from.class.javafx.application.Application">
<!-- -->
</a><code>getHostServices, getParameters, getUserAgentStylesheet, init, launch, launch, notifyPreloader, setUserAgentStylesheet</code></div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;()">Main</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">Main</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="start(javafx.stage.Stage)">start</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">start</span>&#8203;(<span class="arguments">javafx.stage.Stage&nbsp;primaryStage)</span>
throws <span class="exceptions">java.lang.Exception</span></div>
<div class="block">Permet de lancer la fenetre principale de l'application</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>start</code>&nbsp;in class&nbsp;<code>javafx.application.Application</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>primaryStage</code> - notre fenetre principale</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="stop()">stop</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">stop</span>()
throws <span class="exceptions">java.lang.Exception</span></div>
<div class="block"><p> Handler associe a la fermeture de l'application</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>stop</code>&nbsp;in class&nbsp;<code>javafx.application.Application</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="main(java.lang.String[])">main</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">main</span>&#8203;(<span class="arguments">java.lang.String[]&nbsp;args)</span></div>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../deprecated-list.html">Deprecated</a></li>
<li><a href="../index-files/index-1.html">Index</a></li>
<li><a href="../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,508 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>DataBase</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Model, class: DataBase">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Model</a></div>
<h1 title="Class DataBase" class="title">Class DataBase</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Model.DataBase</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">DataBase</span>
extends java.lang.Object</pre>
<div class="block"><p>
Classe représentant la Base de données.
Celle-ci stocke la liste des utilisateurs ainsi que les échanges entre eux
</p>
Format de la table Utilisateurs
<br> +--------+-------------+---------+---------------------+
<br> | ID | Pseudo | Actif | Date d'inscription |
<br> +--------+-------------+---------+---------------------+
<br> - Id : Correspond à l'ID de l'utilisateur
<br> - Pseudo : Dernier Pseudo utilisé pour cet ID, va etre remplacé par le pseudo actuel avec majPseudo
<br> - Date d'inscription : Comme son nom l'indique le jour de l'inscription de cet utilisateur
<br> - Actif : Boolean indiquant si l'utilisateur est actif
<br>
<br> Chaque communication entres utilisateurs sera stockée dans une table de la forme
<br> +--------------+--------+---------+--------------+
<br> | Destinataire | Source | Message | Date d'envoi |
<br> +--------------+--------+---------+--------------+
<br> - Destinataire : Id du destinataire du message
<br> - Source : Id de celui qui envoie le message
<br> - Message : Msg envoyé
<br> - Date d'envoi : Date a laquelle Source a envoyé le message à destinataire</div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">DataBase</a></span>()</code></th>
<td class="colLast">
<div class="block">Constructeur de la database
<br> On installe le driver et on établit la connection.</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ajoutHistorique(java.lang.String,java.lang.String,java.lang.String)">ajoutHistorique</a></span>&#8203;(java.lang.String&nbsp;iDdest,
java.lang.String&nbsp;iDsrc,
java.lang.String&nbsp;msg)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnée</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ajoutUtilisateurs(java.lang.String,java.lang.String)">ajoutUtilisateurs</a></span>&#8203;(java.lang.String&nbsp;iD,
java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Méthode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas déjà</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#creationTableHistorique(java.lang.String,java.lang.String)">creationTableHistorique</a></span>&#8203;(java.lang.String&nbsp;iD1,
java.lang.String&nbsp;iD2)</code></th>
<td class="colLast">
<div class="block">Methode permettant de créer une table pour stocker les messages entre deux utilisateurs</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>static <a href="DataBase.html" title="class in chatapp.Model">DataBase</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getInstance()">getInstance</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode permettant de renvoyer une instance de la classe DataBase</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getNomTable(chatapp.Model.Utilisateur,chatapp.Model.Utilisateur)">getNomTable</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u1,
<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u2)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de récupérer le nom de la table où sont stockés les messages de 2 utilisateurs.</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#idExiste(java.lang.String)">idExiste</a></span>&#8203;(java.lang.String&nbsp;iD)</code></th>
<td class="colLast">
<div class="block">Methode permettant de savoir si un utilisateur existe dans la base de donnée 'Utilisateurs'</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#majPseudo(java.lang.String,java.lang.String)">majPseudo</a></span>&#8203;(java.lang.String&nbsp;iD,
java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#majUtilisateursActifs(java.lang.Boolean,java.lang.String)">majUtilisateursActifs</a></span>&#8203;(java.lang.Boolean&nbsp;Connecte,
java.lang.String&nbsp;Id)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de mettre a jour les utilisateurs actuellement actif</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#recupMsg(java.lang.String,java.lang.String,int,int)">recupMsg</a></span>&#8203;(java.lang.String&nbsp;iD,
java.lang.String&nbsp;iDdestinataire,
int&nbsp;deb,
int&nbsp;fin)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de récupérer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#recupNMsg(java.lang.String,java.lang.String,int)">recupNMsg</a></span>&#8203;(java.lang.String&nbsp;iD,
java.lang.String&nbsp;iDdestinataire,
int&nbsp;n)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de récupérer les N derniers messages envoyés entre 2 utilisateurs</div>
</td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>java.lang.Integer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#tailleBDD(java.lang.String)">tailleBDD</a></span>&#8203;(java.lang.String&nbsp;nomTable)</code></th>
<td class="colLast">
<div class="block">Cette méthode sert à récupérer la taille d'un base de donnée</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;()">DataBase</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">DataBase</span>()</div>
<div class="block">Constructeur de la database
<br> On installe le driver et on établit la connection.</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="getInstance()">getInstance</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="DataBase.html" title="class in chatapp.Model">DataBase</a></span>&nbsp;<span class="memberName">getInstance</span>()</div>
<div class="block">Méthode permettant de renvoyer une instance de la classe DataBase</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'instance du singleton DataBase.</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="creationTableHistorique(java.lang.String,java.lang.String)">creationTableHistorique</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">creationTableHistorique</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD1,
java.lang.String&nbsp;iD2)</span></div>
<div class="block">Methode permettant de créer une table pour stocker les messages entre deux utilisateurs</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD1</code> - Id du premier utilisateur</dd>
<dd><code>iD2</code> - Id du second utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="majPseudo(java.lang.String,java.lang.String)">majPseudo</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">majPseudo</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD,
java.lang.String&nbsp;pseudo)</span></div>
<div class="block">Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD</code> - Id de l'utilisateur qui vient de changer de pseudo</dd>
<dd><code>pseudo</code> - Nouveau Pseudo de l'utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="ajoutHistorique(java.lang.String,java.lang.String,java.lang.String)">ajoutHistorique</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">ajoutHistorique</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iDdest,
java.lang.String&nbsp;iDsrc,
java.lang.String&nbsp;msg)</span></div>
<div class="block">Méthode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnée</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iDdest</code> - Id de l'utilisateur Destinataire du message</dd>
<dd><code>iDsrc</code> - Id de celui qui envoi le message</dd>
<dd><code>msg</code> - Message envoye entre les deux utilisateurs</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="ajoutUtilisateurs(java.lang.String,java.lang.String)">ajoutUtilisateurs</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">ajoutUtilisateurs</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD,
java.lang.String&nbsp;pseudo)</span></div>
<div class="block">Méthode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas déjà</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD</code> - Id de l'utilisateur que l'on veut rajouter</dd>
<dd><code>pseudo</code> - Pseudo actuelle de l'utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="majUtilisateursActifs(java.lang.Boolean,java.lang.String)">majUtilisateursActifs</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">majUtilisateursActifs</span>&#8203;(<span class="arguments">java.lang.Boolean&nbsp;Connecte,
java.lang.String&nbsp;Id)</span></div>
<div class="block">Méthode permettant de mettre a jour les utilisateurs actuellement actif</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>Id</code> - Id de l'utilisateur qui vient de se connecter ou déconnecter</dd>
<dd><code>Connecte</code> - Boolean true si il est connecté , false sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="recupNMsg(java.lang.String,java.lang.String,int)">recupNMsg</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">recupNMsg</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD,
java.lang.String&nbsp;iDdestinataire,
int&nbsp;n)</span></div>
<div class="block">Méthode permettant de récupérer les N derniers messages envoyés entre 2 utilisateurs</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD</code> - Utilisateur associé a ChatApp</dd>
<dd><code>iDdestinataire</code> - Celui avec qui correspond ID</dd>
<dd><code>n</code> - Le nombre de messages souhaités</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Les N derniers Messages</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="recupMsg(java.lang.String,java.lang.String,int,int)">recupMsg</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">recupMsg</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD,
java.lang.String&nbsp;iDdestinataire,
int&nbsp;deb,
int&nbsp;fin)</span></div>
<div class="block">Méthode permettant de récupérer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD</code> - Utilisateur associé a ChatApp</dd>
<dd><code>iDdestinataire</code> - Celui avec qui correspond ID</dd>
<dd><code>deb</code> - On veut les messages à partir de l'indice deb</dd>
<dd><code>fin</code> - On veut les messages jusqu'a l'indice fin</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Les messages d'une plage de donnée [deb,fin]</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="tailleBDD(java.lang.String)">tailleBDD</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Integer</span>&nbsp;<span class="memberName">tailleBDD</span>&#8203;(<span class="arguments">java.lang.String&nbsp;nomTable)</span></div>
<div class="block">Cette méthode sert à récupérer la taille d'un base de donnée</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>nomTable</code> - Nom de la table de donnée dont on veut récuperer le nom</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Taille de la BDD</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="idExiste(java.lang.String)">idExiste</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">idExiste</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD)</span></div>
<div class="block">Methode permettant de savoir si un utilisateur existe dans la base de donnée 'Utilisateurs'</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD</code> - On recherche l'utilisateur dont l'ID est ID</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True si l'utilisateur existe , False sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getNomTable(chatapp.Model.Utilisateur,chatapp.Model.Utilisateur)">getNomTable</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">getNomTable</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u1,
<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u2)</span></div>
<div class="block">Méthode permettant de récupérer le nom de la table où sont stockés les messages de 2 utilisateurs.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u1</code> - Un des 2 utilisateurs</dd>
<dd><code>u2</code> - Le second utilisateur</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le nom de la table des historiques</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,439 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>ListUtilisateurs</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Model, class: ListUtilisateurs">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Model</a></div>
<h1 title="Class ListUtilisateurs" class="title">Class ListUtilisateurs</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Model.ListUtilisateurs</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">ListUtilisateurs</span>
extends java.lang.Object</pre>
<div class="block"><p>
Classe représentant la liste des utilisateurs actifs, stockée localement.
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">ListUtilisateurs</a></span>()</code></th>
<td class="colLast">
<div class="block">Constructeur : initialise la liste 'actifUsers'</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addList(chatapp.Model.Utilisateur)">addList</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</code></th>
<td class="colLast">
<div class="block">Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#afficherListeUtilisateurs()">afficherListeUtilisateurs</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode affichant la liste des utilisateurs actifs</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#appartient(chatapp.Model.Utilisateur)">appartient</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de savoir si un utilisateur est contenu dans la liste 'actifUsers'</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>java.util.ArrayList&lt;<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getActifUsers()">getActifUsers</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : ActifUsers (liste des utilisateurs actifs)</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getIDList(java.lang.String)">getIDList</a></span>&#8203;(java.lang.String&nbsp;iD)</code></th>
<td class="colLast">
<div class="block">Récupérer un utilisateur à partir de son ID</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getIPList(java.net.InetAddress)">getIPList</a></span>&#8203;(java.net.InetAddress&nbsp;ip)</code></th>
<td class="colLast">
<div class="block">Récupérer un utilisateur à partir de son addresse IP</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPseudoList(java.lang.String)">getPseudoList</a></span>&#8203;(java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Récupérer un utilisateur à partir de son pseudo.</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#modifierList(java.lang.String,java.lang.String)">modifierList</a></span>&#8203;(java.lang.String&nbsp;ancien,
java.lang.String&nbsp;nouveau)</code></th>
<td class="colLast">
<div class="block">Modifier le pseudo d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#supprimerList(chatapp.Model.Utilisateur)">supprimerList</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</code></th>
<td class="colLast">
<div class="block">Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#verifierUnicite(java.lang.String)">verifierUnicite</a></span>&#8203;(java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Vérifie qu'aucun autre utilisateur ne posséde le meme pseudo</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;()">ListUtilisateurs</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">ListUtilisateurs</span>()</div>
<div class="block">Constructeur : initialise la liste 'actifUsers'</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="addList(chatapp.Model.Utilisateur)">addList</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">addList</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</span></div>
<div class="block">Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u</code> - On va rajouter cet utilisateur dans la liste</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getPseudoList(java.lang.String)">getPseudoList</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getPseudoList</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo)</span></div>
<div class="block">Récupérer un utilisateur à partir de son pseudo.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Pseudo de l'utilisateur que l'on souhaite retrouver</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'utilisateur associé à ce pseudo</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getIPList(java.net.InetAddress)">getIPList</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getIPList</span>&#8203;(<span class="arguments">java.net.InetAddress&nbsp;ip)</span>
throws <span class="exceptions">java.lang.Exception</span></div>
<div class="block">Récupérer un utilisateur à partir de son addresse IP</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ip</code> - Adresse IP de l'utilisateur que l'on souhaite retrouver</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'utilisateur associé à l'adresse IP</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - No such user with this IP address</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getIDList(java.lang.String)">getIDList</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getIDList</span>&#8203;(<span class="arguments">java.lang.String&nbsp;iD)</span>
throws <span class="exceptions">java.lang.Exception</span></div>
<div class="block">Récupérer un utilisateur à partir de son ID</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>iD</code> - L'ID de l'utilisateur que l'on souhaite retrouver</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'utilisateur associé à l'adresse ID</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.lang.Exception</code> - No such user with this ID</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="supprimerList(chatapp.Model.Utilisateur)">supprimerList</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">supprimerList</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</span></div>
<div class="block">Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u</code> - On va supprimer cet utilisateur dans la liste</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="modifierList(java.lang.String,java.lang.String)">modifierList</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">modifierList</span>&#8203;(<span class="arguments">java.lang.String&nbsp;ancien,
java.lang.String&nbsp;nouveau)</span></div>
<div class="block">Modifier le pseudo d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers'</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>ancien</code> - Pseudo à remplacer</dd>
<dd><code>nouveau</code> - Nouveau pseudo</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="appartient(chatapp.Model.Utilisateur)">appartient</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">appartient</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</span></div>
<div class="block">Méthode permettant de savoir si un utilisateur est contenu dans la liste 'actifUsers'</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u</code> - On souhaite savoir si cet utilisateur appartient a la liste</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True si il appartient, False sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="verifierUnicite(java.lang.String)">verifierUnicite</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">verifierUnicite</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo)</span></div>
<div class="block">Vérifie qu'aucun autre utilisateur ne posséde le meme pseudo</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Pseudo dont on veut vérifier l'unicité</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True si aucun utilisateur de la liste possède ce pseudo, False sinon</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="afficherListeUtilisateurs()">afficherListeUtilisateurs</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">afficherListeUtilisateurs</span>()</div>
<div class="block">Méthode affichant la liste des utilisateurs actifs</div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getActifUsers()">getActifUsers</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.util.ArrayList&lt;<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&gt;</span>&nbsp;<span class="memberName">getActifUsers</span>()</div>
<div class="block">Getter : ActifUsers (liste des utilisateurs actifs)</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>La liste des utilisateurs actifs</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,551 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>MessageHorodate</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Model, class: MessageHorodate">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Model</a></div>
<h1 title="Class MessageHorodate" class="title">Class MessageHorodate</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Model.MessageHorodate</div>
</div>
<section class="description">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>java.io.Serializable</code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">MessageHorodate</span>
extends java.lang.Object
implements java.io.Serializable</pre>
<div class="block"><p>
Classe représentant les messages envoyés en TCP lors d'une session de clavardage.
<br> Un message Horodaté est composé :
<br> - d'un destintaire,
<br> - d'une source,
<br> - d'un message,
<br> - d'une date d'envoi.
</p></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../serialized-form.html#chatapp.Model.MessageHorodate">Serialized Form</a></dd>
</dl>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(chatapp.Model.Utilisateur,chatapp.Model.Utilisateur,java.lang.String,int)">MessageHorodate</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;destinataire,
<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;source,
java.lang.String&nbsp;message,
int&nbsp;type)</code></th>
<td class="colLast">
<div class="block">
Constructeur , le message va etre horodaté</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#dateToString()">dateToString</a></span>()</code></th>
<td class="colLast">
<div class="block">
Permet de créer une représentation string de la date d'horodatage</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>java.util.Date</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDateHorodatage()">getDateHorodatage</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter: Date d'horodatage</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDestinataire()">getDestinataire</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter: Utilisateur Destinataire</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMessage()">getMessage</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter: Message envoye</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSource()">getSource</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter: Utilisateur Source</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getType()">getType</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter: 'Type' du message</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDate(java.util.Date)">setDate</a></span>&#8203;(java.util.Date&nbsp;d)</code></th>
<td class="colLast">
<div class="block">Setter: Date d'horodatage
<br> On modifie le date d'horodatage</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDateHorodatage(java.util.Date)">setDateHorodatage</a></span>&#8203;(java.util.Date&nbsp;dateHorodatage)</code></th>
<td class="colLast">
<div class="block">Setter: Date d'horodatage
<br> On modifie le date.</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDestinataire(chatapp.Model.Utilisateur)">setDestinataire</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;destinataire)</code></th>
<td class="colLast">
<div class="block">Setter: Utilisateur Destinataire
<br> On modifie l'utilisateur Destinataire</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setMessage(java.lang.String)">setMessage</a></span>&#8203;(java.lang.String&nbsp;message)</code></th>
<td class="colLast">
<div class="block">Setter: Message envoye
<br> On modifie le message envoyé</div>
</td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setSource(chatapp.Model.Utilisateur)">setSource</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;source)</code></th>
<td class="colLast">
<div class="block">Setter: Utilisateur Source
<br> On modifie l'utilisateur source</div>
</td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setType(int)">setType</a></span>&#8203;(int&nbsp;Type)</code></th>
<td class="colLast">
<div class="block">Setter: 'Type' du message horodate
<br> On modifie l'integer 'Type'</div>
</td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code>static <a href="MessageHorodate.html" title="class in chatapp.Model">MessageHorodate</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stringToMessageHorodate(java.lang.String)">stringToMessageHorodate</a></span>&#8203;(java.lang.String&nbsp;s)</code></th>
<td class="colLast">
<div class="block">
Permet de re créer un message horodaté à partir d'un string</div>
</td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
<td class="colLast">
<div class="block">
Permet de créer une représentation string du message</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(chatapp.Model.Utilisateur,chatapp.Model.Utilisateur,java.lang.String,int)">MessageHorodate</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">MessageHorodate</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;destinataire,
<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;source,
java.lang.String&nbsp;message,
int&nbsp;type)</span></div>
<div class="block"><p>
Constructeur , le message va etre horodaté</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>destinataire</code> - - Destinataire du message</dd>
<dd><code>source</code> - - Source du message</dd>
<dd><code>message</code> - - Message envoyé</dd>
<dd><code>type</code> - - Le type du message
</p></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="setDate(java.util.Date)">setDate</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setDate</span>&#8203;(<span class="arguments">java.util.Date&nbsp;d)</span></div>
<div class="block">Setter: Date d'horodatage
<br> On modifie le date d'horodatage</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>d</code> - La nouvelle date d'horodatage</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="toString()">toString</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">toString</span>()</div>
<div class="block"><p>
Permet de créer une représentation string du message</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Les différents attributs de la classe sous forme de string
</p></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="dateToString()">dateToString</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">dateToString</span>()</div>
<div class="block"><p>
Permet de créer une représentation string de la date d'horodatage</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
</p></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="stringToMessageHorodate(java.lang.String)">stringToMessageHorodate</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="MessageHorodate.html" title="class in chatapp.Model">MessageHorodate</a></span>&nbsp;<span class="memberName">stringToMessageHorodate</span>&#8203;(<span class="arguments">java.lang.String&nbsp;s)</span></div>
<div class="block"><p>
Permet de re créer un message horodaté à partir d'un string</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>s</code> - Le message permettant de re créer un msg horodaté</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>un messageHorodate
</p></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getSource()">getSource</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getSource</span>()</div>
<div class="block">Getter: Utilisateur Source</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Utilisateur a l'origine du message</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setSource(chatapp.Model.Utilisateur)">setSource</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setSource</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;source)</span></div>
<div class="block">Setter: Utilisateur Source
<br> On modifie l'utilisateur source</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - Le nouvel utilisateur source</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getDestinataire()">getDestinataire</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getDestinataire</span>()</div>
<div class="block">Getter: Utilisateur Destinataire</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Utilisateur recevant le message</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setDestinataire(chatapp.Model.Utilisateur)">setDestinataire</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setDestinataire</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;destinataire)</span></div>
<div class="block">Setter: Utilisateur Destinataire
<br> On modifie l'utilisateur Destinataire</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>destinataire</code> - Le nouveau destinataire</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getMessage()">getMessage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">getMessage</span>()</div>
<div class="block">Getter: Message envoye</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le message envoye</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setMessage(java.lang.String)">setMessage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setMessage</span>&#8203;(<span class="arguments">java.lang.String&nbsp;message)</span></div>
<div class="block">Setter: Message envoye
<br> On modifie le message envoyé</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>message</code> - Nouveau message</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getType()">getType</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">int</span>&nbsp;<span class="memberName">getType</span>()</div>
<div class="block">Getter: 'Type' du message</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>On recupere le Type du message</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setType(int)">setType</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setType</span>&#8203;(<span class="arguments">int&nbsp;Type)</span></div>
<div class="block">Setter: 'Type' du message horodate
<br> On modifie l'integer 'Type'</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>Type</code> - Nouveau type</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getDateHorodatage()">getDateHorodatage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.util.Date</span>&nbsp;<span class="memberName">getDateHorodatage</span>()</div>
<div class="block">Getter: Date d'horodatage</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>On recupere le date</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setDateHorodatage(java.util.Date)">setDateHorodatage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setDateHorodatage</span>&#8203;(<span class="arguments">java.util.Date&nbsp;dateHorodatage)</span></div>
<div class="block">Setter: Date d'horodatage
<br> On modifie le date.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>dateHorodatage</code> - Nouvelle date d'horodatage</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,457 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>Utilisateur</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Model, class: Utilisateur">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Model</a></div>
<h1 title="Class Utilisateur" class="title">Class Utilisateur</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Model.Utilisateur</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">Utilisateur</span>
extends java.lang.Object</pre>
<div class="block"><p>
Classe representant un Utilisateur.
<br> Un Utilisateur est associé avec :
<br> - un pseudo,
<br> - un numéro de port,
<br> - une addresse IP
<br> - un ID.
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(java.lang.String,java.lang.Integer,java.net.InetAddress)">Utilisateur</a></span>&#8203;(java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
java.net.InetAddress&nbsp;ip)</code></th>
<td class="colLast">
<div class="block">Constructeur : Utilisateur (3 paramètres)</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(java.lang.String,java.lang.Integer,java.net.InetAddress,java.lang.String)">Utilisateur</a></span>&#8203;(java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
java.net.InetAddress&nbsp;ip,
java.lang.String&nbsp;id)</code></th>
<td class="colLast">
<div class="block">Constructeur : Utilisateur (4 paramètres)</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#equals(chatapp.Model.Utilisateur)">equals</a></span>&#8203;(<a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de comparer deux utilisateurs entre eux grace à leur ID.</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getId()">getId</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter ID</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>java.net.InetAddress</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getIp()">getIp</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter IP</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>java.lang.Integer</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPort()">getPort</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter Port</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPseudo()">getPseudo</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter Pseudo</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPort(java.lang.Integer)">setPort</a></span>&#8203;(java.lang.Integer&nbsp;port)</code></th>
<td class="colLast">
<div class="block">Setter Port</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPseudo(java.lang.String)">setPseudo</a></span>&#8203;(java.lang.String&nbsp;pseudo)</code></th>
<td class="colLast">
<div class="block">Setter Pseudo</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>static <a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stringToUtilisateur(java.lang.String)">stringToUtilisateur</a></span>&#8203;(java.lang.String&nbsp;s)</code></th>
<td class="colLast">
<div class="block">Méthode permettant de convertir un string en Utilisateur</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#toString()">toString</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode permettant de convertir un objet Utilisateur en String
<br> Format du string :
<br> pseudo ___ | port ___ | ip ___ | id ___ | ( '___' sont à remplacer par les valeurs réels)</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(java.lang.String,java.lang.Integer,java.net.InetAddress)">Utilisateur</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">Utilisateur</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
java.net.InetAddress&nbsp;ip)</span></div>
<div class="block">Constructeur : Utilisateur (3 paramètres)</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le pseudo associé</dd>
<dd><code>port</code> - Le port</dd>
<dd><code>ip</code> - L'adresse IP</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(java.lang.String,java.lang.Integer,java.net.InetAddress,java.lang.String)">Utilisateur</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">Utilisateur</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo,
java.lang.Integer&nbsp;port,
java.net.InetAddress&nbsp;ip,
java.lang.String&nbsp;id)</span></div>
<div class="block">Constructeur : Utilisateur (4 paramètres)</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le pseudo associé</dd>
<dd><code>port</code> - Le port</dd>
<dd><code>ip</code> - L'adresse IP</dd>
<dd><code>id</code> - L'id</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="getPseudo()">getPseudo</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">getPseudo</span>()</div>
<div class="block">Getter Pseudo</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le pseudo de l'utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setPseudo(java.lang.String)">setPseudo</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setPseudo</span>&#8203;(<span class="arguments">java.lang.String&nbsp;pseudo)</span></div>
<div class="block">Setter Pseudo</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pseudo</code> - Le nouveau pseudo que l'on souhaite</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getPort()">getPort</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Integer</span>&nbsp;<span class="memberName">getPort</span>()</div>
<div class="block">Getter Port</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le numéro de port de l'utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setPort(java.lang.Integer)">setPort</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setPort</span>&#8203;(<span class="arguments">java.lang.Integer&nbsp;port)</span></div>
<div class="block">Setter Port</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>port</code> - Le nouveau numéro de port</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getIp()">getIp</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.net.InetAddress</span>&nbsp;<span class="memberName">getIp</span>()</div>
<div class="block">Getter IP</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'adresse IP de l'utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getId()">getId</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">getId</span>()</div>
<div class="block">Getter ID</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'ID de l'utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="toString()">toString</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.String</span>&nbsp;<span class="memberName">toString</span>()</div>
<div class="block">Méthode permettant de convertir un objet Utilisateur en String
<br> Format du string :
<br> pseudo ___ | port ___ | ip ___ | id ___ | ( '___' sont à remplacer par les valeurs réels)</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'utilisateur sous forme de String</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="stringToUtilisateur(java.lang.String)">stringToUtilisateur</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">stringToUtilisateur</span>&#8203;(<span class="arguments">java.lang.String&nbsp;s)</span></div>
<div class="block">Méthode permettant de convertir un string en Utilisateur</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>s</code> - Le paramètre String a transformé</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Un utilisateur</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="equals(chatapp.Model.Utilisateur)">equals</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">equals</span>&#8203;(<span class="arguments"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u)</span></div>
<div class="block">Méthode permettant de comparer deux utilisateurs entre eux grace à leur ID.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u</code> - L'utilisateur avec lequel on veut être comparer.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True si ils ont le même ID, False sinon.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,148 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>chatapp.Model</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Model">
<meta name="generator" content="javadoc/PackageWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="package-declaration">
<script type="text/javascript">var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<main role="main">
<div class="header">
<h1 title="Package" class="title">Package&nbsp;chatapp.Model</h1>
</div>
<div class="contentContainer">
<section class="summary">
<ul class="blockList">
<li class="blockList">
<div class="typeSummary">
<table>
<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="DataBase.html" title="class in chatapp.Model">DataBase</a></th>
<td class="colLast">
<div class="block">
Classe représentant la Base de données.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="ListUtilisateurs.html" title="class in chatapp.Model">ListUtilisateurs</a></th>
<td class="colLast">
<div class="block">
Classe représentant la liste des utilisateurs actifs, stockée localement.</div>
</td>
</tr>
<tr class="altColor">
<th class="colFirst" scope="row"><a href="MessageHorodate.html" title="class in chatapp.Model">MessageHorodate</a></th>
<td class="colLast">
<div class="block">
Classe représentant les messages envoyés en TCP lors d'une session de clavardage.</div>
</td>
</tr>
<tr class="rowColor">
<th class="colFirst" scope="row"><a href="Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></th>
<td class="colLast">
<div class="block">
Classe representant un Utilisateur.</div>
</td>
</tr>
</tbody>
</table>
</div>
</li>
</ul>
</section>
</div>
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li class="navBarCell1Rev">Package</li>
<li>Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,118 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>chatapp.Model Class Hierarchy</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="tree: package: chatapp.Model">
<meta name="generator" content="javadoc/PackageTreeWriter">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="package-tree">
<script type="text/javascript">var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<main role="main">
<div class="header">
<h1 class="title">Hierarchy For Package chatapp.Model</h1>
<span class="packageHierarchyLabel">Package Hierarchies:</span>
<ul class="horizontal">
<li><a href="../../overview-tree.html">All Packages</a></li>
</ul>
</div>
<div class="contentContainer">
<section class="hierarchy">
<h2 title="Class Hierarchy">Class Hierarchy</h2>
<ul>
<li class="circle">java.lang.Object
<ul>
<li class="circle">chatapp.Model.<a href="DataBase.html" title="class in chatapp.Model"><span class="typeNameLink">DataBase</span></a></li>
<li class="circle">chatapp.Model.<a href="ListUtilisateurs.html" title="class in chatapp.Model"><span class="typeNameLink">ListUtilisateurs</span></a></li>
<li class="circle">chatapp.Model.<a href="MessageHorodate.html" title="class in chatapp.Model"><span class="typeNameLink">MessageHorodate</span></a> (implements java.io.Serializable)</li>
<li class="circle">chatapp.Model.<a href="Utilisateur.html" title="class in chatapp.Model"><span class="typeNameLink">Utilisateur</span></a></li>
</ul>
</li>
</ul>
</section>
</div>
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li>Class</li>
<li class="navBarCell1Rev">Tree</li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,309 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>HttpEchange</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Protocol, class: HttpEchange">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":9,"i1":10,"i2":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Protocol</a></div>
<h1 title="Class HttpEchange" class="title">Class HttpEchange</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Protocol.HttpEchange</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">HttpEchange</span>
extends java.lang.Object</pre>
<div class="block"><p>
Classe representant les échanges HTTP entre un utilisateur distant et le servlet.
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(chatapp.Controller.ChatApp)">HttpEchange</a></span>&#8203;(<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;chatapp)</code></th>
<td class="colLast">
<div class="block"> Constructeur de la classe HttpEchange</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>static java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getConnecte()">getConnecte</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : Connecte</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendPost(java.lang.String)">sendPost</a></span>&#8203;(java.lang.String&nbsp;type)</code></th>
<td class="colLast">
<div class="block"> Cette méthode permet de communiquer avec le servlet grâce à des requetes http de type Post.</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setConnecte(java.lang.Boolean)">setConnecte</a></span>&#8203;(java.lang.Boolean&nbsp;value)</code></th>
<td class="colLast">
<div class="block">Setter : Connecte</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(chatapp.Controller.ChatApp)">HttpEchange</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">HttpEchange</span>&#8203;(<span class="arguments"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;chatapp)</span></div>
<div class="block"><p> Constructeur de la classe HttpEchange</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>chatapp</code> - La methode prend toujours en argument un paramètre chatApp associé à un utilisateur.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="sendPost(java.lang.String)">sendPost</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">boolean</span>&nbsp;<span class="memberName">sendPost</span>&#8203;(<span class="arguments">java.lang.String&nbsp;type)</span>
throws <span class="exceptions">java.io.IOException,
java.lang.InterruptedException</span></div>
<div class="block"><p> Cette méthode permet de communiquer avec le servlet grâce à des requetes http de type Post.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>type</code> - Le type de message ("Connexion", "Changement de pseudo" , "Deconnexion") ainsi que les parametres associés</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>True ou False selon la réponse a chaque type de message envoyé.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
<dd><code>java.lang.InterruptedException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getConnecte()">getConnecte</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">getConnecte</span>()</div>
<div class="block">Getter : Connecte</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le boolean connecté (True s'il peut se connecter avec ce nom d'utilisateur , False sinon)</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setConnecte(java.lang.Boolean)">setConnecte</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setConnecte</span>&#8203;(<span class="arguments">java.lang.Boolean&nbsp;value)</span></div>
<div class="block">Setter : Connecte</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>value</code> - La nouvelle valeur du boolean de connexion</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,417 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>RunnerEcouteTCP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Protocol, class: RunnerEcouteTCP">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Protocol</a></div>
<h1 title="Class RunnerEcouteTCP" class="title">Class RunnerEcouteTCP</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">java.lang.Thread
<div class="inheritance">chatapp.Protocol.RunnerEcouteTCP</div>
</div>
</div>
<section class="description">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>java.lang.Runnable</code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">RunnerEcouteTCP</span>
extends java.lang.Thread</pre>
<div class="block"><p>
Classe permettant de gérer les multiples connexions en TCP.
<br> Extend la classe Thread.
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li class="blockList">
<section class="nestedClassSummary"><a id="nested.class.summary">
<!-- -->
</a>
<h2>Nested Class Summary</h2>
<div class="inheritedList">
<h2>Nested classes/interfaces inherited from class&nbsp;java.lang.Thread</h2>
<a id="nested.classes.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler</code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<td class="colFirst"><code><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#app">app</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
<div class="inheritedList">
<h3>Fields inherited from class&nbsp;java.lang.Thread</h3>
<a id="fields.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY</code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(chatapp.Controller.ChatApp)">RunnerEcouteTCP</a></span>&#8203;(<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block">Constructeur</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addPropertyChangeListener(java.beans.PropertyChangeListener)">addPropertyChangeListener</a></span>&#8203;(java.beans.PropertyChangeListener&nbsp;pcl)</code></th>
<td class="colLast">
<div class="block">Permet aux classes qui appellent cette methode de connecter un PropertyChangeListener au PropertyChangeSupport</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addSession(chatapp.Protocol.SessionClavardage)">addSession</a></span>&#8203;(<a href="SessionClavardage.html" title="class in chatapp.Protocol">SessionClavardage</a>&nbsp;session)</code></th>
<td class="colLast">
<div class="block">Méthode permettant d'ajouter une session active dans la liste 'ListeSessions'</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ecouteTCP(chatapp.Controller.ChatApp)">ecouteTCP</a></span>&#8203;(<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block">
Methode pour qu'un objet de la classe ChatApp soit constamment en a l'écoute de potentielles connexions</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code><a href="SessionClavardage.html" title="class in chatapp.Protocol">SessionClavardage</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSessionClavardage()">getSessionClavardage</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode permettant de recupérer la derniere session de clavardage créée dans 'ListeSessions'</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#run()">run</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode qui vient écraser la méthode run de la classe Thread.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Thread</h3>
<a id="methods.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield</code></div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<li class="blockList">
<section class="fieldDetails"><a id="field.detail">
<!-- -->
</a>
<h2>Field Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="app">app</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a></span>&nbsp;<span class="memberName">app</span></div>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(chatapp.Controller.ChatApp)">RunnerEcouteTCP</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">RunnerEcouteTCP</span>&#8203;(<span class="arguments"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block">Constructeur</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>app</code> - Un RunnerEcouteTCP est toujours associé a une application de Chat</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="addPropertyChangeListener(java.beans.PropertyChangeListener)">addPropertyChangeListener</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">addPropertyChangeListener</span>&#8203;(<span class="arguments">java.beans.PropertyChangeListener&nbsp;pcl)</span></div>
<div class="block">Permet aux classes qui appellent cette methode de connecter un PropertyChangeListener au PropertyChangeSupport</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pcl</code> - Le propertyChangeListener qui va ecouter les evenements du propertyChangeSupport associe</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="ecouteTCP(chatapp.Controller.ChatApp)">ecouteTCP</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">ecouteTCP</span>&#8203;(<span class="arguments"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block"><p>
Methode pour qu'un objet de la classe ChatApp soit constamment en a l'écoute de potentielles connexions</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>app</code> - L'utilisateur en ecoute de potentielles communications
</p></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="addSession(chatapp.Protocol.SessionClavardage)">addSession</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">addSession</span>&#8203;(<span class="arguments"><a href="SessionClavardage.html" title="class in chatapp.Protocol">SessionClavardage</a>&nbsp;session)</span></div>
<div class="block">Méthode permettant d'ajouter une session active dans la liste 'ListeSessions'</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>session</code> - Session Active que l'on souhaite rajouter</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getSessionClavardage()">getSessionClavardage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="SessionClavardage.html" title="class in chatapp.Protocol">SessionClavardage</a></span>&nbsp;<span class="memberName">getSessionClavardage</span>()</div>
<div class="block">Méthode permettant de recupérer la derniere session de clavardage créée dans 'ListeSessions'</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Premiere Session Active</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="run()">run</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">run</span>()</div>
<div class="block">Méthode qui vient écraser la méthode run de la classe Thread.
La méthode 'ecouteTCP' est appelé.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>run</code>&nbsp;in interface&nbsp;<code>java.lang.Runnable</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>run</code>&nbsp;in class&nbsp;<code>java.lang.Thread</code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,307 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>RunnerEcouteUDP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Protocol, class: RunnerEcouteUDP">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Protocol</a></div>
<h1 title="Class RunnerEcouteUDP" class="title">Class RunnerEcouteUDP</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">java.lang.Thread
<div class="inheritance">chatapp.Protocol.RunnerEcouteUDP</div>
</div>
</div>
<section class="description">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>java.lang.Runnable</code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">RunnerEcouteUDP</span>
extends java.lang.Thread</pre>
<div class="block"><p>
Classe permettant de gérer les multiples connexions en UDP.
<br> Extend la classe Thread.
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li class="blockList">
<section class="nestedClassSummary"><a id="nested.class.summary">
<!-- -->
</a>
<h2>Nested Class Summary</h2>
<div class="inheritedList">
<h2>Nested classes/interfaces inherited from class&nbsp;java.lang.Thread</h2>
<a id="nested.classes.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler</code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="inheritedList">
<h3>Fields inherited from class&nbsp;java.lang.Thread</h3>
<a id="fields.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY</code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(chatapp.Controller.ChatApp)">RunnerEcouteUDP</a></span>&#8203;(<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block">Constructeur</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#run()">run</a></span>()</code></th>
<td class="colLast">
<div class="block">Méthode qui vient ecraser la méthode run de la classe Thread.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Thread</h3>
<a id="methods.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield</code></div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(chatapp.Controller.ChatApp)">RunnerEcouteUDP</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">RunnerEcouteUDP</span>&#8203;(<span class="arguments"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block">Constructeur</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>app</code> - Un RunnerEcouteUDP est toujours associé à une application de Chat</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="run()">run</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">run</span>()</div>
<div class="block">Méthode qui vient ecraser la méthode run de la classe Thread.
<br> La méthode 'ecouteUDP' est appelé.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>run</code>&nbsp;in interface&nbsp;<code>java.lang.Runnable</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>run</code>&nbsp;in class&nbsp;<code>java.lang.Thread</code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,582 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>SessionClavardage</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Protocol, class: SessionClavardage">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Protocol</a></div>
<h1 title="Class SessionClavardage" class="title">Class SessionClavardage</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">java.lang.Thread
<div class="inheritance">chatapp.Protocol.SessionClavardage</div>
</div>
</div>
<section class="description">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>java.lang.Runnable</code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">SessionClavardage</span>
extends java.lang.Thread</pre>
<div class="block"><p>
Classe représentant une session de clavardage.
<br> La classe hérite de la classe Thread et dispose de 2 constructeurs selon que l'on initie une demande de session ou que l'on recoit une demande.
<br> Elle possède en attribut:
<br> - link : la socket associée à la session de clavardage
<br> - app : L'instance de chatapp
<br> - u2: l'utilisateur avec lequel on communique
<br> - out: le flux de donnees sortant
<br> - in: le flux de donnees entrant
<br> - pcs: Le PropertyChangeSupport permettant d'envoyer les notifications de MessageRecu et de FindeSession
<br> - derniersMsg: la liste temporaire des derniers messages recus
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<li class="blockList">
<section class="nestedClassSummary"><a id="nested.class.summary">
<!-- -->
</a>
<h2>Nested Class Summary</h2>
<div class="inheritedList">
<h2>Nested classes/interfaces inherited from class&nbsp;java.lang.Thread</h2>
<a id="nested.classes.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler</code></div>
</section>
</li>
<!-- =========== FIELD SUMMARY =========== -->
<li class="blockList">
<section class="fieldSummary"><a id="field.summary">
<!-- -->
</a>
<h2>Field Summary</h2>
<div class="inheritedList">
<h3>Fields inherited from class&nbsp;java.lang.Thread</h3>
<a id="fields.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY</code></div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(chatapp.Model.Utilisateur,chatapp.Controller.ChatApp)">SessionClavardage</a></span>&#8203;(<a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u2,
<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block"> Le constructeur associe a l'envoi d'une requete TCP, lorsque que l'on veut initier une session de clavardage avec un utilisateur connecte</div>
</td>
</tr>
<tr class="rowColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(java.net.Socket,chatapp.Controller.ChatApp)">SessionClavardage</a></span>&#8203;(java.net.Socket&nbsp;link,
<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block"> Ce constructeur crée une session de clavardage quand on recoit une requete</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addPropertyChangeListener(java.beans.PropertyChangeListener)">addPropertyChangeListener</a></span>&#8203;(java.beans.PropertyChangeListener&nbsp;pcl)</code></th>
<td class="colLast">
<div class="block">Permet aux PropertyChangeListener de s'abonner aux notifications des evenements</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#arretSession()">arretSession</a></span>()</code></th>
<td class="colLast">
<div class="block"> Methode permettant d'arreter cette session de clavardage et de prevenir l'autre utilisateur de la fin de la session</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#envoiMsg(java.lang.String)">envoiMsg</a></span>&#8203;(java.lang.String&nbsp;msg)</code></th>
<td class="colLast">
<div class="block">Methode transformant prenant un string pour le transmettre sous la forme d'un message horodate a l'utilisateur distant</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getApp()">getApp</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : chatApp</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code><a href="../Model/MessageHorodate.html" title="class in chatapp.Model">MessageHorodate</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDernierMsg()">getDernierMsg</a></span>()</code></th>
<td class="colLast">
<div class="block"> Methode permettant de recuperer le dernier message recu qui a ete mis dans la liste des messages recus.</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>java.io.ObjectInputStream</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getIn()">getIn</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : In</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>java.io.ObjectOutputStream</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getOut()">getOut</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : Out</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code><a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getU2()">getU2</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : Utilisateur 2</div>
</td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#initierSession()">initierSession</a></span>()</code></th>
<td class="colLast">
<div class="block"> Methode permettant d'initier une session de clavardage et de prevenir l'autre utilisateur du debut de la session</div>
</td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#run()">run</a></span>()</code></th>
<td class="colLast">
<div class="block"> Methode lancee par le thread, permet de receptionner les messages horodates recus et d'agir en conséquence selon le type de message recu</div>
</td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setApp(chatapp.Controller.ChatApp)">setApp</a></span>&#8203;(<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block">Setter : chatApp</div>
</td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setIn(java.io.ObjectInputStream)">setIn</a></span>&#8203;(java.io.ObjectInputStream&nbsp;in)</code></th>
<td class="colLast">
<div class="block">Setter : In</div>
</td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setLink(java.net.Socket)">setLink</a></span>&#8203;(java.net.Socket&nbsp;link)</code></th>
<td class="colLast">
<div class="block">Setter : Link</div>
</td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setOut(java.io.ObjectOutputStream)">setOut</a></span>&#8203;(java.io.ObjectOutputStream&nbsp;out)</code></th>
<td class="colLast">
<div class="block">Setter : Out</div>
</td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setU2(chatapp.Model.Utilisateur)">setU2</a></span>&#8203;(<a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u2)</code></th>
<td class="colLast">
<div class="block">Setter : Utilisateur 2</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Thread</h3>
<a id="methods.inherited.from.class.java.lang.Thread">
<!-- -->
</a><code>activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield</code></div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(java.net.Socket,chatapp.Controller.ChatApp)">SessionClavardage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">SessionClavardage</span>&#8203;(<span class="arguments">java.net.Socket&nbsp;link,
<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block"><p> Ce constructeur crée une session de clavardage quand on recoit une requete</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>link</code> - La socket associee a la requete TCP que l'on a recu</dd>
<dd><code>app</code> - L'instance de chatapp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;(chatapp.Model.Utilisateur,chatapp.Controller.ChatApp)">SessionClavardage</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">SessionClavardage</span>&#8203;(<span class="arguments"><a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u2,
<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block"><p> Le constructeur associe a l'envoi d'une requete TCP, lorsque que l'on veut initier une session de clavardage avec un utilisateur connecte</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u2</code> - L'utilisateur avec qui l'on souhaite démarrer une session de clavardage</dd>
<dd><code>app</code> - L'instance de chataap associee</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="addPropertyChangeListener(java.beans.PropertyChangeListener)">addPropertyChangeListener</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">addPropertyChangeListener</span>&#8203;(<span class="arguments">java.beans.PropertyChangeListener&nbsp;pcl)</span></div>
<div class="block">Permet aux PropertyChangeListener de s'abonner aux notifications des evenements</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>pcl</code> - Le PropertyListener qui souhaite s'abonner sur ce PropertyChangeSupport</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="arretSession()">arretSession</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">arretSession</span>()</div>
<div class="block"><p> Methode permettant d'arreter cette session de clavardage et de prevenir l'autre utilisateur de la fin de la session</p></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="initierSession()">initierSession</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">initierSession</span>()</div>
<div class="block"><p> Methode permettant d'initier une session de clavardage et de prevenir l'autre utilisateur du debut de la session</p></div>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="envoiMsg(java.lang.String)">envoiMsg</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">envoiMsg</span>&#8203;(<span class="arguments">java.lang.String&nbsp;msg)</span></div>
<div class="block">Methode transformant prenant un string pour le transmettre sous la forme d'un message horodate a l'utilisateur distant</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>msg</code> - Le texte du message à envoyer</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getDernierMsg()">getDernierMsg</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../Model/MessageHorodate.html" title="class in chatapp.Model">MessageHorodate</a></span>&nbsp;<span class="memberName">getDernierMsg</span>()</div>
<div class="block"><p> Methode permettant de recuperer le dernier message recu qui a ete mis dans la liste des messages recus.
<br> Utilisée par l'interface graphique qui a ete avertie grace au PropertyChangeSupport</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le dernier message horodate recu</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="run()">run</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">run</span>()</div>
<div class="block"><p> Methode lancee par le thread, permet de receptionner les messages horodates recus et d'agir en conséquence selon le type de message recu</p></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>run</code>&nbsp;in interface&nbsp;<code>java.lang.Runnable</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>run</code>&nbsp;in class&nbsp;<code>java.lang.Thread</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getOut()">getOut</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.io.ObjectOutputStream</span>&nbsp;<span class="memberName">getOut</span>()</div>
<div class="block">Getter : Out</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le flux d'ecriture des messages sortant</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setOut(java.io.ObjectOutputStream)">setOut</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setOut</span>&#8203;(<span class="arguments">java.io.ObjectOutputStream&nbsp;out)</span></div>
<div class="block">Setter : Out</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>out</code> - Le flux d'ecriture des messages sortant</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getIn()">getIn</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">java.io.ObjectInputStream</span>&nbsp;<span class="memberName">getIn</span>()</div>
<div class="block">Getter : In</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le flux de lecture des messages entrant</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setIn(java.io.ObjectInputStream)">setIn</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setIn</span>&#8203;(<span class="arguments">java.io.ObjectInputStream&nbsp;in)</span></div>
<div class="block">Setter : In</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>in</code> - Le flux de lecture des messages entrant</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setLink(java.net.Socket)">setLink</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setLink</span>&#8203;(<span class="arguments">java.net.Socket&nbsp;link)</span></div>
<div class="block">Setter : Link</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>link</code> - La Socket asscciee a la connexion TCP et donc a la session</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getApp()">getApp</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a></span>&nbsp;<span class="memberName">getApp</span>()</div>
<div class="block">Getter : chatApp</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'instance de chatApp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setApp(chatapp.Controller.ChatApp)">setApp</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setApp</span>&#8203;(<span class="arguments"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block">Setter : chatApp</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>app</code> - L'instance de chatApp</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getU2()">getU2</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType"><a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a></span>&nbsp;<span class="memberName">getU2</span>()</div>
<div class="block">Getter : Utilisateur 2</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'utilisateur avec lequel on communique</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setU2(chatapp.Model.Utilisateur)">setU2</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setU2</span>&#8203;(<span class="arguments"><a href="../Model/Utilisateur.html" title="class in chatapp.Model">Utilisateur</a>&nbsp;u2)</span></div>
<div class="block">Setter : Utilisateur 2</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>u2</code> - L'utilisateur avec lequel on communique</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

View file

@ -0,0 +1,411 @@
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="fr">
<head>
<!-- Generated by javadoc (13-ea) on Sat Jan 30 13:49:20 CET 2021 -->
<title>UDPEchange</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2021-01-30">
<meta name="description" content="declaration: package: chatapp.Protocol, class: UDPEchange">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
<script type="text/javascript" src="../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<a id="skip.navbar.top">
<!-- -->
</a>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">chatapp.Protocol</a></div>
<h1 title="Class UDPEchange" class="title">Class UDPEchange</h1>
</div>
<div class="contentContainer">
<div class="inheritance" title="Inheritance Tree">java.lang.Object
<div class="inheritance">chatapp.Protocol.UDPEchange</div>
</div>
<section class="description">
<hr>
<pre>public class <span class="typeNameLabel">UDPEchange</span>
extends java.lang.Object</pre>
<div class="block"><p>
Classe representant les échanges UDP entre utilisateurs.
</p></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li class="blockList">
<section class="constructorSummary"><a id="constructor.summary">
<!-- -->
</a>
<h2>Constructor Summary</h2>
<div class="memberSummary">
<table>
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<thead>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E()">UDPEchange</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</tbody>
</table>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!-- -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t1" class="tableTab" onclick="show(1);">Static Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t4" class="tableTab" onclick="show(8);">Concrete Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#ecouteUDP(chatapp.Controller.ChatApp)">ecouteUDP</a></span>&#8203;(<a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</code></th>
<td class="colLast">
<div class="block">
Methode permettant la reception de messages d'utilisateurs à l'aide du protocole UDP</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#envoiBroadcast(java.lang.String)">envoiBroadcast</a></span>&#8203;(java.lang.String&nbsp;broadcastMessage)</code></th>
<td class="colLast">
<div class="block">
Méthode permettant d'envoyer un message à tout les utilisateurs à l'aide du protocole UDP</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#envoiUnicast(java.net.InetAddress,java.lang.String)">envoiUnicast</a></span>&#8203;(java.net.InetAddress&nbsp;address,
java.lang.String&nbsp;message)</code></th>
<td class="colLast">
<div class="block">
Méthode permettant d'envoyer un message a utilisateur en particulier
a l'aide du protocole UDP</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>static java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getConnecte()">getConnecte</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : Connecte</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>static java.net.InetAddress</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentIp()">getCurrentIp</a></span>()</code></th>
<td class="colLast">
<div class="block">
Getter : Ip
<br>Permet de recuperer l'adresse de l'hote sur le reseau au format IPv4.</div>
</td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code>static java.lang.Boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPseudoValide()">getPseudoValide</a></span>()</code></th>
<td class="colLast">
<div class="block">Getter : Pseudo Valide</div>
</td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setConnecte(java.lang.Boolean)">setConnecte</a></span>&#8203;(java.lang.Boolean&nbsp;value)</code></th>
<td class="colLast">
<div class="block">Setter : Connecte</div>
</td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code>static void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPseudoValide(java.lang.Boolean)">setPseudoValide</a></span>&#8203;(java.lang.Boolean&nbsp;value)</code></th>
<td class="colLast">
<div class="block">Setter : PseudoValise</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a><code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li class="blockList">
<section class="constructorDetails"><a id="constructor.detail">
<!-- -->
</a>
<h2>Constructor Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="&lt;init&gt;()">UDPEchange</a></h3>
<div class="memberSignature"><span class="modifiers">public</span>&nbsp;<span class="memberName">UDPEchange</span>()</div>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!-- -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="getConnecte()">getConnecte</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">getConnecte</span>()</div>
<div class="block">Getter : Connecte</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le boolean connecte (True s'il peut se connecter avec ce nom d'utilisateur , False sinon)</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setConnecte(java.lang.Boolean)">setConnecte</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setConnecte</span>&#8203;(<span class="arguments">java.lang.Boolean&nbsp;value)</span></div>
<div class="block">Setter : Connecte</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>value</code> - La nouvelle valeur du boolean de connexion</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getPseudoValide()">getPseudoValide</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">java.lang.Boolean</span>&nbsp;<span class="memberName">getPseudoValide</span>()</div>
<div class="block">Getter : Pseudo Valide</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Le boolean PseudoValide (True s'il peut utiliser ce pseudo , False sinon)</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setPseudoValide(java.lang.Boolean)">setPseudoValide</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">setPseudoValide</span>&#8203;(<span class="arguments">java.lang.Boolean&nbsp;value)</span></div>
<div class="block">Setter : PseudoValise</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>value</code> - La nouvelle valeur du boolean concernant le pseudo valide</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getCurrentIp()">getCurrentIp</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">java.net.InetAddress</span>&nbsp;<span class="memberName">getCurrentIp</span>()</div>
<div class="block"><p>
Getter : Ip
<br>Permet de recuperer l'adresse de l'hote sur le reseau au format IPv4.
<br> Si plusieurs adresses sont disponibles (plusieurs cartes réseaux), choisit la premiere trouvée
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>L'adresse IP au format IPv4</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="envoiBroadcast(java.lang.String)">envoiBroadcast</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">envoiBroadcast</span>&#8203;(<span class="arguments">java.lang.String&nbsp;broadcastMessage)</span>
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>
Méthode permettant d'envoyer un message à tout les utilisateurs à l'aide du protocole UDP
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>broadcastMessage</code> - Message à transmettre aux utilisateurs</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="ecouteUDP(chatapp.Controller.ChatApp)">ecouteUDP</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">ecouteUDP</span>&#8203;(<span class="arguments"><a href="../Controller/ChatApp.html" title="class in chatapp.Controller">ChatApp</a>&nbsp;app)</span></div>
<div class="block"><p>
Methode permettant la reception de messages d'utilisateurs à l'aide du protocole UDP
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>app</code> - L'application de chat de l'utilisateur qui receptionne le message</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="envoiUnicast(java.net.InetAddress,java.lang.String)">envoiUnicast</a></h3>
<div class="memberSignature"><span class="modifiers">public static</span>&nbsp;<span class="returnType">void</span>&nbsp;<span class="memberName">envoiUnicast</span>&#8203;(<span class="arguments">java.net.InetAddress&nbsp;address,
java.lang.String&nbsp;message)</span>
throws <span class="exceptions">java.io.IOException</span></div>
<div class="block"><p>
Méthode permettant d'envoyer un message a utilisateur en particulier
a l'aide du protocole UDP
</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>address</code> - L'adresse IP de l'utilisateur</dd>
<dd><code>message</code> - Message message à transmettre a l'utilisateur</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-files/index-1.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more