From 83fb38c2f10077509f991600f72477bdaae52cc6 Mon Sep 17 00:00:00 2001
From: Sarah CHERCHEM <ls_cherchem@esi.dz>
Date: Sun, 16 Mar 2025 15:07:44 +0100
Subject: [PATCH] creation d'un ServerNIO

---
 .idea/.gitignore                              |   3 +
 .idea/gradle.xml                              |  19 ++
 .idea/jarRepositories.xml                     |  20 ++
 .idea/misc.xml                                |   7 +
 .idea/modules.xml                             |   8 +
 .idea/reseaux_select.iml                      |   9 +
 .idea/vcs.xml                                 |   6 +
 mesures.csv                                   |   8 +
 mesures_latence.csv                           |  15 +
 src/.gradle/7.5.1/checksums/checksums.lock    | Bin 0 -> 17 bytes
 .../dependencies-accessors.lock               | Bin 0 -> 17 bytes
 .../dependencies-accessors/gc.properties      |   0
 .../executionHistory/executionHistory.bin     | Bin 0 -> 32334 bytes
 .../executionHistory/executionHistory.lock    | Bin 0 -> 17 bytes
 src/.gradle/7.5.1/fileChanges/last-build.bin  | Bin 0 -> 1 bytes
 src/.gradle/7.5.1/fileHashes/fileHashes.bin   | Bin 0 -> 20047 bytes
 src/.gradle/7.5.1/fileHashes/fileHashes.lock  | Bin 0 -> 17 bytes
 .../7.5.1/fileHashes/resourceHashesCache.bin  | Bin 0 -> 20027 bytes
 src/.gradle/7.5.1/gc.properties               |   0
 .../buildOutputCleanup.lock                   | Bin 0 -> 17 bytes
 .../buildOutputCleanup/cache.properties       |   2 +
 .../buildOutputCleanup/outputFiles.bin        | Bin 0 -> 19019 bytes
 src/.gradle/file-system.probe                 | Bin 0 -> 8 bytes
 src/.gradle/vcs-1/gc.properties               |   0
 src/build.gradle                              |  19 ++
 src/build/classes/java/main/Client.class      | Bin 0 -> 4986 bytes
 src/build/classes/java/main/ClientNIO.class   | Bin 0 -> 5052 bytes
 src/build/classes/java/main/Code.class        | Bin 0 -> 2636 bytes
 src/build/classes/java/main/IdleClient.class  | Bin 0 -> 2630 bytes
 .../java/main/ManualMastermindClient.class    | Bin 0 -> 3237 bytes
 .../java/main/MastermindBotClient.class       | Bin 0 -> 3591 bytes
 .../main/MastermindServer$GameSession.class   | Bin 0 -> 3157 bytes
 .../classes/java/main/MastermindServer.class  | Bin 0 -> 7286 bytes
 .../java/main/ServerNIO$ClientData.class      | Bin 0 -> 841 bytes
 .../java/main/ServerNIO$GameSession.class     | Bin 0 -> 2467 bytes
 .../java/main/ServerNIO$PlayerScore.class     | Bin 0 -> 1190 bytes
 src/build/classes/java/main/ServerNIO.class   | Bin 0 -> 9044 bytes
 src/build/classes/java/main/Stress1.class     | Bin 0 -> 6827 bytes
 .../compileJava/previous-compilation-data.bin | Bin 0 -> 650 bytes
 src/gradle/wrapper/gradle-wrapper.jar         | Bin 0 -> 60756 bytes
 src/gradle/wrapper/gradle-wrapper.properties  |   5 +
 src/gradlew                                   | 240 +++++++++++++++
 src/gradlew.bat                               |  91 ++++++
 src/settings.gradle                           |   2 +
 src/src/main/java/Client.java                 | 123 ++++++++
 src/src/main/java/ClientNIO.java              | 127 ++++++++
 src/src/main/java/Code.java                   |  80 +++++
 src/src/main/java/IdleClient.java             |  31 ++
 src/src/main/java/ManualMastermindClient.java |  50 ++++
 src/src/main/java/MastermindBotClient.java    |  60 ++++
 src/src/main/java/MastermindServer.java       | 178 +++++++++++
 src/src/main/java/ServerNIO.java              | 277 ++++++++++++++++++
 src/src/main/java/Stress1.java                |  86 ++++++
 53 files changed, 1466 insertions(+)
 create mode 100644 .idea/.gitignore
 create mode 100644 .idea/gradle.xml
 create mode 100644 .idea/jarRepositories.xml
 create mode 100644 .idea/misc.xml
 create mode 100644 .idea/modules.xml
 create mode 100644 .idea/reseaux_select.iml
 create mode 100644 .idea/vcs.xml
 create mode 100644 mesures.csv
 create mode 100644 mesures_latence.csv
 create mode 100644 src/.gradle/7.5.1/checksums/checksums.lock
 create mode 100644 src/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock
 create mode 100644 src/.gradle/7.5.1/dependencies-accessors/gc.properties
 create mode 100644 src/.gradle/7.5.1/executionHistory/executionHistory.bin
 create mode 100644 src/.gradle/7.5.1/executionHistory/executionHistory.lock
 create mode 100644 src/.gradle/7.5.1/fileChanges/last-build.bin
 create mode 100644 src/.gradle/7.5.1/fileHashes/fileHashes.bin
 create mode 100644 src/.gradle/7.5.1/fileHashes/fileHashes.lock
 create mode 100644 src/.gradle/7.5.1/fileHashes/resourceHashesCache.bin
 create mode 100644 src/.gradle/7.5.1/gc.properties
 create mode 100644 src/.gradle/buildOutputCleanup/buildOutputCleanup.lock
 create mode 100644 src/.gradle/buildOutputCleanup/cache.properties
 create mode 100644 src/.gradle/buildOutputCleanup/outputFiles.bin
 create mode 100644 src/.gradle/file-system.probe
 create mode 100644 src/.gradle/vcs-1/gc.properties
 create mode 100644 src/build.gradle
 create mode 100644 src/build/classes/java/main/Client.class
 create mode 100644 src/build/classes/java/main/ClientNIO.class
 create mode 100644 src/build/classes/java/main/Code.class
 create mode 100644 src/build/classes/java/main/IdleClient.class
 create mode 100644 src/build/classes/java/main/ManualMastermindClient.class
 create mode 100644 src/build/classes/java/main/MastermindBotClient.class
 create mode 100644 src/build/classes/java/main/MastermindServer$GameSession.class
 create mode 100644 src/build/classes/java/main/MastermindServer.class
 create mode 100644 src/build/classes/java/main/ServerNIO$ClientData.class
 create mode 100644 src/build/classes/java/main/ServerNIO$GameSession.class
 create mode 100644 src/build/classes/java/main/ServerNIO$PlayerScore.class
 create mode 100644 src/build/classes/java/main/ServerNIO.class
 create mode 100644 src/build/classes/java/main/Stress1.class
 create mode 100644 src/build/tmp/compileJava/previous-compilation-data.bin
 create mode 100644 src/gradle/wrapper/gradle-wrapper.jar
 create mode 100644 src/gradle/wrapper/gradle-wrapper.properties
 create mode 100644 src/gradlew
 create mode 100644 src/gradlew.bat
 create mode 100644 src/settings.gradle
 create mode 100644 src/src/main/java/Client.java
 create mode 100644 src/src/main/java/ClientNIO.java
 create mode 100644 src/src/main/java/Code.java
 create mode 100644 src/src/main/java/IdleClient.java
 create mode 100644 src/src/main/java/ManualMastermindClient.java
 create mode 100644 src/src/main/java/MastermindBotClient.java
 create mode 100644 src/src/main/java/MastermindServer.java
 create mode 100644 src/src/main/java/ServerNIO.java
 create mode 100644 src/src/main/java/Stress1.java

diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..af8db0b
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$/src" />
+        <option name="gradleHome" value="$PROJECT_DIR$/../../../../../../gradle/gradle-8.0" />
+        <option name="gradleJvm" value="18" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$/src" />
+          </set>
+        </option>
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..fdc392f
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..ade1ecd
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="ProjectRootManager">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..8def1d0
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/reseaux_select.iml" filepath="$PROJECT_DIR$/.idea/reseaux_select.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/reseaux_select.iml b/.idea/reseaux_select.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/reseaux_select.iml
@@ -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>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/mesures.csv b/mesures.csv
new file mode 100644
index 0000000..e2496d3
--- /dev/null
+++ b/mesures.csv
@@ -0,0 +1,8 @@
+Nombre_de_clients;Temps_moyen_ns;Min_Temps_ns;Max_Temps_ns;Ecart_Type_ns
+1;30307300;30307300;30307300;0.0
+2;1401350;1325500;1477200;75850.0
+10;2543170;1373500;3592300;731917.0131237557
+100;10871037;1274900;20403400;5914776.77157806
+1000;5834602;1502200;42603600;2.111329554489539E7
+5000;3072008;922400;61310800;1.8383644560914222E7
+50000;3682380;462800;142229600;2.6974526829630088E7
diff --git a/mesures_latence.csv b/mesures_latence.csv
new file mode 100644
index 0000000..4b5905e
--- /dev/null
+++ b/mesures_latence.csv
@@ -0,0 +1,15 @@
+Nombre_de_clients;Temps_moyen_ns;Min_Temps_ns;Max_Temps_ns;Ecart_Type_ns
+1;30529600;30529600;30529600;0.0
+2;1040150;928100;1152200;112050.0
+10;2699440;1299400;4103500;928589.5004790869
+100;13855409;1352500;25882300;6976373.27770769
+1000;8356150;1198400;128064800;2.996718981788606E7
+5000;7360120;525100;307029900;7.823948724830812E7
+50000;4634118;436500;306068000;3.703753723305639E7
+1;30111900;30111900;30111900;0.0
+2;1189550;1066700;1312400;122850.0
+10;2521170;1196100;3792200;871711.3020375496
+100;12193571;1271800;21247200;6169356.7433728855
+1000;8795728;1140800;117457600;4.482277478589943E7
+5000;4288497;719400;81092900;3.360717128906339E7
+50000;4160538;428900;253224200;3.6309229373730935E7
diff --git a/src/.gradle/7.5.1/checksums/checksums.lock b/src/.gradle/7.5.1/checksums/checksums.lock
new file mode 100644
index 0000000000000000000000000000000000000000..55bcaa48ff0cb762db01892b7a39c2dc7af64b16
GIT binary patch
literal 17
TcmZQ({FlP~S9Zrg1}FdkG7bbf

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock b/src/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock
new file mode 100644
index 0000000000000000000000000000000000000000..b73662c4ed62341f8eeff33f41db27f3be797a4d
GIT binary patch
literal 17
TcmZQx9;R}X+w5I20~7!NE93)=

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/dependencies-accessors/gc.properties b/src/.gradle/7.5.1/dependencies-accessors/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/src/.gradle/7.5.1/executionHistory/executionHistory.bin b/src/.gradle/7.5.1/executionHistory/executionHistory.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0904beb5cb2322a96d69b6b217799f0344cefaff
GIT binary patch
literal 32334
zcmZ=^V2}{_4+RVmzzm^$PBSoYWkA^B#taNRRS<UaS_TGQDFy}xO9+3I91Vfd5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2cDj^Wc
zz`(!-ajb+66NtfI&cI;6!@$76#FX&()68}jR*)zIL&0(A^ud3FWa$Vd-evP3;vSAL
zaTv|Oz~Bgx8zo0WU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1n3z8#taNBjSLJdl^{Gj$t=}0zbM75yecIxr=X}Z
zDbX~yFekOxC>7!+W>tpu`9<k^=|zbtIjMSy1(|v!iN)E)dgVol1qG=^df^Z{-X%3T
zzbLUJHAUd>>b%>QpAwcGeLwBs*#lQzGEr;-!*RxVr_#)vl;Gr|%z~15mH494y!hmt
z{NmE0R6`XQ%P8I?$=p2AAkos&z#`Ek#UeS$#MHz%)xgX!B_-9wG9^V||2B=E+^<<A
zJw<&s+I`?K<mgE(O3uhEOLa;tPUTofj89bp5=$~b$|t%9IlB0`#)k&G2E}{$`?|u+
z0x4kbg9ea(N@j6M@k9_=l$lgol9`_e(oCscC<bD&a2m3O!5N80re?vVxeO@ULMjVV
zIkpkyXP3<45}5Nr+FG1E{U#t=5n7bPyg#F)q@dVJU%xoDs4O!%wHTIa@{7{J!2mO%
zSRay{bj|fl^$c~BGV}DRG7I`3f?=se#hLke%xz#v29}<r#FFF;NX#=HWOTNQ2`x@7
zDvoh+_3?@E&r5YF$}CHb@iC6^^bK%y4hfDaN-a)JEUkzyPR&V8E{Q2FN{)e;T&|at
zSi&Iiw$?&l@@<>MqQ1CZh98+Lcdb77=Z4WVF_w<3#3HxMoK(i^l-Lpjjd-Y~x=^lO
zR$>u@z~sw<D|`}V=Ln>#n#TD|xUqjJ$nGn*m|6M@it-Cmi%K$6i@|QVM+-L~>|hY^
zJ!xb0BvRMjU*?PH_42mfePE}YVr1zq2In%cEA~<n+zbL6W+@-uWc>E8@%$&wDz}yQ
z-(3ar?jL&=Mg|6!He&_`u6PCpu5b{Zos^$plAmKznV6TJoR*taT2`2rUr}IWWL^m=
zi5Mm^Y{r^alk;;6GILV(yb{Y2ogr*Ir4b`lOcCkHN-Rr+CRL8vXzl{J1S;1Z<{A|2
z>F*bBXwjXUpHiBWSd>{(Dafz`NlRv4NorAEVvb%`S+1T-YFc7xPKhsEZE!(qGLnBd
zgfs-|1szPiCcj&hq@~9-8)2$mW?ouq5m;v`s7PS!$S(kuH^qVs*mF57<e;JE4^fR|
z8G2DZ6>6X!RA-T6QF<|VA51hQHK{b65v~Z#g&HczunNh?h-w6Cke&-jD^x8;4YB~m
z0;noIu<<^rWvMv~6JZKc^OEyZGV{_IrolxjN>cMc1&T{%Q8B|5m~dKRW{!WJYf({t
z5o0f0Fuy39385svC>v^*Aj3+$u6IKy#c=$5WYeMM>7`brCYP2ZCgr3u%)us~RhA15
zTDT-Axj|yqH!(BMIVZ8Wm|+%7CqfdM>KG=#q>55=QWJ|)8KxBHmlh?bf?_(cBr_>9
zC$prIx!KTSN=af-dTI%VIBQoj$c}=<k_-lT@F(Ww<(DLal2kxZesXGYaefgfoiWUY
z*_M=_Us7CBlvn_EAXxKcm>k3bV6nbpu-AjZPAX<SPhL?6D%f)qGxK6V-j8w4$xO{F
z(F3uW1>P4)A9vDDJQ?f|^R(*0>lVfyB<ZtMu`WL)6>8bNuUC`Orsr51+UIlUmj*p%
z>~e-lUZ#dso+&x0NX};#D4rm?M#ulGFl(pVi{uSI!x<-_DIv4&Kn+me#Nv|FqTI~9
zl;G5&veY7%fc*R%sF$bCFnyKr$gIC>;d^uGU285f&c?0!0yV-QxTGkxxY!VCy{@}e
zmD2j~LK~0dIVIi^dW^lu@{EV6V55Ml)aBgtOtB2XCy%bZ>^Wy55EAv#E9*A*j$=A6
z@~yr1m$FPvNi8nP%me2Km&~Hn<dXcNN(M4hR}!ds8w1XBsl|{K4NBXLz0jBk%P<J|
z+3qsAbL`N&diI3FWlSn>PhD&Md&B6kBx5%?%|TT)>t1;58L|A2N6!DZJ^NKoy#TBF
zCCoSxDWO2s=3dg8)0|`)^=i*+?Psp6qQAgu4+}D`!WyM25chZ_=B4DM7U@9^iB1so
zzxrBvO?Kww(w34LGH;el`Fq1?izMS5tcJj}NnD@E9+TA-Q^moXRN<EP@iSQ41`)=Y
z(D;Pf7Lr(;4b!6`$7ufe|FM;>pB>I0`cbuF&2>-+ToPyOgX)1PtaH03(C2l6xun`F
zzRcA>b3It$Yz}4yfxsxa6t<l3l+Y*kwn^P$8(5aZ3aRweyi{;622wWpmzETimLMYc
zHF+ru61i}*V<1IgaSWF76cP2z3<CaF_g{-Jo-EkPVZ71Qbz(2eJeWH(QWH~Bi_o2S
zpSsS2Sb~%qu{mi*K~ZX1W`1cgs0zu<f#in7l0?RrlsKj&w;%@EGypZGVqli&LIlCK
z=%yr=B<dw)<}nC_Z_NpCC~Mc?_}9PV)e_YozrhJ<A~UF+$&~^+3b&AffhQA$XPf3_
zWRzFr<QF6*=cFWNB^IP)7N;4d7FT9M+L=r`RB0iOwlgssd5|QM3T*_9wlhI3sbak}
zMB{O^otc@RSFDGnT%<xflVh}<i8d^P+TcTK8$epoFY~q(U)X(xD?a4+lSe6MIx*Ur
zWY#yR*7_#ql_usO+6j;b2DGIo+GzR0SS#*mx!2MM{YHQ8f*KS!mER$+#zA)utl8_7
zUxMNmWxl70+THb&OCB0bP+8)0hH)ms(Wq)~Qr97n_BS*{8e(#89y_zlB7R%>!nAvT
z?HH#aT!EzU5;dFvG0)G_A8L2qr^LetPu`55&Ajf~najCKjQyx8XwcL@ck@wlY>4DR
zlig=qIt-LQ(xRy!x@p7xi++>Vsy_U4hR^l7|KM!ucRX16k8o3e8dw$frhazD!`SV&
zvOl`^eAbnCBPcu{toE1)<6Inh5ZbzbKXrP0a*^%j+1uXjS{`L`sb~M8e>aSlN;1wu
zBt1k1fNJ{5lHMp+`av_`j#9|ouzM%hfHk$tFfK-Df}|c5_r%=P;M8K!APubXu4#RN
z(d)q4WA5yAMz<ENKeub&<$pJfu1YXYN7oJ0VfRehvur`c@>6T$Vozy&+jan~<C_KJ
z9EdG`p8nV@l9`{Umo>p+<-3Z|1>V!RayPX7`gg<VA0OicxHgy#?MDp`iLt#t>y@gc
zdtCpc@eZ)k#ab9WkKie1gL574af!t-u8Ch{y7nD7oL8GNGYBL<%Z%URzt*7q)%9hP
z5gA`cdmcF{F_;~rq0{r=;<~eCk>&rhjfXc~kW{L+JOWM>6Inn#51uk(1_oY11_oYE
z5T0#ro@1O<UXq%Wlw6vURAH8rT~?Z#WLA`13h8+;?i}rTq^1arj&MUeNTVa%!(@b;
zlg>R4sx<x}ZC^y=?{eUyDW5oe7Zg695p2KyQ5|DHstPg(K2clW;89FS?}P5c>Z9Eq
zNQ6Qg`=i~RCu?qKnpsYoE25<O_=9rr>0#2{Irk+d{NDkigq!;h`&;}@?Hrulon`lC
z{s(t=CO}dps33xNEtdbe_TdY&t@j4Ge~(+vm>KQ_D?KQWe-h*@SQT+Sqw8R`r1y*-
zgY}WvGx`SBL~hS$+kH?tk<v5T3)VrfXVj^8dA-AvCuOPcKTP1Bduqcuu(m(gdPWMW
z7j?ZaF>bkiRfhTY-bvY4z)Gj<5bPPXJ^(o$+%wvD<A%Kr)11nV*6$0I<O3#*_Kb#j
z&**FQ9$&Ym4#|(yR(@vqs_i!)9M{{xJtJN*P|v82fq}OSglCr(l%^CFB;{9CWfYj^
zr<i5srKXmeC#Pg2LV89_38Ouu(VkIKY5Hi-Xn3vtp+V2+e*BGtS|=B=EM4>HSM0i=
zuPAGOXwoy%yUTR(l+sC|t2ZLsO?Uh5rFG9p(0PHvPc|#2OFzUpiuHT!X};iSv}Xiq
zgO2u$pdpYi6ll>mVatOp((|2;Zd`I|nDmTNF1-9v@FU{8#CD0IX7NSIgQI6uVP+@)
zUvJigSBej^?=O@2_pZ6G@utx)HAc*yk?EXAD-P#HUfQCyale=H`Wp*cKuY(hqxOs*
z$nVNAx*6onu6M`q!mfXd_JCEL5y7@R41Lb%G*~U^J)`SjeI)jbo`W@!+cWyq3i3QD
zJ)>V>9p5Y%XTv9dpexW^Kue9F-Oq2EXRLXBq(OP1h;-G*wUIW9+d%f5WMjlX(^Rjx
zF>SWs(Ru5m+v`_8SR%d<tZlI{vbKPn#LCp7;N<+GRM@Q3mowKY=AP0!z;9wTbMedv
zdzOK<E#t&8K~;HLe%qau)7%|Oy_GpXDC}AbR(i#aU^nanSRuF@_I~=jzusBLrsuxC
s`%yl#dEIC?Y>0QmE^;^ZF8!3hsqfjM<8oIv>OKO;br&mWf{M2p0IzfK3jhEB

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/executionHistory/executionHistory.lock b/src/.gradle/7.5.1/executionHistory/executionHistory.lock
new file mode 100644
index 0000000000000000000000000000000000000000..7acb799609dee6892559eb03e8f652d65b257492
GIT binary patch
literal 17
VcmZQx*SCs+Z4*lh0~jz`0sttN14IA-

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/fileChanges/last-build.bin b/src/.gradle/7.5.1/fileChanges/last-build.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
GIT binary patch
literal 1
IcmZPo000310RR91

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/fileHashes/fileHashes.bin b/src/.gradle/7.5.1/fileHashes/fileHashes.bin
new file mode 100644
index 0000000000000000000000000000000000000000..fb8f243d87a0bdbc0b99f5996395af53a182b19d
GIT binary patch
literal 20047
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
B7zY3V

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/fileHashes/fileHashes.lock b/src/.gradle/7.5.1/fileHashes/fileHashes.lock
new file mode 100644
index 0000000000000000000000000000000000000000..cb2bf5e224b335c6a71e098fec2227c7a981fa49
GIT binary patch
literal 17
VcmZSHv+1(;7uLWk1~6c}2LL(71v3Bu

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/fileHashes/resourceHashesCache.bin b/src/.gradle/7.5.1/fileHashes/resourceHashesCache.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e34e28faf138c5f1364374a484d387786aa9baca
GIT binary patch
literal 20027
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

literal 0
HcmV?d00001

diff --git a/src/.gradle/7.5.1/gc.properties b/src/.gradle/7.5.1/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/src/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000000000000000000000000000000000000..4dff135a3f27ce7ade9b079de84096b8d5f575d0
GIT binary patch
literal 17
VcmZP$2z%To{pi>v1~6bW0{}Jt1g8K1

literal 0
HcmV?d00001

diff --git a/src/.gradle/buildOutputCleanup/cache.properties b/src/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000..3f371e2
--- /dev/null
+++ b/src/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Thu Mar 13 13:52:33 CET 2025
+gradle.version=7.5.1
diff --git a/src/.gradle/buildOutputCleanup/outputFiles.bin b/src/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000000000000000000000000000000000000..178cf6fa340ea6028998b743f748e0d069c058ae
GIT binary patch
literal 19019
zcmZ=^V2}{_4+RVeAc|m)vPMH-Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nhD!*9GB7Z3K|CX&!vtdRmoqRJ@Gvki$o8xeKO$)t
zzy}g#VDPksP9OZA+&L}Va-NPoMBK{~CO%c`nB2zcN1@^#k744oosC`hasB=UQSaFb
z6JK#QjDPaOh)$@uKTLe%!l0R#wyt>t5%(yEiEr+jsh{cgx*a0!c^@XeHQRKz_*qS5
zsJJ9d{L=p#-UaecCPTzMI$`4XE`R@#7QlZGBJL#$6Mq&fb8@;>z<!9h=Wdwz$AxJ<
ze{}e_L&b|>;$M?a>fKp-M-wW37ADRu^+;&#%A8V&xW|5&IPct)n>?%EzJ`c<Cc?x8
z)-rx(t(?6QD$WiQ7ks*-Kt}ySIaFL5Ca%H0|A6x;JE-}dD`DcATZB&6t!Zt5sP~u+
z6StnFqtFoGxCtu$6(;V?w}P|LbN*q7xEC`_+|BQ4#Tk+5-=N~^Fma!Ng%R_g8QDO@
zJ=Vg+{k?vNEU9Yz2Ne&7iN{I_PcSXG_#Gnd`4J|b#<e+k@9S+)dp#Us;#q9$Q}oaL
zd;wAKkqQ$pI?b_u-<R+5Q1Oc}@#+^-dz|-O{R|QJoDLI*(F_bsCn0j9<Y)+thQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjGPcK
tW?*38WME)m1Yr=thav(Bh`}U6o(nN`5hFsL-!V-l&m2r$<e5ygE&xxrjj;d#

literal 0
HcmV?d00001

diff --git a/src/.gradle/file-system.probe b/src/.gradle/file-system.probe
new file mode 100644
index 0000000000000000000000000000000000000000..b6b652ca263cb99b402843235f968d7f670682d1
GIT binary patch
literal 8
PcmZQzV4ONZ^xtm)2yFv3

literal 0
HcmV?d00001

diff --git a/src/.gradle/vcs-1/gc.properties b/src/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000..e69de29
diff --git a/src/build.gradle b/src/build.gradle
new file mode 100644
index 0000000..3cae2d7
--- /dev/null
+++ b/src/build.gradle
@@ -0,0 +1,19 @@
+plugins {
+    id 'java'
+}
+
+group 'org.example'
+version '1.0-SNAPSHOT'
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
+    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
+}
+
+test {
+    useJUnitPlatform()
+}
\ No newline at end of file
diff --git a/src/build/classes/java/main/Client.class b/src/build/classes/java/main/Client.class
new file mode 100644
index 0000000000000000000000000000000000000000..bf7bf00e0ef39728bbc74f6b380ebd8d3c8c0ebc
GIT binary patch
literal 4986
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

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/ClientNIO.class b/src/build/classes/java/main/ClientNIO.class
new file mode 100644
index 0000000000000000000000000000000000000000..ad3ff59556342f395d26652175b1dc07bd6ba9f6
GIT binary patch
literal 5052
zcmX^0Z`VEs1_nDub}j}c24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc1}U(jywnnX&%D%<;QZw5)Dp*(l%mw)Vs-{DMg~sjoXpg`5<gFW
z4h9}Z2F{%P<iwne{NfTW26hHMkWKuI3}PBSU}L~`1(y_M=A~PEYKCz!2r>w<GYIoA
zh%ksUGRT9~<YngTCubz)<)!8n>qG2whHx1fSn>-}^B5Vdp~it+1yKQYk+mko9^7VF
zgX|RNVUS>uWMmLb&d*EBOfM};b;`+4&d$tBXJpXOh{9?}YEEi$Nn%n?D%3I7Tny3-
zGVBbpAjiwW!wJRlU_JRoj0|!bxXsKjvSw#cU}TWP;(M?GnfZC%sg)piEAcQWGpH~!
za1^DcXBL;F7BMo|!-4{v#nzs<t%aCs&B>s~pw7;q!NZ`*poNkof-8$lQgay@nDa|Z
z7#Tz%0h^hxA5fH;R}x%Ol$w}p&B36<$Y31p?BnU`7ZR)BoS&DMnp|?Y`Or#*#8QRg
z)S|M~(jtZ8(jo<Tvam8VGBz>gV$fsIXJ;_rVK8JcVq_2o`yJJAMh5l*kX1Q(j0~bs
zUm~X;%`jF52uJ}%g&7ZnIfDfw16wgT&=?t5G`uuDK{8f64Au-bj0`*wnbZ{T)XHK;
z20>Vyl$K=X=m)2kSaUPjG1#*+IPfqyGB`0Z@PZu$lVxP!$Sg@MN-P1zrx=P}PpG&x
zH-ig<D?5W54}&{{2P1<J!T^{OMh5nb#A3hHiV|=ZivsEJ;$iS+@L^<N$pZ_Ez|01F
z7LqZ+PV?ho@Mj2MWMC^w&CM@MMGF<ELd_^H26=`c9)@6$3%D|igHjVyK*^SiA(SDE
zogtiuA%Y<i7UH0M;#66Z>QtJR21-pFi8-K%DoJHzkkCL*JP1YBAoHVn7-AS=85!82
z8I_Si9p-9~kx<cM{a|ohfUHO48bOA59)<*lL`DXdqSV9`kWG-Z1=5LRkESOFLoy?S
zB0O~kLz7bqD19X(k{T#yr1CJNfr>QN<edECRFGdYco;GnvKSdy(sD8j7#YNo-G^ig
zJ3|g?ss|TNAOrGv81fkk7#Ua-i;5B}LFq{|+KG!Ho1q9)s1-9Zuxms+d4fx^Y=%-E
zhBAh7Mh2FWqRd=I2Glr&7I;Do3=EY#3{?!(j11zriP@>n`FY8SCE=MR8P556#U+V(
zCB=*kYS@xGB!IvP0%{lsLoFkNm}_21QEHV!X<n*Aa(-@7W?o`uaef}ik@Y+b4GfKp
z3>?Y%c_oRNdBuzj(#R$|XCxK{rxuo`<|U_EYesP}G&3@oV>eDg!$ct`wWOpdwOFAb
zu_!lF!AZwm$6qH%CtN2|Q^86Bl$l$37}`KNnH8L8IT<(^I(Qg58M+u5*o%`vg?SMp
zgD}J!kQ@aOwB};yVd!ON=;LAN2Zf&?BFh9rR4_7dfbxY;W?m}DUlVy4CV>=km*j^Q
z6r>h8Cl;r2Fic@&;Er~3_YVq>jIB1Q1u2}y!!Vs;1|tJ|ZemGtMrtuyc7X;X$mg>d
z8AP2Cp{J0USC*KQnUbmpGG-1B!(31*;7Cs`0VSJaP|}#s!?1v1AtM7zc~N2kBZH(y
zv=dT63sMHjP~ggDF%QEMP-<r_FUl-Q<zQIG$RGd>=(7BhqEv;v{9F!(6^snR=%NZ%
z3LFfp7#U>YSs*OGv{)grEVW7@Juy8Gln)dXIT+S3GU$aQ7Nk}wsOtwi`v<wID-`6H
z7AchFXBH{sq!ugWre@~kq?Q&HD-<W^7o`^KaWJf7WMG3R2KjOW55q=q(UMwNnwV3}
z!LXT;K^1PR52&tDNWo%|f)xkDRz?N^Uo;Ci7`8Jq2)Kb9n3I{DS&~?inV(n8&ae|!
z@MPxed-}UpB&QaDWI&bBZXSj`pc;rdwWx@TVF$xL9)|s(h~`R9E%8k)E>28O6=Gmy
zs067!#KUly;RquGQzocxfTSvriFpO3u$l>!u8x5+>TyH?gQi3?jFEva*fl83H7MTE
z#U;o!IGB+^2x1y?R%2w~h2_t%#GKMpMh2Du|DX^?21ZY21_lF5Mh0%DP&YT%p!i_V
zC|70%21W)(1{UZ1lvG9reo(sgE6q(xEeZh@gCGk)4WzKdqD&AUD#%ijky*^h!0iKX
zOj$EBu;eC!{3oUnjp-(k+gUR~{$*s~Do)Kyfh0J1J&jhDGBOB(V?GF!<BLmRin+mp
zFdiR-S6Pw@t~3}KIKcv-*k@$mD#%H!OfB+D%uQuv5CXTGigLlx3ezr%B8V_W7+D+|
zlc1U-KQ}iqFNKkTEeTrrC_=mmayp^{0k=0{l?NjOXA;6-_FPD^U}Rv<POW5QP{5`i
zTmeDbI*bgwpc<zVYFsfR18*|8@d_1SWZ-}_5kOVE3{KPXi>w(L7(w+fL<uNaA<{A^
z;u4F}iy0Y&vBVoA18;CiVsf@`VgWen*%>}CGH}===Rlj?T*3LJMaijdnK`M941Dm^
zpa&`z85sne^7BiIONtT;d{av@@>7cW*%*FsG5los#m?{>RI~hHWKaPqg*56j^UCtG
zQ}rQ59i*~xOH3}wFREl@n1NgwKovp^^+?Q1$w@6%@yXB6E-kQz_z^ijAc>%845=(g
z#iATJ6kv@MOe35Vb8><+OH!>l82&LbaKXzSMh;MJQh@Vai;6%^$`nwAmzS4Xk(r;T
zV5Pvw$iU;7mzP@PoRe5woLbDz$jr!~iV+gnJjl+-3Tu0VJ&EEaXjm{Zut7qDL6L!z
zfr){EfrUYe;RM4;21bTc3=9lR4BQM-45t~+!1-qxq!`X2@y|1Gfoekr1_ovZMo{mI
zfsx??0|SFTxUgVgVAa~rz_<}?)I|mc1~vvp1_lOphD!_#3_M^qE5l`mD+~+_oD5eP
zu0b@jHZZU<h%hiP`R`_6j}+n-G_c&xz`KJ%z(<>T8-rN*4hAV-Z5@_v42t2K7*vI{
zw=wAIh%gv$V=%RooyEYm{Qno7Z48z>8EhFDtXL#jb}~3KGR$QB2x56MG8|x#w_*h;
zkYwG-;LF4iF3Gx$A#f(+IYCB-9Sk8>Y#@Hr0R}-Uc1d<gwrvb?W*nj%ObZwUL6#+L
zW6+gk-^P%#5hRr!zMCOC62!`77UkH^P`Hhu#ENqhgQ_IwE`|yQ29RP-p_*+Bbu$?p
zK-!zOF|=%AXy3-ry^Udl6_+HJ(By3lQ)e;ofh1>cW6)jxKTwiu8^i1!4D+nGCD|pp
zw=paVU(RSK$tkoHY|Jl^%H?olKxUvThkArZl3kJq<a}OHUM$Y%*~S2MKF>CWTxL;T
zsPjQik>rCpA7tCgZ49~~dNr5^Io^t2XssmwHiq>x8B#zr*tr6d?2-Z?=R)lllw_9_
z1lcbnDul&;LAd>bVEcuj_6vio+61;rRZ<uff{@_m6xsp~0FXQ)c$YJXNpcEp1IzG$
zbb=haarr;)<$vG#Y+~4@y^Ue-E`|f(sMyHB#=yWZo5_x02g4l3C=ksU&3Fq;-)7<h
z(M;S-=3v@_$qqy_Ff&|aU|^JDaARO#5MU5s5M&Tz5Mq#G5N1$h5M|J0kYq4qkYcc4
zkYR{qkYz|^kY~tcP-G}&P-3WOP-f_0P-W<2P-B?Jpw2LxL4#oqgEqq=1|3kkU^vX6
z&v2H(fZ-~GA;SX(V}@4@CJdh#Oc}m1STg))uwrCqux1otuw|5CuwztVaAeeDaAGuL
zaAmY(aAO4Z!h9J#8ABPo7^4`x8KW8e7!w)%8A}-g7@HV^8M_$57$-4=GtOd&U|hlw
z$+(Uoig6o5EaN_gIL6})35;hM5*e>DBr)D%NM^jvkjD6sA)WCnLk8nthD;__hHNG-
zh8!kthCC)whI}SfhGHgth7u-ohEgUAh6*NYhDs(ohAJj|hH551hFWk|zQ-WO@PI*`
z;X1=f1}=vG3>*wM7;Z9fGp=I@XSl_1lR<!SAA>u?ZHAi+f{e!*>=^DaoM8}R{K_D}
zaF^jEgD|5C!*hmvAia!w40oY=?HJB7+-JDSz{BXyaD?Fj!x;u%#!`l93=bJjGVn3Z
zVkl&I#Bh><pP`iTFvDYpn+$9W^^7|iVi=w<urqWpZeV!IaE5_{VH;x;!!w4H44e#+
zjQ1IyGrVA6WiVvoVtC1LhJl$ufJu+x6~hw-Mg}P+6^7RgZy1=E>>2nO-ZH!c6;4e4
z4DT5}FfcHDWME);&A|7UL6e<9kexyL4+9_L9|kUV2ABT~5e%H{44)w4jO+|9><sek
z4591{f{Y9de;Fd!8M4_KvVSp%{AUPY;KQL3q6n-ll#zkqKSMo(FfmHe^!;Ga{LjD&
zau-(jurp*cFi8Gq5Mp3OF`R+nCj--e1||kZc7{(NVg~~U!)I_=4Jyjj7?{Ds5q!HD
zdLlP59Nf-ubTdOcs7z-BWe%`91_o{hW`-}|a{epBHwFd<J_aU+?+lC#f5GH`Mo_uW
P#lXnO#K^+P#vlm*GfGet

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/Code.class b/src/build/classes/java/main/Code.class
new file mode 100644
index 0000000000000000000000000000000000000000..8a5a48672accbe7bf558c2b1e63294588884a9ba
GIT binary patch
literal 2636
zcmX^0Z`VEs1_nEZOfCi{24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00Sb_Nbc1{UZ1lvGXzb_OmU25tr(Mh1@L{FK!2{Gt>_2Bv6dkPIIW13yTH
z&Dr0_KPZ@sL6AX+ok5s~L4-jRW=m;FW{!SPVqQvqE+YebUTQ^&XI=>-1B-^IrYFb@
zaUKQ<21!N+VU@(<;?$y&%>2A!m(1eCq@2_gMh3<xE(U1^8FmI)9tJrEd6=PKrw5l5
zW#*+bGO*>O=B1ZpfSvBi&Y;N1Ac63oBg|0OqN4mFE(Qe#W{`<0JPfJ~YK#nQ$r*`7
zj!^eFgJd*7VWi2(z^W1LtQp3|z|Nq}!=S^U%gDf=SDKrYTI8SRn^=;Zky^~iz@_2r
z0}3T;O;3<QeI5n_kV0XYLjUCC(xRf&yyVnkE(Rk8V|E4;9tKkeGe!nJgbRHW!EVpZ
z%mZ2K=?O8*f``G9!HSWAqa+{ZPZ14GAA~lDs5K~NEkN$J<zcX6uxDgoOD!x-%qeDM
z5Y<3Z4T)xJ%_uGgM+PT$24@}y7Y0{G27ZKr&N+$2#f%JMDXGPoMX4$9fD0~3EGaDp
zhi()j1Glrki)*}(tDk#_2O|TcCnE!|bADcNNn&0}SYl3TDl-EE0}H}(q}aFC3}a;A
z_sPsl^#g}v2q=mf8H9ZDlM{2o5{oiHe5fE}CL;q&Nk(QdBLf>Ggc%vwilB)|2;whf
zqZt`^gG&;Vvwaf_peCUB9vW642XKKBF@z7Y8{vJ3m^CAVA}sct^K<fxio-KYGMw{^
zic*tH0`iM9LFto`fl~wGDosyD2G(SdIz|RYXGR9r^wLyNAhIUsm*$nQgYt$lrg5Hm
z$>;_O=Rp!x3R03`WRT1Y&C3NRHe_*7ieqGu!Ybzuv7ZIxOGXCn^wbiNYDlJK(a?-`
zW@KQ@NA)-~X)rQy*d*sb3jwa+{L-T2RJY8WR7M6)kP&*IkYZ3|U}s<g#V~^;gByc8
z10#b60|NsSgC_$gs3c%uU=RY86$}gl5};hoz`(%8z{tSL;Kjhmz`?-4FpYtg0hB_t
zwYD=bYO(KO-O9kpY%9aQh(TIw3j?RjCI(*ZO$@yIwlN5pgtjm-F8}{*BLf2iGlMq+
z1A`O;8v_Fa2LlTO8v{23CxZ|J7lR4|CxaFP4}%W_11M`V@G{6U_%gVI9jVRW$KcNZ
z0@@4#41o-c3_%PG48jad{~35er6D^zgCHXV!!HIIup5J+Zd}8_0(PSnk{dTMh|OXU
z*51Y-#Xg^bdpCnZ<aP$7{ScRnfL*RFvyDL+;^emoC(ALgGcYjlL7mLcpvWM=pur%>
zV9X%EV96i^ceXNv7~I)baA#XFgfN6coh`<|{GUOQfr*`got;6Nf#DAWBjYayQ3gg(
zF#&bC83Qu|BLf2i&u#|kNRX?xGpKI>#}6p@*uZjPU^{uhY#yjhj0|B6;ZQRcF|dH$
ztix=(iGkNocb^#xvl*)>t0>DN21#8}RueNe87)yZ?QINN3AQb)pcs-_1CJsx237_J
z23ZCs1~~>P26+Y*1~~>T21T%)S_~`<QVd)S5e$*wh}41F&cL9<5XIonz{tSFpv4dk
zjyzCANkAfs4eVofMs|i6Mn(pPAK=)Eg}e7H12Y2`0|SFE7WY~~+zWNC8M~G!o7Of4
zJyG@)GY*I#n9V68$|1_RgTWB$p`%D1QUWJiO|a9X7_=Fb8FU!*8FU$}8T1%j8MGL@
z84SRl^I%|SP-akKh+}YPU}w;05MzjEaA)9Pux8+5NMLYh;A8;lhI!o=?sZ?d*S(4G
zx-A0}sD^<?)f5IMaBwR!+cBH5h_bLRVi4Ea!oVrYVj{hOfvts^v4w?k`Tv))=<#F9
zz{Ft2z|COJAjx3HAkSb4_JRomD+4Qo6gVBSFfcGE!X2pyjx$ioQe;SE@MmCRU}BI5
zJC_-prMMZG|1z*LG7A4<U}azeRhCc}u4G^ayU+;XLJd&56lF1iI&=YpAXEU^$v2Rk
z49WE%pW88TGuShzGdM74G1xH}FgPPQTO00dBe=7T;LbJzhcd|723VY}0&+GZLlQ$W
z)Y<wBjNtsi3UV5H266}63dumMP`emGRWDR?A~<*$7^Jn2Gq5tR(LTt)J`2Rq+Qwk6
zy^X<o8-ooZKKQ^TjSmAGgD(R=gCE#vF>v7}4K<p9L7E|jAr)E*urM&OaWHT&q%nYU
zGpIz3WdOw$1B00m`!)uLSq$tf%NbahH#3L{u<c=uWEOA=jbssU4~=9M@DGh-69@{8
uWEThzjpPuB4BgDY3o5CYz=bQQ9RVt61sGVtamvcT#Nz-8hIDWNk^ulN#?J%*

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/IdleClient.class b/src/build/classes/java/main/IdleClient.class
new file mode 100644
index 0000000000000000000000000000000000000000..58ba71257b2a03e7b92e4669e19c0d71c63bd0d8
GIT binary patch
literal 2630
zcmX^0Z`VEs1_nEZsay<949x5dEIbUX3~Y=H0$GV=iTXK-dFlH8Nm;4MC5#MgHko;u
zC3cJq%o>_uTnroxoa_u-JPh0nJd6zTVC8w4`TEHjiFtXcImP<H`N`R-CC(5oBLho*
zL24c&gR+LE4*|8-><oO23{ntPsU`ZJd8s83!yHpmic*V<*%<^F8Mr)Ca#EdhGE?(P
zI2eQ&88~zDlM{0?@{3Ej7<d^(K;95#WDwJU*ar4Ua7j^SUb?j>#P#Al3=#~Ij126_
z`FVL@4@yH7=cSfFT@SU;S~H4+L7I_)#mU`2h>L-rL6(O>jzON0fx9?0FU2>txHvIA
zm65>=rXOc8SYx^d<QRSiMIHtv24zMDzM|CR)XcI}xS6Je&4dOhvKKiSR2kIR8Ps_g
zG#E5dA~U$MxFj`~k%2kCw1kmC6yl!DeEoo;%)FA|lA_eaTx%f)1_o^&1|0@nMh5ZR
z#Oze({JiAElJLxu4Cnm3;*!L?l43>%HK@yw?Zx60E(U!D19k>O9tI-@V@3vHaI~UY
z$jHE60J1(OkC8zXo2lT`X3E2021=Q%$vOGOsq73EFvGwO2+1hQFHcO$N#$ZNXRzX7
zux7AfWZ+FqNeM13C;%mz)D%Vr31q|JI;=Ir*ct3#re)^qd-}UpB&QaXWaj6A0@8tp
z!4VXS%&A31Tnx4h&O8h*46cj}T<NJL@OTn|rE9Qjpeap=fssL*i@}4zlbykfhrye{
z2Q@Ch>5-9vBR#dmsj?)sn2~`+Lo?cmi@}e<pPeCqhar$52<9$O-U2CdDosmEEn;L~
zDKAPaU}TWgh<1X8I;sk5P!0{@VF+aiV`N}0FUl-QMFaqvQcX{gl@UA)kql9c3>=9$
zpu7Z8?}^*+7#@aLkl`#vsfj5d1LAoY5<p&LO)M%(tOWTx36u?!85vkXt_%Z-r1CJN
zfdY@Eq$o3&k%2GRH7LwADBjV<CCD{6n2|vUk|L2qk&%HHmh8e3b4pVg8MvXk0{nwQ
z7#SEnnHd-iEEySCobyvs85#I}GV@aXN^_G^i$Xvt0%RztYzRv%$^`MDf-EH&nZ=9@
zJU)nm#F~+TB{wlM4^(bMV>(1LjFEw(D7CmCKd(5Ik%2cET>8LEI7NsKP}pKG1g#kv
z7*mlm9a2IAS)EvvUd+fKjKyX~2HxP3#N=$>!~(GE*%_)p1sAMrWzU5bL2OCT<N?ju
zAjcq5jWr_!7d&YfGcs@m=a&{Gr@Ce4fPxJX4tk(W%E%z#l%HQxTvC)+;G0^Kk)Kk`
z&&JTk#n8^s!OqYLDj&KS8B{<@A@xLNURi#2sy-y`Ly8Qy#N?9vqDn@F8OS*gst{tR
zM`B(|PHM4=Pkw%OX#ti35)!K51c9P4q_Q9ti*n@9gVbEs&?Jm(gmYp}PH<*Psx=2g
z4<mz8w6l+=t6xa0LeSynLo31YtB_KvP@Gy+mRee*V5Pvw!O#ba8kjoQq9UjSBLk0T
zUS4XEb53G$acVI;!$d{~Rg6Hv=2v!x$&3tg_?0p;ut5TbL6L!<fr){Efr&wiA)O(E
zfsr8-%oAjgV#s31hVye6SQr>VbvOefLoNdYgFXWz10w?i1FP0{2F8tGEqM$K3~XRQ
zHimo#1_mB5o0Xw}p^$-rfs>(#p%|i>QJR63frWvAA$|t~yN~v62Hr>^K|uq{?F_=(
z7{tQ0g`{>c$Y}3iQ1IQvprW&jL5qQ58-t$qF$Ov9Z44&M8N_|Hk1+^9*qnYky4x5m
zb@nf35cb)`V6VN6!D$zR8(7Ci24)5p1|0@-26F}*1_uUb26F}m25$yG23rPZ29R_0
z7`Pc27`Pc&7<d>&8F(3_8Tc3!82A}<7z7y18Mqm|8H5=87z7yn83Y;P7=*#z(qdp?
zP+;I;C}GH8U}9ilaAzoGC}Ut`@Mqv>C}*eudpe$>lA(%$fuWj#fkBUf?LUJ#0~0$#
z4Lbt|10y?w`F{p(P@@RMXJ;@63$gxWV02<<u;pjq0<{4cn82YN3TizuFfj0IZ)0%Z
z!QktwrL&D8I2;k)d<@JC3=Con91P+Nd<+s`2P%NY_!(*$${0X^pP>#Mu^bHS4D}2R
z3``7-3=H7tv}ND|wGW_{MKCaflY)#OBf}1ca33x0Z4A-jyBRzpwYM?EZD&Z_#*nfB
z9@7w;r5V^6WEglEWWhFzLG(jyW@iuu+sBAxA2UM}*o0<=76t|eJ_aU+Rt83fZZO%)
U(9giYz{SAGFo9tb!xRQd09Lh!a{vGU

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/ManualMastermindClient.class b/src/build/classes/java/main/ManualMastermindClient.class
new file mode 100644
index 0000000000000000000000000000000000000000..f07663a2511b88a9f74345107a5906350a5104b2
GIT binary patch
literal 3237
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

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/MastermindBotClient.class b/src/build/classes/java/main/MastermindBotClient.class
new file mode 100644
index 0000000000000000000000000000000000000000..487e2d34227b8e6bfff5720ee31494a24bb18c90
GIT binary patch
literal 3591
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
Z1e1rs<WYv>44}%Nk>LcxDTXr)k^oZOhams}

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/MastermindServer$GameSession.class b/src/build/classes/java/main/MastermindServer$GameSession.class
new file mode 100644
index 0000000000000000000000000000000000000000..9228280d73890e34498c7428bc647bdf624953f3
GIT binary patch
literal 3157
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

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/MastermindServer.class b/src/build/classes/java/main/MastermindServer.class
new file mode 100644
index 0000000000000000000000000000000000000000..47524fba4d211283cca898844e0d16ba29e043bb
GIT binary patch
literal 7286
zcmX^0Z`VEs1_nFERxSo624;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SE(Q(;PId+^9tLg(9!3T!u=2djeEsB%#Js%JoMQdp)ST4hlKdh@2A2GS
z)I3H8ISox8+{&yu8Tc6Z*%<_Q7z7!F7#Re76N^hyi*hsbQi4;9%2JCM890jJM#|tb
ziHkvmL6n_A4CFR(Mg~=EmV!(S&QH!xEpdi8n2|vfhx;&;TC+1q!o8eYqVJiPS^_c4
zF(suawYZpzL4rXV6p%8E3@jR+pwJRwkmF&HXHZ~dU`fi%OJQVi)PQ;+wL~99vo-cm
z!gK}5n@T(k$_y%u41&q|d1;yHrA4VuIr+)inR)4q3>q3y*o^|kOJY(^D%9uJ><ns*
z406~)38XSJKhHb05@eYM4}&Iy79#^kQEGZ7C~_DX>|wsZ7W3Agxb26SYR$=@!=TH~
zpvS|Y&tQO(>VhkaOHy+g8JP1+OBfkMA%T^duOCp9nO72AQk0sQYt6x6#K>R}9qbwu
z<{A{M5T2M>l9`vTkd|Mhker{FmzrFXnV(mzke{bekY7}yU}$7)qNk_F#bCl<%FbZM
z!(h%}!N?#C_Bg7^j124rAbWE17#T#NUIgcb;F6-uymV_&jB+qo@i163*f27%LDD5S
zV|aoxh8+)sJ%a-y0}n(ZHN`u%vY3%U5SGA7OEPoxgHubaxfz@ooY@&%co<w6+!z^n
z!A^n6GBR*vmZTOXg7c6Vie68sxHUI}2ZJX&gBK5jH-ir&gAl?1m=Z<?_Kd`0ztoBn
zu=}DwI{bJT{22lm8Cdeb!XhxU!Cr)9cd*GpJPg60!ho$PH8;O3m5V`@A(V$93}h2~
zW^q_zPG$;7EP{t25+ufxS?rjcoLW!<N?cqFd<@Y%3^5F`j12sVU}3-1a_5}P)VvZ#
z1}$iy=Aot=%tQ_fX;p@J9)<*v4P2SUL8*x;F!Pgm7?K%M7#V~!67y1WQXz&1r52W^
z7MCzGC}Xz+k*2LR!`K<pkWzrBziS1^{h9fBAb(}>Fl2(gpPZPNoSFkltJypZIiQ5f
zoLW@G#gNL7$HS1%P{7E*m7ZGSn_66)n4ZeWfEu3ABqPMYz)-})P|Q%m$RM7Zn4RjJ
zpO>6i5}sL-;hdjWT#}eqQq0Jp26ZzyCZIZ@nFv`3lpD)<7|Izc7#Y|gfeZ34R3&Pl
zA{TPjTntqVO6&~Pj12PNq=H*1NTmilLmeZ740=hd;+~kB8k|~O3=XGS24+xTHS#bt
zF*JjmQ&N(coPp*QXrh8T5bPDG5XhcZ9)>oCc18w)^wg4|)ZF}%RA@oU$RGtvn|T=J
zq!0rmLnkOiyBHaCpy7t83fW3%fP$Rc!^6<a(8tKY4y~^k8Pwr6p{7YtdI2RkSZT?{
zFo9trJHsR%hRF<5V2KA5j!u;&sZOP7Y2d0VF()TKIk6;_kwHQOxfnz!0>{NP9){@*
zGZ-0Iic%9(Kx!f79IA2Fnx3HCG>eB}Hp3i727#2!VrcOON%4#fDlqS(I2|SCK^bWR
z!#o~_`3wsf8CcSCG7A_P#F71s<TQ4MMW}@_xYz^vd<hT3Qif%W46KPoMTwQ5>P<7+
ziHl(&!wOJ+w~~>8T_f7b6I|sjWLV9^um+SnSW1dAbA=d~7>Ynazn+I-1E}=jN(85r
z+|;}h4u(yP3~c(r&i+BJAj7usFl=Sm#>l{yT3DKxQ;b#!LsO1s6ev`7@G$HI*&&vm
zTH=;pl$%&mlA02noL`jcl%H6X0#dS@hhY!HUT|@omlBc>3p6vrfd+{UaB_vF9Z)dV
zGVJGJH~`AXJOxGh$*IM~?xm^4#T*QW7#aAT^YhY+5=%;R62X-Z$TvrL7>+U=V`Sh+
z&d)1J%*-ohWRQm14K~_2Be5tLRBGiVr&?=9aWI@<WKeR=D@iR<sLU@dQpiipO;sq#
zS13*_OI0YzNL45XdCv+I9jAC0PJ`l;H903Wu?S?@SssRSprVpJv)DDaprjJith&I%
zaFO8>BLf#$BRE_b8TcWd1J^dbi3QeN47Chbco?pNYBcWj)Dp*%lGNOSl434~>kK#8
z8E*10++w)R$RG$VH^A=p%qvMv2c>rQvc#OyRR1(a1~GVIM^<6Y&2X3D9y`N*9)<@D
z4^iql-^2n&2Ic}#9dCggCeS#BxDjj?R0KIcLxqGGm_aFPA;S|MhNqy!$&sE~0!q!r
zpdfnA!|;OPB_jh%c@fAiNsVYHs2OOv3{(=m=3#gP%8#t&MVTe3LJTYnogm@&JPaQ|
zH34gKPJVH!5Cbbi5j(?YMh0<2U_jD`Q)y;SN@@`Y!&gQIUZ>RJ5(RKlEVkm}V)(@H
z9h65bK!Nd-hv65fg}{-TS5j0NoLT~E3H;$<_{;DQ)Sdu0Z$PO8>QZnd6@x|fp=}>-
zMg~Skc19*1MrKA9STO`v=bKod;tDdBkwG9iKer$e)MRn03<JdxsE9!}(-|xeYGPP(
zGqN$Vvomt=Fmf_-!Mp}G5XEAU^YV*IQd1Zi451MQR)k~{vIQu5t%Vra7<qUY${BeX
z8Bn4dCG=n|V6eGqrFr0HoIa?QEX_?V0y~tShf#o0kdc8sEx*VWT-_)jI|fq|DBpf!
z6y{+R0TmV;CHW8=L7^zd!zd0akJ!>vOT0lX-A{~?Jd9F|(xA$$pdc00TGxe|4o-;>
ztuR+22|;7unuAf6k%3vkN&#fNJP)G+$aqkq1jhjv!zV^1kOj(&3@GM8lQT5<u$rsN
z$iSrlD&oL7lbunWkwFcd2Ek#KoS&CmT2z#pR{{zxDAOacIKwxwfQwO$ftitkCBQ!@
zgpq;KlaYZJ6r!MZ2iR523=Axn7#X;oLfzb4gW`idqg<I87#JBC890M8)AJHbN{dn%
z8O$IV5^S4qVu1~Wi{w;mBoS!&U~Om3$iU*9pOOkHbTac&{YrC_Qj0=Bl`12HkWYSc
zVoq3MQ6`8F6=W&N$SelQp*KB1Cgmn(=7CC@Xe6s(Q4+?;z?h2MT|jEmSu-*)XQx&&
zGAKYa=Al%U;I1XKSHj330#O3?C#)rH&B(x84DO0Tn*xjs>JVjUCSkT>85vj-i_(i3
z8HBMonvp>aH4G{XQla619NaKxK*Jo(PEaca>UvOc^9GkBCTII57Jv<6XLMj>;7ta%
zz2R<G#O8LCCIce_7rZ@O%*eo1kds)MTI83Qn+l2=aI!;=c}51#q{@<1a0{K0fi*J^
zT&lAdLmG;V401l`v5DM}v<CMpiwpAeic=XG*pi?PDQL$J<XcdQ4ryOmGcvH}!dlx*
z#Yv0|k`T`zIR};(85!hr5_6MM5>>D_5L65h1sN9Y5Ocxl0A8+IYlbm0u!2i&cv3@C
z!N|a2lbiz`FX0N#FD*(=b<4~FB~A1|&;tb|BLlZzYH^8gDkx_ZGcpJ`<>!|amlP!y
z_@<U*<fjz#voXeTF~&0{urns|FcdQ;F*2xtG(v`GGV{vvvr|D;LuOt&q+{Wh2pW8;
zWMr6uTy#MdLJai)_nL}TeDd?NOAC;5E;KtqJP!^P6pbO31*uq+Bd2XFWf{~6=fs?x
z;LMU#YYxT~Mg}Q(@7=j5vm`S)F-IY_s3^b4N`aAsF^!Qy0WR;CTCM;|!m!SLY6@6Y
z1|x$ATvbqNa%yH7R3?j&fr*iegE5DZK_0FG()?3EG@_x3^N<y}z?;~a`FU^`@v|`&
za4{A#7O^uH^Dve$mNGIZVMKxtIJNnvmL#UZqJTRWnRkZv5dsZrNHn9z7K$V!4IoD*
ziZoa+a)ktyg-4<QV>yo2c^E$%V<i^@A7d2{V+doY0AmfP@c~IvXt@QHpLjg;@=}YO
za}tY-Q;QiHxRLspj0~*c_6$2?BWyGeGfhG~0!z&7jLoniEu2aj8Q35xpFxp<kAaDS
zfq{iVicynMi-D0*n}LCWiBX3^icuGdug4$-YDhCMGU|in4H&pUgOv;n44e#%pm9?M
zMn*#h1_pg_y~)79s<oYgaU)o%5d#AQ8v`Q)0|N)6F#`hw517r$Xu@a;(#~kcXb#cL
zxR!y1ft7)QVZjat_RS2uI~at0w0AQ|L<+K8+Rh-gjX^eCn|T|9Vz~Au23`SyZ4Bz+
zn;5i(47V{DZ(`ux#$Xu^rfhdII5IN$>g;52XJnYk;H0yY!IzQY0E4QZ&Q69vMh4w&
z3?Z`^*p~l)pu3GBd?o{z_6~-q<qUkf+Zf_zGO+9JU`Slfz-h&zyNw}z`TyO^|1b5~
z#E_-EjUjgzLm>mhHU{I33``8^3=Is;45<tZ4E+rK45<t(j39p|F-R~lFbFWPF$gkn
zF$gh8G6*xsGl(!~GKeu4GDtF5Fi0`DFvu|YGRQK7GsrQ-GRQNeGbl0SF(@;XGN>@r
zFsL##FlaI~GpIAPGH5V#GH5aMFlaOMGw3i(V9;fl&!7(uLpugGhE@g^Mhiwu1{Q{J
z1|vo*Mr#IU1{Veo275*u1||kBhE_&fMmq*Zh6xP(V0EAvSioq{=)l0h=m?Dmh<Yam
zCPrrl1_oUQ&OZ!>><l7*7=+jvJpO>jOH_HeoY)yse=)HBVqp5uz{J4F&gjCx$j*?;
zzy%uOVqgNtdlLgQ12Y2ygMrpIhEg9;G*yD5iDer@jjzsbhT6#O4E5U>8bC3oy^Wz|
z7efa$C_$+W6m(JyYzzzxMhvVB#thsHCJZ7BrVI)UW(@ia=3p-?K+Fewih+TZL7UN)
z(T#zTL4-jD?0F_ecW^pp1iLJmAqASKUNEpSa4;}19M{^$(0zcR%14lqVFyFMueQ!M
zhN*V4ObZw|w0AJf+^DmSVQ%<thJ}$j+ZYxz%Wh{_zKvm(70V_DZAq403~Rxz)!N3e
z?f^rr6{{qR(8g^Hn`bg`Ywuv#zJp=cMoCslmTe6Ctk|?A*>*7Ol4KJ)xQ*fPOa?D)
zq2oIkcIj+mI2jJLavp;zcFWi$*|#yAnZ+QsiQ&8?yCmy2hRZt`uI*&F!^{xAoPom+
z>`n$|27U%PhJy^L4Dt-IU^<RrADCtar@<ly83qOhD+Ue*YX*J>I|fk(dj=^62L?F?
zM+SKY7X}puR|Yc%HwI@04+b9wPlhlCFNRnKZ-zJqKZbM$e}-I!K!$RLAck6oV1_1!
z5QYwhP=+3cFouZ?;S7rzA{bUPL^AASh-Wy+5X*3gA&%h~LjpL0Vi-6X7BfgQdN6u2
zurr7<tYq|J)M8*}Fk|Ro^k(#AU}5lKC}Q+s^kraWNM{IV^kej7U}HE0O~s(Za~vFz
z3=A9$`=OD`&#;5hpD_TMK4lqL|1rq3GgPrNOkn)WV8_m|ke#9S2SYq4g|aYkfyO!*
zAmvamXikTLfk8%l7sDe^+&$jG@XS|BXB)#SP*D16fubB-5D7DgF{Cm;f)0`fQy6#|
zQW=C9G8n`d(ip@U(ix-~GQnQdVqjt5WnhCii9sCdbWr&z19mV2$VSFMMo$JtaE4-M
zU<zYrNCi1<Hp3jK(^?pqz(ub5CI)RSa8`H=a-gx+Himc08H5pq%}22CMjWopW#DJX
zV-RL2WDsM>XAoy7U{GTy0=rU-fr&vJDbuS%+=lETeg-bk*b&r4nGDQeOZ0a$e2NtM
zvYp|Z_a=t(I~jg3GVEmd4azS6cQUdvF=*{#<Yr*l$;ijVptX%rXal@>7XugDr3_pQ
zWenmB<qWC}6%1Mom0;I^ihC{wRmLF3U<L*OE>MLCwKf785Gq>QI~hemMfAdLj1t0(
zGTRs>w0APfF*0mpR1{`Z*~Talj$V~ifXxQ^lz~A7Vm1Sa6~-9Oz{tSC7y+tsz$KG1
zIItNQxOX$EMQ&%**vxPqWEdkjuR!W0ZUz>{NU&$37^9(uNG)Rws5oO_XN+ZFWK0H=
zsbDf4OlE?~Y%rP2n9sn>SjJevSj||=z`!8Iz|2s~z{gm}z{SYGaF?;3jgzr~v5B#T
GK@tEG7LpJE

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/ServerNIO$ClientData.class b/src/build/classes/java/main/ServerNIO$ClientData.class
new file mode 100644
index 0000000000000000000000000000000000000000..0429fc9a1dc90a5f8f51aea90c77f64fe92761f2
GIT binary patch
literal 841
zcmX^0Z`VEs1_nC@RW1f524;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3U{;MAhB)FMAme--DP%+$ORm&B4pMh1?=l9JTi
zf|6oJ21ZYi7Cs&Zeg*+X2Cjmf#LCnnzr@^BMg}1tgk`}cMVWc&){G1+&iN^+j12rf
znR%&xrMXF|MInhvIbhZK$%#2(iA9+pK2(sUBqOt!kwMG{n>(x-83Z%)l8aJvQ}aq3
z;V$A%PetM}YiN2hGVm6smINR<O;iKZZJJ?>3@mwIm-D8hDi_hv#8l77z!jWdT9lmX
zmI-n{AKZz0Aa64=aQLMbmw4nCm#{M^F*0z%r5PD`JoEBWi=1;3i;Gi>85y_`LCc`P
zz`?-8z`(%7zyyi`FpHl-fPsO5m4OKqg$#@gf(#4{77R=bj0_A6Tw2>17`2$UGO%w1
zs}%x?flYYDz{2pFL70Jofd`_JL4-k+fq{XML5zV7YKkQTGgyvWD{>11J4*r<W8O1x
zF?>KWh8u2-ID-V#7<~pturaJ!TNv2az}*3|g@NHSl4e%8W=RGqsAfB`Ul|zKw6wP}
z@S^+TI|D1j53mVhU|+F8O<-VPV~}PL09!1>APY4M*&)0e&>Zp`Yz!nYU=CqskOQld
XXHWpsiVVu&0Ays~U{GXGVc-G)FjkY8

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/ServerNIO$GameSession.class b/src/build/classes/java/main/ServerNIO$GameSession.class
new file mode 100644
index 0000000000000000000000000000000000000000..23622430f5d5dda10ebc858c7943fb3c0063258a
GIT binary patch
literal 2467
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

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/ServerNIO$PlayerScore.class b/src/build/classes/java/main/ServerNIO$PlayerScore.class
new file mode 100644
index 0000000000000000000000000000000000000000..147ad4f12fc86bd0704e97190139e04934c6556c
GIT binary patch
literal 1190
zcmX^0Z`VEs1_nC@Q!WN324;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk-
z5<5l)W)00SP6iGJPId+^9tLg(9!3Vy;MAhB)FMAmf0clo#LCp7;N<+GR7M7tyu{p8
zMg}1tgmJ+oMVWc&)*u7;co_H@1Q;1uiy^8RJ%tz;7=(Bjgc(E_8N_oFvs0b(^O6%w
z!ZS-Uob&UFOA_-+iWwQyH89Qd)Wj5HWDvuuGK`Ud#W_DEm63tpCo?bAuQWF)wJ0Pp
zDF^J-{N%)(u*9NF5FaYYQj(Eb%*Y__gVmeXj127QsU?13uZn13bqGg#Y6&z<m^Cy#
z85uZA@*yF?$iNkxUs{x$>Xr$zpAT+@9w^Kh894k>i%UH6i%ZxUR2UgJ;nIu@0#5n)
zCB-F0i3Pr?B^miC#r$jx>Rb#O44Ui=TA)DGW@JzS83KvN%)GMv>{NY-t&nhaOH3}w
zFREl@n1LKlP=ydfJreU$a#D*`eDd?NOAD+q0~tvKMPo>1K`IvI(MakcDa#r;z@SDr
zC+6e?XO^T|b1>*KGVn86DKILOq~?_*mSmQt7Be#Nc;@A$7CGl678irK+(?OzoxzZi
zK^4Q>*nGpzV9dxMhhHfp0~^Ha3<?Y!3``6R3``6{phOQ!si5S`z`(%5z{tSLAj-hV
zAjZJJ5DCgj3=9nXTH6^IwY0Y~uxrU|W#HWi)+!Fx#=^kB$jrdP$il$M$jZRS$i^VS
zz`&ruzzovHAju%b00R7AYZ$>|{0ssNObm<+(hM?CYxEfy89;KZT3Z;{H^2>N0|_#6
zf(_&Wu^CvQ1~M|pGRR@k%)16nGcQ)n@^G6iz%F56-~-vLwS|Fq7lR-J1G*E0kWAr&
zI)Q~j0c@8dgA$llW>95dVBlb2WKd&ZWYA&I1BVV10|$dLgFXWng8_pPg9(Eq04Y@k
AJOBUy

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/ServerNIO.class b/src/build/classes/java/main/ServerNIO.class
new file mode 100644
index 0000000000000000000000000000000000000000..f460e76948e12d5db743e108c4316c6628bd058b
GIT binary patch
literal 9044
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

literal 0
HcmV?d00001

diff --git a/src/build/classes/java/main/Stress1.class b/src/build/classes/java/main/Stress1.class
new file mode 100644
index 0000000000000000000000000000000000000000..4e0e6c1c098566f8928588db23f93821e10ef3a2
GIT binary patch
literal 6827
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
ZWE7Z;VT@y7VBlh4WQ=D_WK3p|1OQq71_uBD

literal 0
HcmV?d00001

diff --git a/src/build/tmp/compileJava/previous-compilation-data.bin b/src/build/tmp/compileJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..c6b6ec41f70c960eb665522e31d0982be19a7210
GIT binary patch
literal 650
zcmd;O2xfF=Qeh5eVd(ZvEG|hc%FWD6VP$AbEh<YbVq<7zXJ|>xP32%{Pc1Ia%+C|h
zw7$UTbzto=clJ7?TZ`78<8<a?X!T6VN#$l}%gId5D-p=fco@6=R`y5Np3k}xZv=&T
zf_Ve@RQUY`JO%xP7}|p&CbO}z2{W|iBvz&ti7>P#=NF|4d^vNiV(uxu1N<gdGZ)W%
zu!mW|?wPb_*@B4Wr`E>Bp3?ZXP1HrqnU7nXp(U{-QQ+I=8Eal2X;5A$B3<=yZKRC^
zL#uOsN~*vE`CU0iH-o&{_3jv6*!6FbBtu7VNl|KXv7tcll(WIPj`z64;uzP&FEU*#
z<t**QBE!&}U&1Z$lO?@TuJnUuz#XNKyJ7cE$~w#W$}_b4CgznU<|r_9!2^d|;QiF;
z?a4*9muGK#w`+Nn$t6X9B~N8P6^3?aa0sxmu?d*Yd9>niUgV`MS{wI!DX+hwB2Zyw
zC;wk>)`VAz53=tslljLlP<dK@+ntru+#O22l{r5s>{1O@bLV5{5U5w&m^NGR=)CpO
z?e!}kED>kpVPxcIRApdbWMpPwU}j`wU|<ksWaMXH;Adp!5mjYiPzCcCB^VeO7;nfi
zZD?RX0?3>OkX}x8J$?;_)~v*`L<R;17JgAx9!)((4UlF<Ej>;!gHu~i63md)(PIWN
zn3x%K^<+UTMp->QDKJAyUrz$ekTB3w0W(xU<}(_48wDHdndq77X_zsz<YnfYGjt|r
kB<AI%<`lD8Fm$Hoq$ZbS=I2>5G^bWFvM?*E@G~#~0NU2P^#A|>

literal 0
HcmV?d00001

diff --git a/src/gradle/wrapper/gradle-wrapper.jar b/src/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196
GIT binary patch
literal 60756
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

literal 0
HcmV?d00001

diff --git a/src/gradle/wrapper/gradle-wrapper.properties b/src/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..ae04661
--- /dev/null
+++ b/src/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/src/gradlew b/src/gradlew
new file mode 100644
index 0000000..a69d9cb
--- /dev/null
+++ b/src/gradlew
@@ -0,0 +1,240 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original 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.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# 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  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.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" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/src/gradlew.bat b/src/gradlew.bat
new file mode 100644
index 0000000..f127cfd
--- /dev/null
+++ b/src/gradlew.bat
@@ -0,0 +1,91 @@
+@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  Gradle 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 GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 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%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/src/settings.gradle b/src/settings.gradle
new file mode 100644
index 0000000..0b03f4c
--- /dev/null
+++ b/src/settings.gradle
@@ -0,0 +1,2 @@
+rootProject.name = 'src'
+
diff --git a/src/src/main/java/Client.java b/src/src/main/java/Client.java
new file mode 100644
index 0000000..1aed5c5
--- /dev/null
+++ b/src/src/main/java/Client.java
@@ -0,0 +1,123 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.*;
+import java.util.Scanner;
+
+public class Client {
+    private static final String SERVER_ADDRESS = "localhost";
+    private static final int PORT = 12345;
+    private static final int BUFFER_SIZE = 256;
+    private static Scanner scanner = new Scanner(System.in);
+
+    public static void main(String[] args) {
+        try {
+            // Connexion et ouverture du canal
+            SocketChannel clientChannel = SocketChannel.open(new InetSocketAddress(SERVER_ADDRESS, PORT));
+            clientChannel.configureBlocking(false);
+            Selector selector = Selector.open();
+            clientChannel.register(selector, SelectionKey.OP_READ);
+
+            System.out.println("[CLIENT] Connecté au serveur sur " + SERVER_ADDRESS + ":" + PORT);
+
+            // Attente de la demande du serveur
+            while (true) {
+                int readyChannels = selector.select(100); // Timeout pour éviter un blocage
+                if (readyChannels == 0) continue;
+
+                for (SelectionKey key : selector.selectedKeys()) {
+                    selector.selectedKeys().remove(key);
+
+                    if (key.isReadable()) {
+
+                        ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
+                        SocketChannel channel = (SocketChannel) key.channel();
+                        int bytesRead = channel.read(buffer);
+
+                        if (bytesRead == -1) {
+                            System.out.println("[CLIENT] Serveur déconnecté");
+                            channel.close();
+                            return;
+                        }
+
+                        buffer.flip();
+                        String message = new String(buffer.array(), 0, bytesRead).trim();
+                        System.out.println("[CLIENT] " + message);
+
+                        if (message.contains("Entrez une combinaison")) {
+                            System.out.print("Entrez une combinaison (4 lettres parmi B,G,O,R,W,Y) : ");
+                            String input = scanner.nextLine().toUpperCase();
+
+                            if (!input.matches("[BGORWY]{4}")) {
+                                System.out.println("Combinaison invalide.");
+                                continue;
+                            }
+
+                            // Envoie la combinaison au serveur
+                            ByteBuffer sendBuffer = ByteBuffer.wrap(input.getBytes());
+                            channel.write(sendBuffer);
+                        } else if (message.contains("Entrez votre nom")) {
+                            // Demander à l'utilisateur son nom
+                            System.out.print("Entrez votre nom : ");
+                            String playerName = scanner.nextLine();
+
+                            // Envoyer le nom au serveur
+                            ByteBuffer sendBuffer = ByteBuffer.wrap(playerName.getBytes());
+                            channel.write(sendBuffer);
+
+                            // Attendre une confirmation de la part du serveur
+                            ByteBuffer confirmationBuffer = ByteBuffer.allocate(BUFFER_SIZE);
+                            int confirmationBytesRead = channel.read(confirmationBuffer);
+
+                            if (confirmationBytesRead == -1) {
+                                System.out.println("[CLIENT] Serveur déconnecté");
+                                channel.close();
+                                return;
+                            }
+
+                            confirmationBuffer.flip();
+                            String confirmationMessage = new String(confirmationBuffer.array(), 0, confirmationBytesRead).trim();
+                            System.out.println("[CLIENT] " + confirmationMessage);
+
+                            // Afficher un message confirmant la victoire et la saisie du nom
+                            System.out.println("[CLIENT] Vous avez gagné !");
+
+                            // Demander les meilleurs scores
+                            System.out.println("Tapez '/SCORE' pour voir les meilleurs scores.");
+                            String command = scanner.nextLine();
+                            if ("/SCORE".equals(command)) {
+                                ByteBuffer scoreRequestBuffer = ByteBuffer.wrap(command.getBytes());
+                                channel.write(scoreRequestBuffer);
+
+                                // Lire la réponse avec les scores
+                                ByteBuffer scoreBuffer = ByteBuffer.allocate(BUFFER_SIZE);
+                                int scoreBytesRead = channel.read(scoreBuffer);
+
+                                if (scoreBytesRead == -1) {
+                                    System.out.println("[CLIENT] Serveur déconnecté");
+                                    channel.close();
+                                    return;
+                                }
+
+                                scoreBuffer.flip();
+                                String scoreList = new String(scoreBuffer.array(), 0, scoreBytesRead).trim();
+                                System.out.println("[CLIENT] Liste des meilleurs scores :");
+                                System.out.println(scoreList);
+                            }
+                            channel.close();
+                            return;
+                        }
+
+                        else if (message.contains("Félicitations")) {
+                            System.out.println("[CLIENT] Vous avez gagné !");
+                            return;
+                        }
+                    }
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("[CLIENT] Erreur de connexion : " + e.getMessage());
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/src/main/java/ClientNIO.java b/src/src/main/java/ClientNIO.java
new file mode 100644
index 0000000..2784dfc
--- /dev/null
+++ b/src/src/main/java/ClientNIO.java
@@ -0,0 +1,127 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.*;
+import java.util.Scanner;
+
+public class ClientNIO {
+    private static final String SERVER_ADDRESS = "localhost";
+    private static final int PORT = 12345;
+    private static final int BUFFER_SIZE = 256;
+    private static Scanner scanner = new Scanner(System.in);
+
+    public static void main(String[] args) {
+        try {
+            // Connexion et ouverture du canal
+            SocketChannel clientChannel = SocketChannel.open(new InetSocketAddress(SERVER_ADDRESS, PORT));
+            clientChannel.configureBlocking(false);
+            Selector selector = Selector.open();
+            clientChannel.register(selector, SelectionKey.OP_READ);
+
+            System.out.println("[CLIENT] Connecté au serveur sur " + SERVER_ADDRESS + ":" + PORT);
+
+            // Attente de la demande du serveur
+            while (true) {
+                int readyChannels = selector.select(100); // Timeout pour éviter un blocage
+                if (readyChannels == 0) continue;
+
+                for (SelectionKey key : selector.selectedKeys()) {
+                    selector.selectedKeys().remove(key);
+
+                    if (key.isReadable()) {
+
+                        ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
+                        SocketChannel channel = (SocketChannel) key.channel();
+                        int bytesRead = channel.read(buffer);
+
+                        if (bytesRead == -1) {
+                            System.out.println("[CLIENT] Serveur déconnecté");
+                            channel.close();
+                            return;
+                        }
+
+                        buffer.flip();
+                        String message = new String(buffer.array(), 0, bytesRead).trim();
+                        System.out.println("[CLIENT] " + message);
+
+                        if (message.contains("Entrez une combinaison")) {
+                            System.out.print("Entrez une combinaison (4 lettres parmi B,G,O,R,W,Y) : ");
+                            String input = scanner.nextLine().toUpperCase();
+
+                            if (!input.matches("[BGORWY]{4}")) {
+                                System.out.println("Combinaison invalide.");
+                                continue;
+                            }
+
+                            // Envoie la combinaison au serveur
+                            ByteBuffer sendBuffer = ByteBuffer.wrap(input.getBytes());
+                            channel.write(sendBuffer);
+                        } else if (message.contains("Entrez votre nom")) {
+                            // Demander à l'utilisateur son nom
+                            System.out.print("Entrez votre nom : ");
+                            String playerName = scanner.nextLine();
+
+                            // Envoyer le nom au serveur
+                            ByteBuffer sendBuffer = ByteBuffer.wrap(playerName.getBytes());
+                            channel.write(sendBuffer);
+
+                            // Attendre une confirmation de la part du serveur
+                            ByteBuffer confirmationBuffer = ByteBuffer.allocate(BUFFER_SIZE);
+                            int confirmationBytesRead = channel.read(confirmationBuffer);
+
+                            if (confirmationBytesRead == -1) {
+                                System.out.println("[CLIENT] Serveur déconnecté");
+                                channel.close();
+                                return;
+                            }
+
+                            confirmationBuffer.flip();
+                            String confirmationMessage = new String(confirmationBuffer.array(), 0, confirmationBytesRead).trim();
+                            System.out.println("[CLIENT] " + confirmationMessage);
+
+                            // Afficher un message confirmant la victoire et la saisie du nom
+                            System.out.println("[CLIENT] Vous avez gagné !");
+
+                            // Demander les meilleurs scores
+                            System.out.println("Tapez '/SCORE' pour voir les meilleurs scores.");
+                            String command = scanner.nextLine();
+                            if ("/SCORE".equals(command)) {
+                                ByteBuffer scoreRequestBuffer = ByteBuffer.wrap(command.getBytes());
+                                channel.write(scoreRequestBuffer);
+
+                                // Lire la réponse avec les scores
+                                ByteBuffer scoreBuffer = ByteBuffer.allocate(BUFFER_SIZE);
+                                int scoreBytesRead = channel.read(scoreBuffer);
+
+                                if (scoreBytesRead == -1) {
+                                    System.out.println("[CLIENT] Serveur déconnecté");
+                                    channel.close();
+                                    return;
+                                }
+
+                                scoreBuffer.flip();
+                                String scoreList = new String(scoreBuffer.array(), 0, scoreBytesRead).trim();
+                                System.out.println("[CLIENT] Liste des meilleurs scores :");
+                                System.out.println(scoreList);
+                            }
+
+                            return;
+                        }
+                        else if (message.contains("Meilleurs scores")) {
+                            System.out.println("[CLIENT] " + message);
+                        }
+
+
+                        else if (message.contains("Félicitations")) {
+                            System.out.println("[CLIENT] Vous avez gagné !");
+                            return;
+                        }
+                    }
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("[CLIENT] Erreur de connexion : " + e.getMessage());
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/src/main/java/Code.java b/src/src/main/java/Code.java
new file mode 100644
index 0000000..abaf4fb
--- /dev/null
+++ b/src/src/main/java/Code.java
@@ -0,0 +1,80 @@
+import java.util.Random;
+
+public class Code {
+    public static final int CODE_LENGTH = 4;
+    public static char[] COLORS = new char[]{'B','G','O','R','W','Y'};
+    private final  char[] codeWord = new char[CODE_LENGTH];
+
+    public Code(Random random){
+        for (int i = 0; i < CODE_LENGTH; i++) {
+            codeWord[i] = COLORS[random.nextInt(COLORS.length)];
+        }
+    }
+
+    public Code(String codeString){
+        assert(codeString.length() == CODE_LENGTH);
+        for(int i=0; i<CODE_LENGTH; i++)
+            codeWord[i] = codeString.charAt(i);
+    }
+
+    @Override
+    public String toString() {
+        return new String(codeWord);
+    }
+
+    /**
+     * return the number of colors of guess that are correctly positioned
+     */
+    public int numberOfColorsWithCorrectPosition(Code guess){
+        int count = 0;
+        for(char color : COLORS){
+            count += numberOfMatches(color, guess);
+        }
+        return count;
+    }
+
+    /**
+     * return the number of colors of guess that are in this codeWord
+     * but do not have the correct position
+     */
+    public int numberOfColorsWithIncorrectPosition(Code guess){
+        int count = 0;
+        for(char color:COLORS){
+            int nMatchedOccurrences = numberOfMatches(color, guess);
+            int nUnmatchedOccurrencesCode  = numberOfOccurrences(color, this) - nMatchedOccurrences;
+            int nUnmatchedOccurrencesGuess = numberOfOccurrences(color, guess) - nMatchedOccurrences;
+            count += Math.min(nUnmatchedOccurrencesCode, nUnmatchedOccurrencesGuess);
+        }
+        return count;
+    }
+
+
+    private int numberOfOccurrences(char color, Code code){
+        int count = 0;
+        for (int i = 0; i < CODE_LENGTH; i++) {
+            if (code.codeWord[i] == color) count++;
+        }
+        return count;
+    }
+
+    private int numberOfMatches(char color, Code guess){
+        int count = 0;
+        for (int i = 0; i < CODE_LENGTH; i++) {
+            if ((this.codeWord[i] == guess.codeWord[i]) && (this.codeWord[i] == color)){
+                count++;
+            }
+        }
+        return count;
+    }
+
+    public char[] getCodeWord() {
+        return codeWord;
+    }
+
+    @Override
+    public boolean equals(Object o){
+        if (o == null) return false;
+        if (!(o instanceof Code)) return false;
+        return this.toString().equals(o.toString());
+    }
+}
diff --git a/src/src/main/java/IdleClient.java b/src/src/main/java/IdleClient.java
new file mode 100644
index 0000000..c1c5e5e
--- /dev/null
+++ b/src/src/main/java/IdleClient.java
@@ -0,0 +1,31 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
+public class IdleClient {
+    private static final String SERVER_ADDRESS = "localhost";
+    private static final int SERVER_PORT = 12345;
+
+    public static void main(String[] args) {
+        try (SocketChannel clientChannel = SocketChannel.open()) {
+            clientChannel.connect(new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT));
+            sendMessage(clientChannel, "BGOR");
+            String response = receiveMessage(clientChannel);
+            System.out.println("[CLIENT] Réponse du serveur : " + response);
+        } catch (IOException e) {
+            System.err.println("[CLIENT] Erreur : " + e.getMessage());
+        }
+    }
+
+    private static void sendMessage(SocketChannel channel, String message) throws IOException {
+        ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());
+        channel.write(buffer);
+    }
+
+    private static String receiveMessage(SocketChannel channel) throws IOException {
+        ByteBuffer buffer = ByteBuffer.allocate(256);
+        channel.read(buffer);
+        return new String(buffer.array()).trim();
+    }
+}
diff --git a/src/src/main/java/ManualMastermindClient.java b/src/src/main/java/ManualMastermindClient.java
new file mode 100644
index 0000000..3cafac6
--- /dev/null
+++ b/src/src/main/java/ManualMastermindClient.java
@@ -0,0 +1,50 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.Scanner;
+
+public class ManualMastermindClient {
+    private static final String SERVER_HOST = "localhost";
+    private static final int SERVER_PORT = 1234;
+
+    public static void main(String[] args) {
+        try (SocketChannel socketChannel = SocketChannel.open()) {
+            socketChannel.connect(new InetSocketAddress(SERVER_HOST, SERVER_PORT));
+            Scanner inputScanner = new Scanner(System.in);
+
+            while (true) {
+                System.out.print("Enter a combination (or /SCORE to see the high scores): ");
+                String userGuess = inputScanner.nextLine();
+                sendToServer(socketChannel, userGuess);
+
+                String serverResponse = receiveFromServer(socketChannel);
+                System.out.println("[SERVER] " + serverResponse);
+
+                if (serverResponse.contains(" Félicitations")) {
+                    System.out.print("Enter your name to save the score: ");
+                    String playerName = inputScanner.nextLine();
+                    sendToServer(socketChannel, playerName);
+                    System.out.println("Score saved!");
+                    break;
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("[CLIENT] Error: " + e.getMessage());
+        }
+    }
+
+    private static void sendToServer(SocketChannel channel, String message) throws IOException {
+        ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());
+        channel.write(buffer);
+    }
+
+    private static String receiveFromServer(SocketChannel channel) throws IOException {
+        ByteBuffer buffer = ByteBuffer.allocate(256);
+        int bytesRead = channel.read(buffer);
+        if (bytesRead == -1) {
+            return ""; // Return empty string if the connection is closed
+        }
+        return new String(buffer.array(), 0, bytesRead).trim();
+    }
+}
diff --git a/src/src/main/java/MastermindBotClient.java b/src/src/main/java/MastermindBotClient.java
new file mode 100644
index 0000000..c96673e
--- /dev/null
+++ b/src/src/main/java/MastermindBotClient.java
@@ -0,0 +1,60 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.Random;
+
+public class MastermindBotClient {
+    private static final String SERVER_HOST = "localhost";
+    private static final int SERVER_PORT = 1234;
+    private static final String COLOR_OPTIONS = "GBORY";
+
+    public static void main(String[] args) {
+        try (SocketChannel socketChannel = SocketChannel.open()) {
+            socketChannel.connect(new InetSocketAddress(SERVER_HOST, SERVER_PORT));
+            Random rand = new Random();
+            int attemptCount = 0;
+
+            while (true) {
+                String generatedGuess = createRandomGuess(rand);
+                sendToServer(socketChannel, generatedGuess);
+                System.out.println("[BOT] Sending: " + generatedGuess);
+
+                String serverResponse = receiveFromServer(socketChannel);
+                System.out.println("[SERVER] " + serverResponse);
+
+                attemptCount++;
+
+                if (serverResponse.contains(" Félicitations")) {
+                    sendToServer(socketChannel, "Bot_" + attemptCount);
+                    System.out.println("[BOT] Score saved!");
+                    break;
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("[BOT] Error: " + e.getMessage());
+        }
+    }
+
+    private static String createRandomGuess(Random rand) {
+        StringBuilder guess = new StringBuilder();
+        for (int i = 0; i < 4; i++) {
+            guess.append(COLOR_OPTIONS.charAt(rand.nextInt(COLOR_OPTIONS.length())));
+        }
+        return guess.toString();
+    }
+
+    private static void sendToServer(SocketChannel channel, String message) throws IOException {
+        ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());
+        channel.write(buffer);
+    }
+
+    private static String receiveFromServer(SocketChannel channel) throws IOException {
+        ByteBuffer buffer = ByteBuffer.allocate(256);
+        int bytesRead = channel.read(buffer);
+        if (bytesRead == -1) {
+            return ""; // Return empty string if the connection is closed.
+        }
+        return new String(buffer.array(), 0, bytesRead).trim();
+    }
+}
diff --git a/src/src/main/java/MastermindServer.java b/src/src/main/java/MastermindServer.java
new file mode 100644
index 0000000..20c1100
--- /dev/null
+++ b/src/src/main/java/MastermindServer.java
@@ -0,0 +1,178 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.*;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class MastermindServer {
+    private static final int PORT = 1234;
+    private static final int BUFFER_SIZE = 256;
+    private static final Map<String, Integer> scoreBoard = new ConcurrentHashMap<>();
+    private static Selector selector;
+
+    public static void main(String[] args) {
+        try {
+            selector = Selector.open();
+            ServerSocketChannel serverChannel = ServerSocketChannel.open();
+            serverChannel.bind(new InetSocketAddress(PORT));
+            serverChannel.configureBlocking(false);
+            serverChannel.register(selector, SelectionKey.OP_ACCEPT);
+
+            System.out.println("[SERVER] Waiting for connections on port " + PORT + "...");
+
+            while (true) {
+                selector.select();
+                Iterator<SelectionKey> selectedKeys = selector.selectedKeys().iterator();
+
+                while (selectedKeys.hasNext()) {
+                    SelectionKey key = selectedKeys.next();
+                    selectedKeys.remove();
+                    if (!key.isValid()) continue;
+
+                    try {
+                        if (key.isAcceptable()) {
+                            acceptNewClient(serverChannel);
+                        } else if (key.isReadable()) {
+                            handleClientRequest(key);
+                        }
+                    } catch (IOException e) {
+                        key.cancel();
+                    }
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("[SERVER] Critical error: " + e.getMessage());
+        }
+    }
+
+    private static void acceptNewClient(ServerSocketChannel serverChannel) throws IOException {
+        SocketChannel clientChannel = serverChannel.accept();
+        clientChannel.configureBlocking(false);
+        SelectionKey key = clientChannel.register(selector, SelectionKey.OP_READ);
+        key.attach(new GameSession());
+        System.out.println("[SERVER] New client connected: " + clientChannel.getRemoteAddress());
+    }
+
+    private static void handleClientRequest(SelectionKey key) {
+        SocketChannel clientChannel = (SocketChannel) key.channel();
+        ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
+
+        try {
+            int bytesRead = clientChannel.read(buffer);
+            if (bytesRead == -1) {
+                disconnectClient(clientChannel);
+                return;
+            }
+
+            buffer.flip();
+            String input = new String(buffer.array(), 0, bytesRead).trim();
+            System.out.println("[SERVER] Received: " + input);
+
+            GameSession session = (GameSession) key.attachment();
+            if (input.equals("/SCORE")) {
+                sendToClient(clientChannel, getFormattedScoreBoard());
+                return;
+            }
+
+            String response = session.processGuess(input);
+            sendToClient(clientChannel, response);
+
+            if (response.contains("Congratulations")) {
+                sendToClient(clientChannel, "Enter your name to save the score:");
+                buffer.clear();
+                bytesRead = clientChannel.read(buffer);
+                if (bytesRead > 0) {
+                    buffer.flip();
+                    String playerName = new String(buffer.array(), 0, bytesRead).trim();
+                    if (!playerName.isEmpty()) {
+                        scoreBoard.put(playerName, session.getAttempts());
+                    }
+                }
+            }
+        } catch (IOException e) {
+            disconnectClient(clientChannel);
+        }
+    }
+
+    private static void sendToClient(SocketChannel clientChannel, String message) {
+        try {
+            ByteBuffer buffer = ByteBuffer.wrap((message + "\n").getBytes());
+            clientChannel.write(buffer);
+        } catch (IOException e) {
+            disconnectClient(clientChannel);
+        }
+    }
+
+    private static void disconnectClient(SocketChannel clientChannel) {
+        try {
+            System.out.println("[SERVER] Client disconnected: " + clientChannel.getRemoteAddress());
+            clientChannel.close();
+        } catch (IOException e) {
+            System.err.println("[SERVER] Disconnection error: " + e.getMessage());
+        }
+    }
+
+    private static String getFormattedScoreBoard() {
+        StringBuilder sb = new StringBuilder("Best Scores:\n");
+        scoreBoard.entrySet().stream()
+                .sorted(Map.Entry.comparingByValue())
+                .forEach(entry -> sb.append(entry.getKey()).append(" : ").append(entry.getValue()).append(" attempts\n"));
+        return sb.toString();
+    }
+
+    private static class GameSession {
+        private final String secretCode;
+        private int attempts;
+
+        public GameSession() {
+            this.secretCode = generateSecretCode();
+            this.attempts = 0;
+            System.out.println("[SERVER] Secret code generated: " + secretCode);
+        }
+
+        public String processGuess(String guess) {
+            attempts++;
+            int correctPosition = 0;
+            int correctColor = 0;
+
+            Map<Character, Integer> secretMap = new HashMap<>();
+            for (char c : secretCode.toCharArray()) secretMap.put(c, secretMap.getOrDefault(c, 0) + 1);
+
+            for (int i = 0; i < guess.length(); i++) {
+                char g = guess.charAt(i);
+                if (g == secretCode.charAt(i)) {
+                    correctPosition++;
+                    secretMap.put(g, secretMap.get(g) - 1);
+                }
+            }
+
+            for (int i = 0; i < guess.length(); i++) {
+                char g = guess.charAt(i);
+                if (g != secretCode.charAt(i) && secretMap.getOrDefault(g, 0) > 0) {
+                    correctColor++;
+                    secretMap.put(g, secretMap.get(g) - 1);
+                }
+            }
+
+            if (correctPosition == 4) {
+                return "Congratulations! You've guessed the code in " + attempts + " attempts.";
+            }
+            return correctPosition + " correct position(s), " + correctColor + " correct color(s) (Attempt " + attempts + ")";
+        }
+
+        public int getAttempts() {
+            return attempts;
+        }
+
+        private String generateSecretCode() {
+            String colors = "BGORWY";
+            Random random = new Random();
+            StringBuilder code = new StringBuilder();
+            for (int i = 0; i < 4; i++) {
+                code.append(colors.charAt(random.nextInt(colors.length())));
+            }
+            return code.toString();
+        }
+    }
+}
diff --git a/src/src/main/java/ServerNIO.java b/src/src/main/java/ServerNIO.java
new file mode 100644
index 0000000..05f2c44
--- /dev/null
+++ b/src/src/main/java/ServerNIO.java
@@ -0,0 +1,277 @@
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.*;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class ServerNIO {
+    private static final int PORT = 12345;
+    private static final int BUFFER_SIZE = 256;
+    private static final Map<SocketChannel, GameSession> clientSessions = new ConcurrentHashMap<>();
+    private static final List<PlayerScore> highScores = new ArrayList<>();
+    private static Selector selector;
+
+    public static void main(String[] args) {
+        try {
+            selector = Selector.open();
+            ServerSocketChannel serverChannel = ServerSocketChannel.open();
+            serverChannel.bind(new InetSocketAddress(PORT));
+            serverChannel.configureBlocking(false);
+            serverChannel.register(selector, SelectionKey.OP_ACCEPT);
+
+            System.out.println("[SERVEUR] En attente de connexions sur le port " + PORT + "...");
+
+            while (true) {
+                int readyChannels = selector.select(100); // Timeout pour éviter les blocages
+
+                if (readyChannels == 0) continue;
+
+                Iterator<SelectionKey> keyIterator = selector.selectedKeys().iterator();
+
+                while (keyIterator.hasNext()) {
+                    SelectionKey key = keyIterator.next();
+                    keyIterator.remove();
+
+                    try {
+                        if (key.isAcceptable()) {
+                            acceptClient(serverChannel);
+                        } else if (key.isReadable()) {
+                            readClientData(key);
+                        }
+                    } catch (IOException e) {
+                        key.cancel(); // Retirer la clé en cas d'erreur
+                    }
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("[SERVEUR] Erreur critique : " + e.getMessage());
+        }
+    }
+
+    private static void acceptClient(ServerSocketChannel serverChannel) throws IOException {
+        SocketChannel clientChannel = serverChannel.accept();
+        clientChannel.configureBlocking(false);
+        SelectionKey key = clientChannel.register(selector, SelectionKey.OP_READ);
+        clientSessions.put(clientChannel, new GameSession());
+        key.attach(new ClientData()); // Attacher un objet ClientData pour suivre les informations du client
+
+        System.out.println("[SERVEUR] Nouveau client connecté : " + clientChannel.getRemoteAddress());
+
+        // Envoi du message initial demandant une combinaison
+        sendMessage(clientChannel, "Entrez une combinaison (4 lettres parmi B,G,O,R,W,Y) : ");
+    }
+
+    private static void readClientData(SelectionKey key) {
+        SocketChannel clientChannel = (SocketChannel) key.channel();
+        ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
+
+        try {
+            int bytesRead = clientChannel.read(buffer);
+            if (bytesRead == -1) {
+                disconnectClient(clientChannel);
+                return;
+            }
+
+            buffer.flip();
+            String input = new String(buffer.array(), 0, bytesRead).trim();
+            System.out.println("[SERVEUR] Réception : " + input);
+
+            GameSession session = clientSessions.get(clientChannel);
+            ClientData clientData = (ClientData) key.attachment(); // Récupérer les données attachées
+
+            if (session != null) {
+                if (session.isGameFinished()) {
+                    // Si le jeu est terminé, demander le nom du joueur
+                    if (clientData.getPlayerName() == null) {
+                        clientData.setPlayerName(input); // Nom du joueur reçu
+                        int score = clientData.getAttempts();
+                        PlayerScore playerScore = new PlayerScore(clientData.getPlayerName(), score);
+                        session.setPlayerScore(playerScore);
+                        highScores.add(playerScore);
+                        highScores.sort(Comparator.comparingInt(PlayerScore::getScore)); // Trier par score
+
+                        sendMessage(clientChannel, "Votre nom a été enregistré avec un score de " + score + " tentatives.\n");
+                        sendMessage(clientChannel, "Tapez /SCORE pour voir le tableau des meilleurs scores.");
+                        key.interestOps(SelectionKey.OP_READ); // Revenir en mode lecture pour recevoir /SCORE ou d'autres commandes
+                    } else {
+                        handleClientRequest(clientChannel, input); // Appeler la méthode pour gérer les commandes comme /SCORE
+                    }
+                } else {
+                    // Si le jeu n'est pas encore terminé, traiter la tentative de combinaison
+                    String response = session.processGuess(input);
+                    clientData.incrementAttempts();
+                    sendMessage(clientChannel, response);
+
+                    if (response.contains("Félicitations")) {
+                        sendMessage(clientChannel, "Félicitations ! Entrez votre nom : ");
+                        key.interestOps(SelectionKey.OP_WRITE); // Passer en mode écriture pour obtenir le nom
+                    } else {
+                        sendMessage(clientChannel, "Entrez une nouvelle combinaison : ");
+                        key.interestOps(SelectionKey.OP_READ); // Revenir en mode lecture pour recevoir la nouvelle tentative
+                    }
+                }
+            }
+        } catch (IOException e) {
+            disconnectClient(clientChannel);
+        }
+    }
+
+    private static void handleClientRequest(SocketChannel clientChannel, String input) {
+        // Si le client envoie "/SCORE"
+        if ("/SCORE".equals(input)) {
+            // Afficher les meilleurs scores
+            StringBuilder scoreList = new StringBuilder("Meilleurs scores :\n");
+
+            // Trie les scores par ordre décroissant si ce n'est pas déjà fait
+            highScores.sort((ps1, ps2) -> Integer.compare(ps2.getScore(), ps1.getScore()));
+
+            // Construire la liste des meilleurs scores
+            for (PlayerScore ps : highScores) {
+                scoreList.append(ps).append("\n");
+            }
+
+            // Envoyer la liste des meilleurs scores au client
+            sendMessage(clientChannel, scoreList.toString());
+        }
+    }
+
+
+
+    private static int countCorrectPositions(String secretCode, String guess) {
+        int count = 0;
+        for (int i = 0; i < secretCode.length(); i++) {
+            if (secretCode.charAt(i) == guess.charAt(i)) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    private static int countIncorrectPositions(String secretCode, String guess) {
+        int count = 0;
+        for (int i = 0; i < secretCode.length(); i++) {
+            if (secretCode.indexOf(guess.charAt(i)) != -1 && secretCode.charAt(i) != guess.charAt(i)) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+
+    private static void sendMessage(SocketChannel clientChannel, String message) {
+        try {
+            ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());
+            clientChannel.write(buffer);
+        } catch (IOException e) {
+            disconnectClient(clientChannel);
+        }
+    }
+
+    private static void disconnectClient(SocketChannel clientChannel) {
+        try {
+            System.out.println("[SERVEUR] Client déconnecté : " + clientChannel.getRemoteAddress());
+            GameSession session = clientSessions.remove(clientChannel);
+            if (session != null && session.isGameFinished()) {
+                PlayerScore score = session.getPlayerScore();
+                if (score != null) {  // Vérifier si le score est bien défini
+                    highScores.add(score);
+                    highScores.sort(Comparator.comparingInt(PlayerScore::getScore)); // Trier par score
+                }
+            }
+            clientChannel.close();
+        } catch (IOException e) {
+            System.err.println("[SERVEUR] Erreur de fermeture : " + e.getMessage());
+        }
+    }
+
+
+    private static class GameSession {
+        private final String secretCode;
+        private boolean gameFinished = false;
+        private PlayerScore playerScore;
+
+        public GameSession() {
+            this.secretCode = generateSecretCode();
+            System.out.println("[SERVEUR] Code secret généré : " + secretCode);
+        }
+
+        public String processGuess(String guess) {
+            if (guess.equals(secretCode)) {
+                gameFinished = true;
+                return "Félicitations ! Vous avez trouvé la combinaison correcte.";
+            }
+            return "Mauvaise combinaison, réessayez.";
+        }
+
+        private String generateSecretCode() {
+            String colors = "BGORWY";
+            Random random = new Random();
+            StringBuilder code = new StringBuilder();
+            for (int i = 0; i < 4; i++) {
+                code.append(colors.charAt(random.nextInt(colors.length())));
+            }
+            return code.toString();
+        }
+
+        public boolean isGameFinished() {
+            return gameFinished;
+        }
+
+        public PlayerScore getPlayerScore() {
+            return playerScore;
+        }
+
+        public void setPlayerScore(PlayerScore playerScore) {
+            this.playerScore = playerScore;
+        }
+
+        public String getSecretCode() {
+            return secretCode;
+        }
+    }
+
+    private static class ClientData {
+        private int attempts = 0;
+        private String playerName;
+
+        public void incrementAttempts() {
+            attempts++;
+        }
+
+        public int getAttempts() {
+            return attempts;
+        }
+
+        public void setPlayerName(String name) {
+            this.playerName = name;
+        }
+
+        public String getPlayerName() {
+            return playerName;
+        }
+    }
+
+    private static class PlayerScore {
+        private final String name;
+        private final int score;
+
+        public PlayerScore(String name, int score) {
+            this.name = name;
+            this.score = score;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public int getScore() {
+            return score;
+        }
+
+        @Override
+        public String toString() {
+            return name + ": " + score + " tentatives";
+        }
+    }
+}
diff --git a/src/src/main/java/Stress1.java b/src/src/main/java/Stress1.java
new file mode 100644
index 0000000..ba37970
--- /dev/null
+++ b/src/src/main/java/Stress1.java
@@ -0,0 +1,86 @@
+import java.io.*;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+
+public class Stress1 {
+    private static final String SERVER_ADDRESS = "localhost";
+    private static final int SERVER_PORT = 12345;
+    private static final int MAX_CLIENTS = 1000;
+
+    public static void main(String[] args) {
+        String filePath = "mesures.csv";
+        File file = new File(filePath);
+        boolean isNewFile = !file.exists();
+
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
+            if (isNewFile) {
+                writer.write("Nombre_de_clients;Temps_moyen_ns;Min_Temps_ns;Max_Temps_ns;Ecart_Type_ns\n");
+            }
+
+            for (int n : new int[]{1, 2, 10, 100, 1000, 5000, 50000}) {
+                ExecutorService executor = Executors.newCachedThreadPool();
+                CountDownLatch latch = new CountDownLatch(n);
+                AtomicLong totalResponseTime = new AtomicLong();
+                List<Long> responseTimes = new CopyOnWriteArrayList<>();
+
+                for (int i = 0; i < n; i++) {
+                    executor.submit(() -> {
+                        long startTime = System.nanoTime();
+                        try (SocketChannel clientChannel = SocketChannel.open()) {
+                            clientChannel.connect(new InetSocketAddress(SERVER_ADDRESS, SERVER_PORT));
+                            sendMessage(clientChannel, "BGOR");
+                            String response = receiveMessage(clientChannel);
+                            long responseTime = System.nanoTime() - startTime;
+                            totalResponseTime.addAndGet(responseTime);
+                            responseTimes.add(responseTime);
+                        } catch (IOException e) {
+                            System.err.println("Erreur lors de la connexion client : " + e.getMessage());
+                        } finally {
+                            latch.countDown();
+                        }
+                    });
+                }
+
+                latch.await();
+                executor.shutdown();
+
+                // Calculs statistiques
+                long averageResponseTime = totalResponseTime.get() / n;
+                long minResponseTime = responseTimes.stream().min(Long::compare).orElse(0L);
+                long maxResponseTime = responseTimes.stream().max(Long::compare).orElse(0L);
+
+                // Calcul de la variance et écart-type
+                double mean = totalResponseTime.get() / (double) n;
+                double sumSquaredDifferences = 0.0;
+                for (long responseTime : responseTimes) {
+                    sumSquaredDifferences += Math.pow(responseTime - mean, 2);
+                }
+                double variance = sumSquaredDifferences / n;
+                double ecartType = Math.sqrt(variance);
+
+                writer.write(n + ";" + averageResponseTime + ";" + minResponseTime + ";" + maxResponseTime + ";" + ecartType + "\n");
+                System.out.println("Clients: " + n + " | Moyenne: " + averageResponseTime + " ns | Min: " + minResponseTime + " ns | Max: " + maxResponseTime + " ns | Écart-type: " + ecartType + " ns");
+            }
+
+            System.out.println("Tests terminés. Résultats sauvegardés dans " + filePath);
+        } catch (IOException | InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static void sendMessage(SocketChannel channel, String message) throws IOException {
+        ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());
+        channel.write(buffer);
+    }
+
+    private static String receiveMessage(SocketChannel channel) throws IOException {
+        ByteBuffer buffer = ByteBuffer.allocate(256);
+        channel.read(buffer);
+        return new String(buffer.array()).trim();
+    }
+}
-- 
GitLab