From ef7515bc0ca34c38c70f05e7fb9b418e980e2ac7 Mon Sep 17 00:00:00 2001 From: "Elise.B" Date: Sat, 13 Feb 2021 10:22:15 +0100 Subject: [PATCH] clean + comments --- chatGitElise/bin/controller/Agent.class | Bin 11511 -> 11511 bytes chatGitElise/bin/controller/DataBase.class | Bin 8624 -> 8624 bytes chatGitElise/bin/gui/FenetreChat$1.class | Bin 874 -> 874 bytes chatGitElise/bin/gui/FenetreChat$2.class | Bin 922 -> 922 bytes chatGitElise/bin/gui/FenetreChat$3.class | Bin 3534 -> 3534 bytes chatGitElise/bin/gui/FenetreChat.class | Bin 9547 -> 9397 bytes chatGitElise/bin/gui/FenetreConnexion$1.class | Bin 917 -> 917 bytes chatGitElise/bin/gui/FenetreConnexion$2.class | Bin 551 -> 551 bytes chatGitElise/bin/gui/FenetreConnexion.class | Bin 6983 -> 6983 bytes .../bin/gui/FenetreInscription$1.class | Bin 929 -> 929 bytes .../bin/gui/FenetreInscription$2.class | Bin 815 -> 815 bytes .../bin/gui/FenetreInscription$3.class | Bin 815 -> 815 bytes .../bin/gui/FenetreInscription$4.class | Bin 559 -> 559 bytes chatGitElise/bin/gui/FenetreInscription.class | Bin 6815 -> 6815 bytes chatGitElise/bin/gui/FenetreMenu$1.class | Bin 1133 -> 1133 bytes chatGitElise/bin/gui/FenetreMenu$2.class | Bin 905 -> 905 bytes chatGitElise/bin/gui/FenetreMenu$3.class | Bin 1857 -> 1857 bytes chatGitElise/bin/gui/FenetreMenu$4.class | Bin 870 -> 870 bytes chatGitElise/bin/gui/FenetreMenu$5.class | Bin 1281 -> 1281 bytes chatGitElise/bin/gui/FenetreMenu.class | Bin 7457 -> 7457 bytes chatGitElise/bin/gui/FenetreModifPseudo.class | Bin 3452 -> 3452 bytes chatGitElise/bin/model/Contact.class | Bin 1731 -> 1731 bytes chatGitElise/bin/model/ListeContacts.class | Bin 3702 -> 3420 bytes chatGitElise/bin/model/Message.class | Bin 1528 -> 1592 bytes chatGitElise/bin/model/MessageChat.class | Bin 1664 -> 1728 bytes chatGitElise/bin/model/MessagePseudo.class | Bin 1273 -> 1337 bytes chatGitElise/bin/network/TCPChat.class | Bin 4176 -> 4176 bytes chatGitElise/bin/network/TCPServer.class | Bin 2404 -> 2404 bytes chatGitElise/bin/network/Tools.class | Bin 2645 -> 2645 bytes chatGitElise/bin/network/UDPInput.class | Bin 3337 -> 2957 bytes chatGitElise/bin/network/UDPOutput.class | Bin 2281 -> 1822 bytes chatGitElise/config.json | 6 +- chatGitElise/src/config/Configuration.java | 4 +- chatGitElise/src/controller/Agent.java | 130 +++++++------ chatGitElise/src/controller/DataBase.java | 10 +- chatGitElise/src/gui/FenetreChat.java | 45 +++-- chatGitElise/src/gui/FenetreConnexion.java | 175 +++++++++++------- chatGitElise/src/gui/FenetreInscription.java | 63 +++++-- chatGitElise/src/gui/FenetreMenu.java | 26 ++- chatGitElise/src/gui/FenetreModifPseudo.java | 31 +++- chatGitElise/src/model/Contact.java | 1 - chatGitElise/src/model/ListeContacts.java | 12 +- chatGitElise/src/model/Message.java | 2 + chatGitElise/src/model/MessageChat.java | 2 + chatGitElise/src/model/MessagePseudo.java | 2 + chatGitElise/src/network/TCPChat.java | 11 +- chatGitElise/src/network/TCPServer.java | 4 +- chatGitElise/src/network/Tools.java | 5 +- chatGitElise/src/network/UDPInput.java | 8 +- chatGitElise/src/network/UDPOutput.java | 30 +-- 50 files changed, 322 insertions(+), 245 deletions(-) diff --git a/chatGitElise/bin/controller/Agent.class b/chatGitElise/bin/controller/Agent.class index e9d7a0dd0136169bf08504219e7cf27bda8ac603..cdc56c5cf4dd2cfc01a354b001cf38403272fe8f 100644 GIT binary patch delta 761 zcmXYtYfQ~?7{@kq&YaQo7MvqKlRiDjLgu$cBt4{FuAU3?a-J zbKAtU#b#r?!a`m!Bw>1C%=5zk_vZgR&-e3OzPg8Q^_?{ZmswUjmD_iw~HuGn6u-8)^@r=(rcZY^N zlC+l!yi%Y;fp-dYD)3%`P6a-&Ooc1?qBnKv{$DvvHxK#73$@@a-}$6FcJWiq_+^}- z-F|=RryCCx4~B{-{$e3m`kI8W$3fyvfD9&4e96*da>buw37}j8sgPkNB)r)gq_7ol z3CC9=uu3G6Vk2Gb6o`W&i8fu~C;Z~@kO>TvcvUzF(f=r!Y?>l&Sf|lflIbt043P{1 zB~ukyTAhtk=HQYXvnFzj#<6pNIZ9$SiOxBHtc xdxWJ@GgX=iF#GIIsaBPr>9EI`28X{1aYV}+ljE2o8%(3aW!bFSTJy{i_74sYhKikZtZ^ZRY@-skdpp6~bV^mqC%bcyk$(iIOO3?`a1 z+zcUuq0D3$1$Zf8Br6!jTGH91m7R=cKR#;6 zGl?=LvzjSvAdhWKrHW}BAz$(7oMT2{M{K3|XKBLEZ00gg_ZI89nE8qpE4q;NEMl{2 z*~${CDOJ3TT9$I25APHu}241 z=^&$x`*d`*Ru1Uxpqe_waXn9SluI1rGAFprDOxo1lC!kx!jII^Mm=8%2wc<^m&8hg z^rv11shA2-F+D+2S*O$WlhiY4{6dB zkN8Y;Ai;4@avm%2M1iLYJX4@Wf#(XeDDaYHyjIJtY~hXidaEAZaf|mf^MO~Y^OOE< zI;?{><4yQtZKu1c4&@ttG-u;G@%%6uiTC69O%#8~R6}_p%#55;q;I9~r0=C4qwo^IL`0e|RvA-ZqBdraZw~n3kl(43f3X*G<}QE$ delta 223 zcmWO0OG^TA7{%eASDb|zGE;_$Xg3C2*haz@Ep+7Lwu@<^E{u4qx^+0>kk`y%}+-Inf1ccqPVPr5JtCjBn`A)Pbzy-8+B vh>;eb?D9p5F#use$zmhubc( diff --git a/chatGitElise/bin/gui/FenetreChat$1.class b/chatGitElise/bin/gui/FenetreChat$1.class index a4a8b67681e382bda3721b65209344f0b040c139..484bf98e64805c96c56edf605e7d544b019e06b6 100644 GIT binary patch delta 31 ncmaFG_KI!84kpIP$vc_cc%vCu7-ASW7-AXt7~&`MFvkG^n~(?7 delta 31 ncmaFG_KI!84kpH^$vc_ccw-n?7-AVX7*ZJc7}6&5FvkG^oF@n5 diff --git a/chatGitElise/bin/gui/FenetreChat$2.class b/chatGitElise/bin/gui/FenetreChat$2.class index a6540b50ce483252aa9f1b5d7c6d6752b7024a84..ee3582816610fd36fdec89df6cabac9720301b62 100644 GIT binary patch delta 43 ycmbQmK8t-r2@~Ul$)!xLoRb(h874FEGEAL(n8}-Q_GEr$C&q<9Qg(7avo-(`#|zv5 delta 43 ycmbQmK8t-r2@~Ut$)!xLoU<4>8D=x^GR&QPn8}-Q@nn8xC&raPQg(7avo-(~_Y4dG diff --git a/chatGitElise/bin/gui/FenetreChat$3.class b/chatGitElise/bin/gui/FenetreChat$3.class index 3701abf9c3d30b07e74fa7317e0e57950bffb8c2..6f41c0a59dcde3ebc8b2765b66c12917569fad0e 100644 GIT binary patch delta 126 zcmV-^0D=F`8_pZB!wLbkv&0H=0b#iS2LQYP8vwlkEC9g(F95;-NdUtDQvk#OR{+8Q zVF1VgX#mRrbO6i%e*nz@iU806kO0#Fxd7Av&j8f`-~iYF?*Q8X`~cnn{{Y|t3jpB( g7y#n|9RTD3B>?3CDgft`mkjC!=>P=)>XU{INKbYuO#lD@ delta 126 zcmV-^0D=F`8_pZB!wLbsv&0H=0b#!Y2LQqV8vw)rEC9yy g7y#S>9RS?{B>>(5DgfYuG=K^+M!aJ2fBFU zs3+d(@F%Wb1l8x|WOTb@NoBSdiqxj(;gZi_3K+_G!b~KSyu{(iTCJI5MKkSat{u&1 z9OYKDfH(^+TWQ%UR(D3KHvhiT;xNpvyR(* z#2>6rEXmyCG&PV$BOx}K@@BHxYEs)NWCxRtbOyVa$8Hnc!xBDa70o8O*Vbno;d9RN z1?Sjr^etTF05>?uFC3zWF9oggb6Dvd(`ZhpfRl=IN;CORb7)sJr?sM#Gg{4At*1jf z=u|Taweo|$;=bDHRu>O+g@?MvBi-b&?(jr+d8%%D)Wau#WYP*8EZyqUcR4U ztVjRi4rFi8$QE->3Na&?VirL&$kQx}R7za4snVOQQW@_VuG4%PRn9gou-Piipp_ia zqJdsZ@fkzg>t5#?)Km4CM3K4X5|>RPZa&H&Vt%Y*1Xm2XY{S(v{cR|2*URwtlI3S= z@FiidEVsnbKiOAXI}ADlg9L0x@8Hw2|6P3P g{hAv~ulX;N($9zE$Z@=AEIKsBqCwW@H!4;AE8dR8SO5S3 delta 1093 zcmZvaTWpkN5Qd-kZ+Ev{mQq}MvQ4+N6ods90jbcYvC5&X)HXB%qA^)vL$`Eyfh`Dv zEf^u7V#HsJ2P9Dwxu_A_$|h9fg%@6Mh>;8Q#tR}52#11-C?Iu;iSfe!;+yyTX5M+{ zpP3^~$D94f?hJhe)Hvh&{pSjMb9Gt6K3x&{ozYFvNLMtuCepqo-5pB=bXC_xR%&Cn zC|GjW9ZyBtHpG+N?cEz<(L`;Ieig;dv5NG@c)DVBG-*d{RVtZ`ZH}jseqGlMpMDp? z{~-tT2aD>2Z{29ZuB4w{-3;g!A>mool}g9_OjX8DLU#fhVYl#Zh$T{+?0v4IfaADT zMe99|Kj4gU-zggQ+)p+Q?%v{9K^PCy$YnZXnL!aVDJ4AUD|uGY1r}6qu7&1W%w!q~ z)5L5ZqmC9H<#C>(l}_4NXZU&Ad66gB!*UL=f{$3qVLBKh&eyEv8xkBN$@dn0hV`5$ zJ$UTC9;bIRc}6Z|t0`}zf*zCFPJ|uIv4pj}!~%BG%q|ny&C@2($;;+>g*SPXPua^+ zUbpo7_?9>L0hhDpxxs$HTk`R?3iw15IIJ+AX*T_;V?d8EsHJ?a74;m^Gi0=uquRod zcJPH><4YanoccJgAui}77j>FT`jN}}i7UFmu!gy+J6v-;<@4OauW~lZB9DKIB2g4bi zd9o#=pZn~FH3qci)bS3p!D&HV$mrs`cn|U1fG!2~OGdxBA5=E>{&@)hd{2odquT>4 z&CpSjozY**N3p{{xF3?Q&4b3)A1HRjo`FJQWLWSE`RpU55_iR=5qQ<)#j)mkpIfN{2h2gN-(a$$PTgJ)l xH|X5`8NXSy1g~2DLkzgB6RQi_{(Z@E#*Q+aJZGG{XJTkNRqf>oG8IlLH?8xM1?{t z6;h?;YAw}bqE5FB)YC{CP4v;s7%eQ&YISwHkoGog^}aKm80f~G9=zzqPlJKp# zhSYJGRCUZ?T+x%{scR|IYCogkSz4K=i$!fNF~~AzR`g|+4c6FVojoiZvB@dhJhQ_G zyL_|HZw!ax!jZUhDt??v0Ou0Qr9^Qh@mxz9H8OvoZh5h6++t56Ob z@;Ffb0nSbi4xD6~`qj)dzxie!EsvJd6r(K;U*ZWMfp8LuAc+)`NmVUUEyhAEX|$1n zolKl$vqBD=I|dWHx3$RzC(F2LH*C%pL$kR0Smf delta 23 ecmZ3;zL0$bD>I|lWHx3$Rv!i)2H(k%%pL$k8U-H! diff --git a/chatGitElise/bin/gui/FenetreInscription$2.class b/chatGitElise/bin/gui/FenetreInscription$2.class index ab022816d2e861b5877643c7de146a6f87ccff68..ff765557127fec583ed750df2806329790823a5b 100644 GIT binary patch delta 27 icmZ3_ww`T6787IM9xsZgG>s(C zL<-F!+(I5MifN@x#2s`B>%vVp9zj37Owz{!1FSJ9RzvJF%o!tu80CpE!ioSF@xiLZgqkQ&RD!-^2lSTW6fe+PY Gvi}4AE?=Jj delta 377 zcmWlVO(?^07{@>V+FDy27j_UAH<8S1p&>(gYssX^%YQD$MJ!_T8fAI;bJ8rryg2%W}qVrBiY1bC50SP$rY6+Djz!q zR8okOBHWbFgAG4rEK^R93f821Ko$4Y@<<&oH1LjtFB(Gf#yiJIjpEI;%Ft2 zHqvM(lMaD&Qi>`A+%ljGmjFEU<7EJ!+!GA4z!0kpv&D#@{G2mNlrf$d=T%;OFe$hx zewbEF%tX8icEvY~o`58p!^}L%G9;Zv$)$<+C2GWfJu3nZ(o2Xw$q`^(Ivb)krP^kX z9gf-MLaJN#xfA#^hm!DwHzI;P<&!h91ue2ah!K{5|0kvuCtVpYWwX~3`9{-OZ2BlB J9<*wU;}3l%TnzvK diff --git a/chatGitElise/bin/gui/FenetreMenu$1.class b/chatGitElise/bin/gui/FenetreMenu$1.class index 84666c38758acfb145653a609c818e875009f5c2..555eed60edb51cfb8e73f8e5274ae9bf1a412eb9 100644 GIT binary patch delta 43 ycmaFM@s?vlH8Z34hDZi+hG+&whSE8NM+XGJIz+W%xOH5lcJ(=|v1A delta 39 vcmZqVYUJ7=&cgV4vII-1=r;x~hVKlj3_ln&8GbStGW=pNW%x6B5lcJ(>aYws diff --git a/chatGitElise/bin/gui/FenetreMenu.class b/chatGitElise/bin/gui/FenetreMenu.class index c88cc10c7de69c6c24152adf7d0f47d348306840..b0dac43fccd4c1167c6d14a24a6d5b359d2c3e75 100644 GIT binary patch delta 362 zcmWN}ODF?y9KiAK?~f%VkFqI3DTPv!$zxt2%LTbn9x0SZR;IjGuFAm<3}JI%%_}ob zZVn{O$ScN9NZ~@cV3*JL_O%z-3%2^>B*$%vn-ohfq38)Gk4W-~r4TJeq+=k1;-Do# zOR1xbddg{|l0K>!q?!qgSgB!&MqD(pOEZVG;G>m0+VRuD8=a!)5e>Z(g-MbbkTlGa z6+9#X^;U~+J!TkTgb+pvV+;*LZbN)PS*GzY!#*|+n8nK+x6Bh@foB$Z$Idqn{#cd> zRz%0Dq~MfHT$00@l(H^HHl&?R=?>P+wv6MJDR#t$M;z>mlReqvSdKUqA7>K4E3cf( z2R`}IbEyt5UgFnLMa${3?$}W#CCw5Ky(es3tyD7r)kvgdY*>Nn*o4 D+WB6x delta 362 zcmWN~NhkyW6oBFXJxfxu6r%{G6iP{Ndo6*q~EU6pa!J}d^;z=4lq~k{>L1Ys`4zc7CM;<2f$)JEr z3aO%qdP?Y^lwQghp&Tm}%u>q=b!^eVA&od`!bLN8wDLxqD4pU>m-y2ok(echUP+*j z2%ySpG1vnK5C-vJ2rn#n)4yQ~b*p8ZO(xi9k^`nVWtwYdaQ}xd*m!52Zx;AvQG8hv z1IrS{io|1=BvvI0hZM6WjjT)izh*XNm@OG&TPE0%Id)}`;v;;jE@nXh@6F)8jLI{-z8Di9kGbG8B6id<^Q1!3n70hBIk3vD*B4J9> zD~nZ?v@SFl&}2@FJ#FrE^pEwO?O~#iT^1dTaWf$*%L!)kwIGK^g_XE#x@@GmWhA~P RuRD%hIC105gR5?^Z~vZUCGG$K delta 193 zcmWN}%PNEc96<434GY68S$qr4f+UGAG^Sj_q!}~RxRXn6Ll%>g1+lY`?7kP72k{6} z-eVU2yR$gwbdzq<>EzQ9Jx28zGi2Pb3DYK3OsPuko6$0-t>nqPH|6Xv|D7%xuq?3> z-Ktq@7NV(G*NE;=&9w~=>RxU7w3Yq#|J0g#Z7bL@XiqWjB?p$muR03%*shbHQy0!$ XId>QI=+aC4-re|c>&tzXD?I-L)afG$ diff --git a/chatGitElise/bin/model/Contact.class b/chatGitElise/bin/model/Contact.class index 11ac1471d2a61829ad33480f805a5e2de636277b..fd3bdb19b175ed9d4c8566524416719510d1f7af 100644 GIT binary patch delta 159 zcmX@idzg1a7PBZn0}F!y11EzZ10RDBg9w8#gCv8<43#tS@jw9CzrC?vKj-$Ou%C2fMVv8 o{{h9Ufnqj5u{2qG1~~=>1|9}RAgRhA&!7OL85vxFBol)x01-DD^8f$< delta 159 zcmX@idzg1a7PF`T0}F#711EzJ10RDhg9s2xGKfyDXO3c&n0$-bmQ{vW(yQclXYN_V_;z5VPFK3stocB3P75X!39V%F}MN%8BH4r diff --git a/chatGitElise/bin/model/ListeContacts.class b/chatGitElise/bin/model/ListeContacts.class index e9539f2214e0ee1b5f6200b5f2ecdf7b6a77a391..96f58c2df7f25725d465937cad8ba3f9b867d0b5 100644 GIT binary patch literal 3420 zcma)8TXR!o6kT7EHfeg=LTOW4q?C&#O$jMrxuuo@a;c;REl?>c9MVI3N_rBKlS;i` z@P2!8M)(1CoZ&%Hi^}LY`sR}_zB-)~hwP8jwq&eSZ@3q%ndnLdA`~8mq z_TghcJOb1)3?-bTZoc?1F9l31XX{pyciP?U3QY3IP%>p& zradg+4fmZF@Es-gAOu=8tbry_Kcw~>xYVkl0YPphOv@P0&tEaJXZ0&7hHp)zlX~jB zo;BsOS`5OA7C$;jM~#w#2%$yB?9xz&dgirf&745vjA4%!QFny<9)Md*I=mjcL4KG& zTvdMGl+3VM!xn6nMA$}Fx6@gH5JQ&mjJoUbMm&t|e)KZb>Rk_m+1V_9c%Mt(Y7eSgBvn$}D_h+Wv@$L569+_=KZo=)-EB};a$0wM(QF!ssS9yo2h9d8^CFD?-1W}uqTKFo{+MBvWmq*RYaA* zSqQyMNx6$I?Gb3KS>aLJEn z3$syKlZML@p+6(bOj%OMS2QH02)tyK{i3@VMQaJ*D(TMUGdw@9GKMg#!BnEj8uRG| z4ycr-dDS$s$^Znm*QjY#N%1}s5&_#_Nk9#`f{11FG8&HHsHDkCnubNZRyx06=y@)s z3~R=oRhBX;;V)=-P6^Y@9h=YCi3lY695)?nF8hMX?UdzU zGyCV|7nX-Fx-Xyn>M4LO>G1sAga8_$ai@t-{X8fCHQtA~a1YI2VeOZE^k5y|<#pME zHnjpi@q5F)c!X)>?wZIwv`6kE#M|q?L1*c9vjU>Q$3!h?R#D__-oXY1r4tWfqZ@CV z+5vobvGxm8Q0o4`+qjO|#)j(+}M#=tGq z`R;IMufXkH)rjp>Rv5kLLyQl255y12VVBD$=!>EQa zvkJye!iW*Z0N;22Ul?<^=CbhvF-uvDxD7k#Tf&Y`UqM*oQAb#8SxBDX? zmGC;G@c08u32&F5HmS51W)V5qZYc);%Eq>Nhn7%(QwXP|{H>M0H&jo-A)Xvz;fKlI z2wK^dQUlvuSRSt5pj?E4z#qi_piX%B_&i>4Q~t~_lD$DOR>og?G%D6x;Z7p%S2!xtawyN%Hyn*7 z3YPPGf2lCXawZt{EY|ba$R7S3!lWw5ndf1*ATLXJQx&wHD^>H{>{^c7c4?k(;cb@e zxcxh7u4N6|gOC0LfSscn literal 3702 zcma)9+jARd75}Xydu4f(I*RY6!8oZS$yVeN+?L2V&aI89?YKB~Na|8H(#F|DUa6~< z6LW8A%l+0;Xu{=@3^RRz7Mwx`hJiPpc;S^{hW~*l2J<`LuI|bVp0T|9ec$=c@BGg1 zoFo7BzrX(@fG6>D9U%<|w~BeIkXf?Jo^__^cxKKk>xgLRyJ2pdnS$wTW-eU4VdXpx zkxJQeH9WH9+XTn68jM1NxrTuyWn1y=Lgtj~nmckkkM*qCn~v#KTuZ}br!#XcH_y{3 zYCC1mbaJ#A2)3KR%8|KT!FFtKUPCyMTqn>o3@Qc<2MolqUqknt+V9~~zkyyD5{2zp zE0wLQmV42>THy8ZrDD!3tedVa?`koIFb?P#Ax|AbieVTBuy1sUb%1Dw4&LhG9Ba$ayle$d6O`yla)q*%&4;CG1RVnC{@ZvlRhJyvGc5 zp_{ap%2p*`6zb|~39yrmQqiSqv_%Re=S%C{Z7PAs6D^5OUJ)*zFeuBXB;}svnqHAw z8?542Vpyq=fpu7OX0QiwR#ZTjl3-q0Xr75##NQ#egklCRYuj^@Kb zBr%-D(>l&I)r7xi;2E4J57x^Sv%t&`G&1RzO*VN&(0N9#n_44b*Y5s4IIbEdTJ@$S z7`9N<;Z#ewIVJ-oL8zA`%z`5-bPbdxsbR9pjIcXewbmHLHt8-`N<6=%JPzZwfgL3R z*V-y>vyVu%+ShE$Reegs(GD@Sg_KQ_kO_Rzz?TG2Pq`{eN#0isdjyPAEYsHG2v!1s7>CrF)%g3Zj z@Db)N%wZcQb!?b?3dx}0YL9x3VN`|@pZ9ZhA3r&l_%_9J^3(eO+U5J`dmjgX&DRhH z_}R@vVlb#yz&DP#!0cHfpp4)U zJ{;V4MC|~P_i*r6%3mG9Kn+0;##N{S{X7E|@O=+3aXIw?j*Q($>V2f^2x4k~gx*Kh z4TJu9WH3WJTH~yLvY^_wyLm-~@Ar2B8n@0d~hcrrhW>O^V;$5WP!}kRQdP8`P@(%4R-P)AW_2*7&?j60oSR9a!&YJ>3vVLV9~ zPZ7q6{};yR@cDp^KadNN#X^v<6OntE9*I_2JR@bhfLHkxqV*w_)vyxY zkO+_8xRmhD>bym1FF}*9;knXsxc+rjhmt`4tMDImX(2lK2EG}%{4=i+_GY!^2L29pRjB zf1j!c=C_;|cIYq^}Ii5IYHW`CBKayF=T&+ z{8&v4DKAk_mjG|=)H&tS@A6%NOAYVfPVJJr>XKEyi-x*WQ^CyeGvs&dO(y$#gHpO{ a+32P|WT^dww!RlxkuNS9e#*5Fe)d0{0_jNr diff --git a/chatGitElise/bin/model/Message.class b/chatGitElise/bin/model/Message.class index 37ec7346fd01deace64ac2dd16143d74ec2a04a5..52f426ccba1b07b59a8ed669159e31c9c893dc2e 100644 GIT binary patch literal 1592 zcmZ{iZBNrs6vzK}>o(}hKpqBT!azm0f>aSCMl)j|#u|J`z`ZZy21`au+G3)g!;j$$ zOnge@?_ zyZE3SeLRy1x$y=|V56CxH`{C5cB>U@|ZO+g*kzIv(*`ez`OwiV{BbF zP>HQY1LK%r-;#lAv30}1BqjvL_gqiDK0iH_!9lFilC+Q^ebUN>lZuwN5b?F0HAADkot{ z3zCQ=C!HM(_Jkj~;?Vc~^PnrAyF5Hb(z|sY11yuAdHNSn#5_tEA$ydjCI=lF_ke7T zJD^t5U#+CRT1k6a%XDW7)AXI8-DkR6q;<*sfvUOMN6lR8qi!zrv0%<%>=2ZK~^$B*0MqBX%LfYUL69$da(j`v7Qt)sK~;XlpBC!@m*_>CXTF literal 1528 zcmZ{iU2hUW6o%h{1=?kyUx0;vQR@e6KUVRg7gmx+Q$s@4gogWtZt6A^8rYiX@9<}M zp^3!A3x9w=%6QJq+QK^QW@pZxd1vN1@67K%KYsx@L@kAwK;~+2?)98gZ!~f*yc7(9 z#Y^{t>-60Ih4Z#^>2-q?k^(uI^#@MN8~Sd~|KxUho`C6|pATtrYuFViG^MET1x|yS zV>R?#ARVe+d80rebv+mca)M|G%<-QZNCzLUy%0qpdF1!~pe|6W=-1U}8;wS_EnvK) z!c4@mY$1ykfq13bo`*o*LJD&n-Lo*SqM`*8Y0j-#uvD~RA%nEQLeuYiZ*HzS-tbJ- zyxbgg-Co-zAIO6+X$0^65v!*RrP?zWw@%2KS1VOLI7vs-(&CK5xxVb(vdX;d-DH(8 zN%8KV(^NfqZIb3TWmKe5=};CPL8u7Vq_MNfGvQ695@u^~GwgaNK3@haJi7zF2G}M$ z;vT5B0A^cIoB7V`7~b+snSM95EBvI!Y6T}(#I z7ncze8Zu(W1hL)6PDtob&odMDcjUfOpfHj$S(MvZN$ diff --git a/chatGitElise/bin/model/MessageChat.class b/chatGitElise/bin/model/MessageChat.class index dd19d3738d33a10b27d3d3bb135b169c891bd047..957a6f8ae0f75af278a5bdddfc58f915e9436dbe 100644 GIT binary patch literal 1728 zcmb7E?Q+vb6g}(MR!~GpoWv;<2U95cBcPIg(8e?^iAim6NU4L{{8Zv4i1F7*YoXE zSI%q4ZaJMJyRJO9b5s(DHytI38lLr)+p^2t;Ysp=+i}%~Ksgs4cBHbaTpl)?9x+Sj z?^dhT$vpW6Gi|Xx6H`c8n8kv?+K1xi8wQpHW`i<@R81^mSwns#FqO+UObA@D@G-8k zcwZ`Aj=(~cYBd_$5WDkBmWN_fEGdJ#|(xH;LE$@D`t zgStjwCEdaAELgb6x1h-mkXfXefh~dMvlGABcUw*AnRtXB3~Y1o&qi3NfSoX2>-T8) zg}|+GJ$4UX$wO5-M|~5UxHpX&iDb3?)WR-)WTj58Cp+YJXB;Pb|0Z!Ff+ao0KUpZC zsKNFuJV%l9p@t)1auql2Hrf>xbBkWYO!i%VSR=>0}tM`jAe)yz_SDRGSX!U-1lkC7hWa^Z6FEi!)u*ROF+A;hOMlBU0ZmPgf<)w= zFk0VSIKk?E>h3WoX+D<&D(Ub_M8(7fj^nok6ne5FU_0=E zMBz_tjG%OO@UxQTY6W&8f)V;-6J6e50?jH}D89wUNSlzzHCB@yBa$3ylEn9HfF|;A zSYd?~>YOVl*xV874yIM%(8VU7&* Q?_sD%MKk=FC^7u+71jOOWD;TC_-DnabKt#i`Z%rwWJAu4)lscx@9^w`V_v3CR&Un zK7bEp{O-)yR*HYvCNt-5-~FBMoc8Ch?>_+C!H$NIz;L-*lqGXZ*6Y@RTz_l18o~l+ z{+brh%Kip{SnkkzXPG6da$x3N$F3Zt1;Rzkl>$TlTEn$V<_2fD61{I%Z1i%|^x%wvJ`4z4|6ko?LBo*1fR{!KRmUJ=N^(S? zCy^}Z5EwHsjtM4Tm##`jU?jM#bu67M^l|5ufe4}kgE_k*Uo^^l(%G^0N<0zERrjq@ z!E$Uh4kp9yTf0uR++Qv$^XZsw`Of5>eSz`Q?Gfk?c5TSIOTt>!alHc~E6}S({zAX| zp(cak3K*(PJ5|4I0;7p!x5*k30%tvQT>0KL^LDvbk}Cbps#CVyUZm(u;sZbC)|Oc; z&SWwx3sp472`CFS9=+R-iTyJ{M^ifd#(_~UBq4@cWp9XD`G!%afAQQ8m&ZsQJ{ z>y3vbFxOp|?(17_dU>_Q(yD?h1~l{vh$1UMvcNM9Y~6{I9lzGFOGWAEc#Jg-t8Dy} zI}EI2gE_vlN)5UFMqs|vkL|rfx$mY=abL#+EcN0kL1t8(HSi42nWau>0K60$_9ZxMT#mB;9ks}zXV+`&dVYrFW)Kv5<}&+-{V zn9l(o9puk#2{V_`RzJi=mbG1bJCCa!b{Vj?*FkQXSbXln5*?zO$~LE_A2x&tKI@+68h3!p&m zw=&EyLv`o$F&^v^X7U>z9pOoAvxy8d&GFU5i<5-29fZ>@!dF;6jj*G7KH)qG7yd!0 MYM=;TlPQG!Zv*C70{{R3 diff --git a/chatGitElise/bin/model/MessagePseudo.class b/chatGitElise/bin/model/MessagePseudo.class index 30cc222b735de41707708fcdaaaec4cea87520db..2130b6dae237cdc36e5d844a724e7c995d502c38 100644 GIT binary patch literal 1337 zcmb7CO>fgc5Ph3E-!5s>x+N_Qv`|Rg(f}6@MU|>nNJa%A1;T}ko2-ISYFD;{#6RM| z0VFCU4*URq6yojL(4=(_M9S{Wc;?NUH~Z`NkDmY@<6#jwfrXP`AV;0&GK$=xd>P5{ zASl8Rn4S6{Fc-y>~yj zossJgJKZ?+{Nb)Z&Kt1a5ini9?@2#t%&I4z@5OrpZ(2#2FXN8GV}CFR$#FM3>Nw8j zE*YVAPrx|f#1+h7!9)#<0+0T;Rl8S)z>-@S=wZUf_;;GFYdgGki@3R**-5UXfl7CH^VBwkf>6DLd~Xb8495 zIZy8sYs$Qv_SW{AWmx&|sN0Rg87$i>o?+Q;l+Mujs_R#IF0l*L0*NtClx3c4sN)8s zZxbZ?O?t${P26H1Wv$c7X={UQ6yqjt(=xPmhnB)^YR(01Db{M1rtVfE&L-}rtUJ6F zZr=U|>kEw>6gf3MU}-XDl8}-SxQ7-aYUDj;D=Gzhi({UTR?*Q0iL7XZr6lX$I0a2k zHEzRBu_lQuefgc5Qg7PoH!p&ljf@pA!(sN9j77^7Y;?0DiD&TfRKX1g^Qc4f>G*3j)TNM z;=lnUA|wv{0Dcr=W^HKFxCdm(J3Biw`^-E0>-UeJ03PE+M?#=-IUCDq?}c0}oQZt3 zkjwE*hbBThTlYC$69oUrME zKN6_NcP@~RqMpe`AfV4@exMREY=zEz@Nq7qkqKlcGWe@^)$D8wMusqZLQjr0m7tER6|wi=lgs$W%po&I&I z3d+o*fL-ih4@I<4q7`@>R>D3Sw4<81g(ls@)@`y9%4!h}6SnEgKvUKMSzNcRn3=Mz zsC8vAcZTX5s_vM&M?0>Yvc948g^UD&fx_5XQ7}dr5WxuC#SwWp`HZ3&C2e)7&8yaO z%DYDh`>H}cjQZD3TEX$f_i#U|wGLALOhwm0nz0}caJ&W5B&Dx|9ME-#H-PX&8N`fL fq1u8n#IiM%mfXCRx*{Q<^jt^tH3D}vLfg}1wjTb3S20-aM8*x;aj(E z;iemiZb7<(uB1NXg?I71hj~1YKOdbi!xC9+R#{<X)a&x$_Uv68_VleOLF%X6(&t2VNS7mSXmigoeL4&{Wyl#5 z&UxiR-1N-8B;bmWYxz#!nmdWSwt0|0FO-qjuzFZLN#aNH?Zaq@pY(aD8;2CS(JtPE+B9r?v4@8xr3%mj+tvgQKC@_=G)jD=uzbNMw` UOMzl#V091qJsB$}YYV6X04R$tlK=n! diff --git a/chatGitElise/bin/network/TCPServer.class b/chatGitElise/bin/network/TCPServer.class index 0505bf338f53334e57bd265bd5dd42477923cbb6..e488035f7e68254912074dd082e321c0842cd4ad 100644 GIT binary patch delta 244 zcmX|*Jx;?w5QV?R*j^hWVFwJ@Ylr*+ajZy@Fj5M7C}<;b1WrH^iINM<1!yTE1w|1B z;t=#HQ*aEHhUQ6c-ZwLEn{1QiTcwfCG+&cdpO}X{c7Ey)$~B#;mTzxdwAkg)UOnQJl#*kHoX}V|B@^S%+>(&C zJo%04$ilxX258Rh-wQG>8CZTu#e|XF8cR#hlHL;7;mWFK3&BL@x=wrV|KrfcSl;DY TzVyAC%3d&%M;)shxed%OVT&Z9 delta 265 zcmX|*yG{a807TDqWnXTy3#_^i7Kot0DjHoMv9Q&`iiE_Hm~Al8gb*y~{ek-xnwVe+ zu`qswy(NX8;kB`unPMh$mfq5vO+~{X6qJX9$)J0mkGs8mG|5N3hugb+Y!eVWxK!ke zs0USt0=k8u?qFd4r7Z^wd;Tq+g$U+PTBi9Q1UI3p{iN?i3zBxapwIj%E;&!5^SpS(a1z1UyZA{iOIGi*ioGp4LV9w4%k(zeOWa7^4N04 op`4njUwZ>qI8tgWhZDtnDnHF@aW2=aj+e~-3%X*53wdcpzxGip&Hw-a diff --git a/chatGitElise/bin/network/Tools.class b/chatGitElise/bin/network/Tools.class index 51937ca9bba1be6874cb8a7db78cb2adc68798c2..818be3c0eb7e286c1a2b3a1bcd64f9b1b06688b6 100644 GIT binary patch delta 164 zcmWNJ%?bfw7=@pad@~JU%!--FzmO!7-{fy$qbL?`LD?$J#wC1f_n=(MEVvr)=G4=3 z&I#SneS69gOyofZLYo^(Dh(>A(2x$4W!0E;0RMlv4DV8W6aTjuP<9fi)UxUkV*>+uJ<<`u#K delta 164 zcmWN}%L)Nu7>Ds^B%f(S!<0iaIm=+-kPwO{S=cCwgbJ=gqaacgDPiG?cw{Nduh6B+k{WC39B6Q& z$(0s2(K|jN9iH?)ucT!R`jQ$-W`xO@91|H#X)_~W&Xxr`u_G(a61))Tule``o<$X3 diff --git a/chatGitElise/bin/network/UDPInput.class b/chatGitElise/bin/network/UDPInput.class index 2ef80d5b9f6b9af124d948cd0a81f760575cc57f..d1fdf1a8ddf0170ae3e766736ec2317ab4cac514 100644 GIT binary patch delta 529 zcmYL_+e=ho6vcm^XU;h@rz6;q*@VTBRGQ43u9j4m(ZhrgHV}eAIB8%AU96y}rpYc^ z+U@IVJr=_}^iat>^w5iM{XIQOr&DnfFC*_bkOxq7$&(0+G3{A(2=f*Eb7e=R|GnbaCOVuO~4B>xv z@=CxgV?GZJk=>Yzz78f`W9ICMRJC~x37T2WS~9fI&N^~rY*R37TJ1z|#6yA;_iWskHuHn5!zc95mCOJlwCvzI*kD9|U9 z{aoY#*EmR7ooNp7h{HT(E8ApsiqxO&WtCI)m{)fWBlD8*V;W>1@!lOwP=~(?5QH^#+*B%U*q> zugcF(#ptFM+cM*JN8GZL+swwz(e`FbXEJGn-Rw~mBwDsx3Qt+6PG>6n4EA%tIqa)U zYaCP*Z;5V=R<=r4Wh800v^R%SEv+%j_S2;pyWC17qRp0RTLYQYbTgi?Qn3!R+SKXf zh{13+>C|w{;5a7~fo3bYa*!f(m4%l5D_!NboiaF$qwuAp@wn98 zRx!e~l4g6V&5U>0$-#MQIB#&l4XnFU2pq8+UB64N-(|&wvbw)T>;FhAs#g_CcN?x7 z+;G$QlN~=##Lq3o$Q2D+#4{dEn2q*8b|CBLw!-+0wx)FM5YxygOy{#^J~cG2QduYH z&lVL@z-UHMLJQG>KqTEq zB)B6-eR)6Af?@fV=Gavb8!B?_6~b#e*9Q+h=WvNP$I%=ogJKN*g(Kd zE^0Gn_3#j!tXNS3#0U|`BteEG1uVO#)eW8m(S`5WC#@ZEB>5=H zED*A@dcI$h-2D-hsmLZQJ^CnK8ZeX#w;N&LN2A41vdG?Qc;N}Dzc*2+M&B(@R+!9{eVE1^oUAQZ1t=NP9ZGh^l?8gKD_ zzmmOMaoH{+sJLj==J1`%`@HY>oe!hG$IYLAzkCM{@qW$xlkVm@ z$Av8C1!JpD+o{wYzgAi5L`pU+F5(E%K}!jW3(2(?R2G|_ua;C(I*n?UOM)H$36;LA z9c_7aS2lA~tfR_N9&wsA%CO9O*}e}bu&Pn(=% z)#563LB1x{VxkpHmdcx-$2{L6AQTu*7)sw2?B9yJq3u?5CmWHgIhukgTPoXcHS92G zD%+Kj@_a{mfjAFCeaj1^P&A5Y{3I=W_x4E0;j$meDi?LdC z;c+z!$edMDkjx$1mJQIvE$!?0wvc2~$bJ!F)408HQRWD^M99-w@S5}q_?q@E~ z_3`>N3fJ^9-6txvbKF%j$t(Rz@R~QhU&fy4*~G(2c$uMx;H_q+ Gc=r#1`KK%Z diff --git a/chatGitElise/config.json b/chatGitElise/config.json index 63c82f4..0cf120b 100644 --- a/chatGitElise/config.json +++ b/chatGitElise/config.json @@ -5,8 +5,8 @@ "port": 8080 }, "config":{ - "interface": "wlan3", - "portSrc": 26001, - "portDest":26000 + "interface": "wlan4", + "portSrc": 26000, + "portDest":26001 } } \ No newline at end of file diff --git a/chatGitElise/src/config/Configuration.java b/chatGitElise/src/config/Configuration.java index e1276aa..1085287 100644 --- a/chatGitElise/src/config/Configuration.java +++ b/chatGitElise/src/config/Configuration.java @@ -7,8 +7,8 @@ public class Configuration { - private SConf sConf; - private Conf conf; + private SConf sConf; //Configuration du serveur + private Conf conf; //Configuration réseau public Configuration() { diff --git a/chatGitElise/src/controller/Agent.java b/chatGitElise/src/controller/Agent.java index 14f3e38..37a3d11 100644 --- a/chatGitElise/src/controller/Agent.java +++ b/chatGitElise/src/controller/Agent.java @@ -30,9 +30,7 @@ public class Agent implements PropertyChangeListener{ private Contact user; private UDPInput BIn; private UDPOutput BOut; - //private TCPChat TCPSend; private TCPServer server; - //private ListeContacts list; private InetAddress localAddress; private InetAddress broadcast; private ArrayList listTCPOk; @@ -43,15 +41,13 @@ public class Agent implements PropertyChangeListener{ private boolean open = true; - + //Création d'un agent lors de l'inscription (première connexion) public Agent(InetAddress address, int portIn, int portOut) throws IOException { this.user = new Contact("", address, portIn); this.BIn = new UDPInput(user.getAddress(), portIn); this.BOut = new UDPOutput(user, portOut); this.server = new TCPServer(user.getPort(), user.getAddress()); this.server.addPropertyChangeListener(this); - //this.TCPSend = new TCPChat(user); - //this.list = ListeContacts.getInstance(); this.localAddress=Tools.getAdress()[0]; this.broadcast= Tools.getAdress()[1]; this.db = DataBase.getInstance(); @@ -62,7 +58,7 @@ public class Agent implements PropertyChangeListener{ BIn.start(); } - //user ayant déjà fait une connexion + //Création d'un agent par un user ayant déjà fait une connexion public Agent(InetAddress address, int portIn, int portOut, String login) throws IOException { this.db = DataBase.getInstance(); this.user = new Contact(db.getPseudoFromLogin(login), address, portIn); @@ -70,8 +66,6 @@ public class Agent implements PropertyChangeListener{ this.BOut = new UDPOutput(user, portOut); this.server = new TCPServer(user.getPort(), user.getAddress()); this.server.addPropertyChangeListener(this); - //this.TCPSend = new TCPChat(user); - //this.list = ListeContacts.getInstance(); this.localAddress=Tools.getAdress()[0]; this.broadcast= Tools.getAdress()[1]; this.listTCPOk = new ArrayList(); @@ -85,7 +79,6 @@ public class Agent implements PropertyChangeListener{ public void propertyChange(PropertyChangeEvent evt) { switch (evt.getPropertyName()) { case "Msg UDP Recu" : - //System.out.println("envoi message"); Message msg = BIn.getMessage(); try { handleMessage(msg); @@ -94,7 +87,6 @@ public class Agent implements PropertyChangeListener{ } break; case "session chat demarree" : - //System.out.println("dans session demarree"); TCPChat tcpChat = this.server.getConnexionTCPChat(); tcpChat.addPropertyChangeListener(this); this.listTCPOk.add(tcpChat); @@ -105,10 +97,8 @@ public class Agent implements PropertyChangeListener{ SimpleAttributeSet left = new SimpleAttributeSet(); StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT); StyleConstants.setForeground(left, c.brighter()); - //System.out.println("dans property change"); TCPChat tcpChatCo = this.listTCPOk.get(0); MessageChat msgRecu = tcpChatCo.getMessageRecu(); - //FenetreChat.getTa().append("kevin"+ " : "+msgRecu.getMessage()+"\n"); if(FenetreChat.isOuvert()) { StyledDocument doc = FenetreChat.getDoc(); try { @@ -127,55 +117,56 @@ public class Agent implements PropertyChangeListener{ - /*type 0 : premier message de broadcast + /* type 0 : premier message de broadcast * type, 1 : deuxieme message de broadcast avec pseudo * type 2 : Message de déconnexion * type 3 : message pseudo changé - * type 4 : Message affichage - * type 5 : Message chat */ public void handleMessage(Message msg) throws IOException { switch(msg.getTypeMessage()) { + + //message broadcast sans pseudo pour signaler son arrivée + //action : répondre par un message avec notre pseudo case 0 : - //System.out.println("Envoi message présentation"); MessagePseudo msgPresentation = new MessagePseudo(this.localAddress, msg.getAddressSrc(), this.user.getPort(), msg.getPortSrc(), 1, this.user.getPseudo(), this.user.getId(), ""); BOut.send(msgPresentation, msg.getAddressSrc(), msg.getPortSrc()); break; + + //message broadcast avec pseudo + //action : on vérifie que le pseudo appartient à une personne active dans la liste du serveur et on l'ajoute dans la liste de la fenetre menu case 1 : MessagePseudo msgPseudo = (MessagePseudo) msg; boolean pseudoExist = Request.sendPseudo(msgPseudo.getPseudo(), "pseudoOK"); if(!pseudoExist) { Contact newUser = new Contact(msgPseudo.getPseudo(), msgPseudo.getAddressSrc(), msgPseudo.getPortSrc()); - //Request.sendUser(msgPseudo.getPseudo(), msgPseudo.getAddressSrc().toString(), Integer.toString(msgPseudo.getPortSrc()), "addUser"); - //list.addContact(newUser); if(FenetreMenu.ouvert) { FenetreMenu.getCb().addItem(newUser.getPseudo()); } } break; + //message de deconnexion + //action : vérifier que le pseudo n'existe plus dans la liste des actifs du serveur et le supprimer de la liste de la fenetre menu + //fermeture de la fenetre chat entre le user et la personne qui se deconnecte si elle est ouverte case 2 : MessagePseudo messageDeconnexion = (MessagePseudo) msg; boolean pseudoExiste = Request.sendPseudo(messageDeconnexion.getPseudo(), "pseudoOK"); if(pseudoExiste){ - //Request.sendDeconnexion(Integer.toString(messageDeconnexion.getId()),messageDeconnexion.getPseudo(), "deconnexion"); FenetreMenu.getCb().removeItem(messageDeconnexion.getPseudo()); } - //fermeture de la fenetre chat le user et la personne qui se deconnecte if(FenetreChat.isOuvert()&&FenetreChat.getDest().getPseudo().equals(messageDeconnexion.getPseudo())) { FenetreChat.fermer(); - //getTCPChat().getSocket().close(); } break; + //message pseudo changé + //action : mettre à jour la liste des users de la fenetre pseudo avec le nouveau pseudo case 3 : MessagePseudo messageNewPseudo = (MessagePseudo) msg; this.open = false; - //Contact contact = list.findContact(messageNewPseudo.getPseudo()); - //int id = this.db.getIdFromPseudo(contact.getPseudo()); - for(int i = 0 ; i inscription public boolean connectInscription(String pseudo, String login) throws IOException, InterruptedException { + + //Envoi d'un message de broadcast sans pseudo MessagePseudo msg_connexion = new MessagePseudo(this.localAddress, this.broadcast, this.user.getPort(), App.portDest, 0, "", this.user.getId(), ""); BOut.send(msg_connexion, this.broadcast, App.portDest); + + //Attente pour avoir le temps de recevoir les réponses des users actifs Thread.sleep(2000); + + //On gère toutes les réponses reçues après notre broadcast ArrayList msg_recus = BIn.getListMessage(); for(int i =0; i msg_recus = BIn.getListMessage(); for(int i =0; i getListeTCPChat(){ return listTCPDeg; } diff --git a/chatGitElise/src/controller/DataBase.java b/chatGitElise/src/controller/DataBase.java index 0e1f293..bf809b1 100644 --- a/chatGitElise/src/controller/DataBase.java +++ b/chatGitElise/src/controller/DataBase.java @@ -24,7 +24,6 @@ public class DataBase { } try { connexion = DriverManager.getConnection("jdbc:mysql://srv-bdens.insa-toulouse.fr:3306/tp_servlet_018?useSSL=false", "tp_servlet_018", "Taey2Aje"); - //connexion = DriverManager.getConnection("jdbc:mysql://localhost/test?characterEncoding=utf8", "root","root"); }catch(SQLException e) { e.printStackTrace(); } @@ -40,6 +39,7 @@ public class DataBase { } } + //Ajout d'un user //retourne l'id associé au user ajouté public int addUser(String pseudo, String login) { String query = "INSERT INTO users (pseudo, statut, login) VALUES (?, ?, ?)"; @@ -116,7 +116,6 @@ public class DataBase { } catch (SQLException e) { e.printStackTrace(); } - //System.out.println("loginAux = "+loginAux); return !(loginAux==null); } @@ -180,10 +179,11 @@ public class DataBase { } } - //chat table : nom : id1id2 + //chat table : + //nom : idSrcidDest //colonnes : //id (l'id unique du message) - //id1 et id2 les id des deux users qui se parlent + //idSrc et idDest : les id des deux users qui se parlent //message : le message envoyé //date : la date d'envoi du msg public void newChatTable (int id1, int id2) { @@ -232,7 +232,7 @@ public class DataBase { return res; } -//il faut mettre dans l'ordre idSrc pour id1 et id Dest pour id2 dans les params + //il faut mettre dans l'ordre idSrc pour id1 et id Dest pour id2 dans les params public void addMessage(int id1, int id2, String message) { int idSrc = id1; int idDest = id2; diff --git a/chatGitElise/src/gui/FenetreChat.java b/chatGitElise/src/gui/FenetreChat.java index d47a16f..7257245 100644 --- a/chatGitElise/src/gui/FenetreChat.java +++ b/chatGitElise/src/gui/FenetreChat.java @@ -8,7 +8,6 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.io.File; import java.io.IOException; import java.net.InetAddress; import java.sql.SQLException; @@ -16,7 +15,6 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.List; import javax.swing.*; import javax.swing.border.Border; @@ -71,10 +69,11 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ this.frame = new JFrame("Fenetre Chat avec "+ userString); this.agent = agent; this.user = agent.getUser(); - //this.dest = agent.getList().findContact(userString); this.dest = Request.getUser(userString, "getUser"); InetAddress adr = dest.getAddress(); + + //Récupération du TCPChat associé au dest for(TCPChat tcp : agent.getListeTCPChat()) { if(tcp.getSocket().getInetAddress().equals(adr)) { t=tcp; @@ -91,12 +90,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ public void windowClosing(WindowEvent e) { int quitter = FenetreMenu.fenetreFermeture(); if(quitter == 0) { - /*try { - t.getSocket().close(); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - }*/ frame.dispose(); } }}; @@ -105,7 +98,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ this.panel.setOpaque(false); this.addWidgets(); - //frame.getContentPane().add(panel, BorderLayout.CENTER); afficherHistorique(); frame.getRootPane().setDefaultButton(envoyer); @@ -140,7 +132,7 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE}; this.frame.getContentPane().setLayout(gridBagLayout); - //zone pour rentrer les message à envoyer + //zone pour entrer les message à envoyer text = new JTextArea(10, 3); text.setForeground(Color.WHITE); text.setBackground(Color.GRAY); @@ -188,13 +180,15 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ envoyer.addActionListener(new ActionListener() { private Date date; public void actionPerformed(ActionEvent e) { + + //récupération du texte entré par le user String message = text.getText(); - //System.out.println("Message :"+ message); - //System.out.println(dest); + + //récupération id user et dest int idUser = agent.getDb().getIdFromPseudo(user.getPseudo()); - //System.out.println("IDuser = "+idUser); int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo()); - //System.out.println("IDdest = "+idDest); + + //récupération du TCPChat associé au dest try { TCPChat tcpChat = null; for(TCPChat tcp : agent.getListeTCPChat()) { @@ -204,16 +198,29 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ } text.setText(""); + + //Création de la date du message this.setDate(new Date()); DateFormat format = new SimpleDateFormat(" (yyyy/MM/dd HH:mm:ss)"); String dateString = format.format(this.date); + + //Envoi du message tcpChat.sendMsg(message); + + //Affichage du message et de la date doc.insertString(doc.getLength(), "\n"+message+dateString, right ); doc.setParagraphAttributes(doc.getLength(), 1, right, false); text.setCaretPosition(text.getDocument().getLength()); + + //Si le chat entre user et dest existe déjà dans la base de donnée if(agent.getDb().tableChatExists(idUser, idDest)) { + + //ajout du message dans la table agent.getDb().addMessage(idUser, idDest, message); + + //Sinon }else { + //Création de la table et ajout du message agent.getDb().newChatTable(idUser, idDest); agent.getDb().addMessage(idUser, idDest, message); } @@ -270,17 +277,21 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ SimpleAttributeSet left = new SimpleAttributeSet(); StyleConstants.setAlignment(left, StyleConstants.ALIGN_LEFT); StyleConstants.setForeground(left, c.brighter()); + int idUser = agent.getDb().getIdFromPseudo(user.getPseudo()); - //System.out.println("IDuser = "+idUser); int idDest = agent.getDb().getIdFromPseudo(dest.getPseudo()); + if(agent.getDb().tableChatExists(idUser, idDest)) { + ArrayList historic = null; try { historic = agent.getDb().getHistoric(idUser, idDest); } catch (SQLException e2) { e2.printStackTrace(); } + for(MessageAffichage msg : historic) { + if(msg.getId() == idUser) { try { doc.insertString(doc.getLength(), "\n"+msg.getMessage(), right ); @@ -303,7 +314,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ public void propertyChange(PropertyChangeEvent evt) { switch(evt.getPropertyName()){ case "deconnexion" : - System.out.println("Je suis dans deconnexion"); InetAddress adr = dest.getAddress(); TCPChat t=null; for(TCPChat tcp : agent.getListeTCPChat()) { @@ -314,7 +324,6 @@ public class FenetreChat extends JFrame implements PropertyChangeListener{ try { t.getSocket().close(); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } agent.getListeTCPChat().remove(t); diff --git a/chatGitElise/src/gui/FenetreConnexion.java b/chatGitElise/src/gui/FenetreConnexion.java index 23e83db..ce927e4 100644 --- a/chatGitElise/src/gui/FenetreConnexion.java +++ b/chatGitElise/src/gui/FenetreConnexion.java @@ -41,7 +41,6 @@ public class FenetreConnexion implements ActionListener { */ public FenetreConnexion() { try { - //here you can put the selected theme class name in JTattoo UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { @@ -53,15 +52,20 @@ public class FenetreConnexion implements ActionListener { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } + //creer une instance JFrame frame = new JFrame("Fenetre connexion"); + //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // fixer les dimensions de la fenetre frame.setSize(new Dimension(120, 40)); + //Creer le JPanel panel = new JPanel(new GridLayout(4,1)); panel.setOpaque(false); + //Ajouter les elements this.addWidgets(); try { @@ -74,12 +78,16 @@ public class FenetreConnexion implements ActionListener { } catch (IOException e) { throw new RuntimeException(e); } + //Set the default button. frame.getRootPane().setDefaultButton(Connexion); + //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); + //L'utilisateur ne pourra pas aggrandir la fenetre this.frame.setResizable(false); + //Afficher la fenetre frame.pack(); frame.setVisible(true); @@ -88,98 +96,123 @@ public class FenetreConnexion implements ActionListener { private void addWidgets() { // Créer Zone d'insertion de texte pour le pseudo this.pseudofield = new JTextField(2); + // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Type your login", SwingConstants.CENTER); this.Text.setForeground(Color.white); this.Text.setOpaque(false); + //Ajout d'un bouton Connexion this.Connexion = new JButton("Connexion"); this.Cancel = new JButton("Cancel"); this.Connexion.addActionListener(this); this.Cancel.addActionListener(this); + //On associe au bouton Connexion des actions a realiser this.Connexion.addActionListener(this); this.Connexion.setSelected(false); + // On ajouter les differents elements au panel panel.add(pseudofield); panel.add(Text); panel.add(Connexion); panel.add(Cancel); + //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); + if(source == Connexion){ - // on recupere le texte entree dans la zone de saisie - String login = pseudofield.getText(); + // on recupere le texte entré dans la zone de saisie + String login = pseudofield.getText(); - boolean loginExiste = false; - boolean loginEstActif = false; - try { - loginExiste = Request.sendLogin(login, "loginExiste"); - } catch (IOException e1) { - System.out.println("Pb envoi requete au serveur"); - e1.printStackTrace(); - } - try { - loginEstActif = Request.sendLogin(login, "estActif"); - } catch (IOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - - if(!loginExiste) { - if(!Connexion.isSelected()) { - JOptionPane.showMessageDialog(frame, "This login doesn't exist", "Error", JOptionPane.WARNING_MESSAGE) ; - Connexion.setSelected(true); - frame.dispose(); - new FenetreConnexion(); - } - }else if(loginEstActif){ - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); + boolean loginExiste = false; + boolean loginEstActif = false; + + //On vérifie si login existe déjà + try { + loginExiste = Request.sendLogin(login, "loginExiste"); + } catch (IOException e1) { + System.out.println("Pb envoi requete au serveur"); + e1.printStackTrace(); + } + + //On vérifie si le login est utilisé par un user actif + try { + loginEstActif = Request.sendLogin(login, "estActif"); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); } - if(!Connexion.isSelected() && !FenetreMenu.ouvert) { - JOptionPane.showMessageDialog(frame, "This login is used by an active user", "Error", JOptionPane.WARNING_MESSAGE) ; - Connexion.setSelected(true); - frame.dispose(); - new FenetreConnexion(); - } - }else { - // On crée un objet de type ChatApp - Agent agent; - boolean connexion; - - try { - - agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest, login); - String pseudo = agent.getDb().getPseudoFromLogin(login); - // on tente une connexion avec ce pseudo - connexion = agent.connectConnexion(pseudo, login); - // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation - if(connexion) { - // La connexion a reussi - JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; - frame.dispose(); - // on lance une nouvelle fenetre de type View_Menu - FenetreMenu fenetreCourante= new FenetreMenu(agent); - } - else { - // La connexion a echoue, il est possible de rentrer un nouveau pseudo - JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); - } - } catch (IOException e) { - System.out.println("Création thread impossible"); - e.printStackTrace(); - } catch (InterruptedException e) { - System.out.println("connect impossible"); - e.printStackTrace(); - } - } + + //Le login n'existe pas + if(!loginExiste) { + + //Affichage d'un message d'erreur + if(!Connexion.isSelected()) { + JOptionPane.showMessageDialog(frame, "This login doesn't exist", "Error", JOptionPane.WARNING_MESSAGE) ; + Connexion.setSelected(true); + frame.dispose(); + new FenetreConnexion(); + } + + //Le login est utilisé par un user actif + }else if(loginEstActif){ + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + //Affichage d'un message d'erreur + if(!Connexion.isSelected() && !FenetreMenu.ouvert) { + JOptionPane.showMessageDialog(frame, "This login is used by an active user", "Error", JOptionPane.WARNING_MESSAGE) ; + Connexion.setSelected(true); + frame.dispose(); + new FenetreConnexion(); + } + + //Le login existe et n'est pas utilisé par un user actif + }else { + + Agent agent; + boolean connexion; + + try { + //Création d'un agent + agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest, login); + + //Récupération du pseudo et tentative de connexion + String pseudo = agent.getDb().getPseudoFromLogin(login); + connexion = agent.connectConnexion(pseudo, login); + + // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation + if(connexion) { + + // La connexion a reussi + JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; + frame.dispose(); + + // on lance une nouvelle fenetre de type View_Menu + FenetreMenu fenetreCourante= new FenetreMenu(agent); + }else { + + // La connexion a echoue, il est possible de rentrer un nouveau pseudo + JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); + } + + } catch (IOException e) { + System.out.println("Création thread impossible"); + e.printStackTrace(); + } catch (InterruptedException e) { + System.out.println("connect impossible"); + e.printStackTrace(); + } + } }else if(source == Cancel) { frame.dispose(); new FenetreInscription(); @@ -188,15 +221,15 @@ public class FenetreConnexion implements ActionListener { } private static void createAndShowGUI() { - // Etre certain d'avoir une joli fenetre + + // Etre certain d'avoir une jolie fenetre JFrame.setDefaultLookAndFeelDecorated(true); - // On crée une fentre d'acceuil + + // On crée une fenetre d'acceuil FenetreConnexion fenetre = new FenetreConnexion(); } public static void main(String[] args) { - //Schedule a job for the event-dispatching thread: - //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); diff --git a/chatGitElise/src/gui/FenetreInscription.java b/chatGitElise/src/gui/FenetreInscription.java index 9d8540c..40a283f 100644 --- a/chatGitElise/src/gui/FenetreInscription.java +++ b/chatGitElise/src/gui/FenetreInscription.java @@ -10,7 +10,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; import javax.swing.BorderFactory; import javax.swing.JButton; @@ -22,8 +21,6 @@ import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.JOptionPane; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.io.File; import java.io.IOException; @@ -45,8 +42,8 @@ public class FenetreInscription implements ActionListener { * Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo. */ public FenetreInscription() { + try { - //here you can put the selected theme class name in JTattoo UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { @@ -58,15 +55,20 @@ public class FenetreInscription implements ActionListener { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } + //creer une instance JFrame frame = new JFrame("Fenetre inscription"); + //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // fixer les dimensions de la fenetre frame.setSize(new Dimension(40, 100)); + //Creer le JPanel panel = new JPanel(new GridLayout(7,1)); panel.setOpaque(false); + //Ajouter les elements this.addWidgets(); try { @@ -80,19 +82,24 @@ public class FenetreInscription implements ActionListener { throw new RuntimeException(e); } frame.getRootPane().setDefaultButton(inscription); + //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); - //L'utilisateur ne pourra pas aggrandir la fenetre + + //L'utilisateur ne pourra pas agrandir la fenetre this.frame.setResizable(false); + //Afficher la fenetre frame.pack(); frame.setVisible(true); } private void addWidgets() { + // Créer Zone d'insertion de texte pour le pseudo this.loginfield = new JTextField(2); - this.pseudofield = new JTextField(2); + this.pseudofield = new JTextField(2); + // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Forbidden characters: space, '?','&', '/', '=' ", SwingConstants.CENTER); this.Text.setForeground(Color.WHITE); @@ -118,12 +125,15 @@ public class FenetreInscription implements ActionListener { JLabel text2 = new JLabel("Pseudo: ", SwingConstants.CENTER); text2.setForeground(Color.WHITE); text2.setOpaque(false); + //Ajout d'un bouton Connexion this.inscription = new JButton("Sign Up"); this.connexion = new JButton("Sign In"); + //On associe au bouton Connexion des actions a realiser this.inscription.addActionListener(this); this.connexion.addActionListener(this); + // On ajouter les differents elements au panel panel.add(text); panel.add(loginfield); @@ -132,6 +142,7 @@ public class FenetreInscription implements ActionListener { panel.add(Text); panel.add(inscription); panel.add(connexion); + //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } @@ -139,34 +150,48 @@ public class FenetreInscription implements ActionListener { public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if(source == inscription) { - // on recupere le texte entree dans la zone de saisie + + // on recupere le login et le pseudo entrés dans la zone de saisie String login = loginfield.getText(); String pseudo = pseudofield.getText(); + + //Si le login ou le pseudo sont vides affichage message d'erreur if(login.isBlank()||pseudo.isBlank()) { JOptionPane.showMessageDialog(frame, "Please do not enter a blank pseudo or login") ; + + //Si le login existe déjà on affiche un message d'erreur }else if(DataBase.getInstance().loginExiste(login)){ JOptionPane.showMessageDialog(frame, "This login is already used"); + + //Les conditions sont réunies }else { - // On crée un objet de type ChatApp - Agent agent; - boolean connexion; + + Agent agent; + boolean connexion; try { + + //Création d'un agent agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest); - // on tente une connexion avec ce pseudo + + // on tente une connexion avec le pseudo connexion = agent.connectInscription(pseudo, login); + // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation if(connexion) { + // La connexion a reussi JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; frame.dispose(); + // on lance une nouvelle fenetre de type View_Menu FenetreMenu fenetreCourante= new FenetreMenu(agent); - } - else { + }else { + // La connexion a echoue, il est possible de rentrer un nouveau pseudo JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); } + } catch (IOException e) { System.out.println("Création thread impossible"); e.printStackTrace(); @@ -175,6 +200,7 @@ public class FenetreInscription implements ActionListener { e.printStackTrace(); } } + }else if(source == connexion){ frame.dispose(); FenetreConnexion fenetreCo = new FenetreConnexion(); @@ -183,15 +209,16 @@ public class FenetreInscription implements ActionListener { public static void createAndShowGUI() { + // Etre certain d'avoir une joli fenetre - JFrame.setDefaultLookAndFeelDecorated(true); - // On crée une fentre d'acceuil - FenetreInscription fenetre = new FenetreInscription(); + JFrame.setDefaultLookAndFeelDecorated(true); + + // On crée une fentre d'acceuil + FenetreInscription fenetre = new FenetreInscription(); } public static void main(String[] args) { - //Schedule a job for the event-dispatching thread: - //creating and showing this application's GUI. + javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); diff --git a/chatGitElise/src/gui/FenetreMenu.java b/chatGitElise/src/gui/FenetreMenu.java index 0d72b57..3a0e776 100644 --- a/chatGitElise/src/gui/FenetreMenu.java +++ b/chatGitElise/src/gui/FenetreMenu.java @@ -7,8 +7,6 @@ import java.awt.Font; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; -import java.awt.GridLayout; -import java.awt.HeadlessException; import java.awt.Image; import java.awt.Insets; import java.awt.SystemColor; @@ -16,13 +14,11 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; import java.util.Vector; import javax.swing.ImageIcon; -import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; @@ -33,15 +29,14 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; -import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.UIManager; import controller.Agent; -import model.Contact; import server.Request; public class FenetreMenu { + JFrame frame; JPanel panel; JMenuBar menu; @@ -59,7 +54,6 @@ public class FenetreMenu { FenetreMenu.ouvert=true; this.agent = agent; try { - //here you can put the selected theme class name in JTattoo UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { @@ -71,13 +65,14 @@ public class FenetreMenu { } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } + frame = new JFrame("Fenêtre menu"); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); - frame.setSize(new Dimension(600, 800)); - frame.setResizable(false); + frame.setSize(new Dimension(600, 800)); + frame.setResizable(false); - wa = new WindowAdapter(){ + wa = new WindowAdapter(){ public void windowClosing(WindowEvent e){ int reponse = fenetreFermeture(); if (reponse==0){ @@ -95,10 +90,12 @@ public class FenetreMenu { frame.addWindowListener(wa); menu = new JMenuBar(); + //Creation d'un JPanel panel = new JPanel(new GridBagLayout()); panel.setForeground(SystemColor.menuText); panel.setOpaque(false); + // Ajouter tout les elements a la fenetre this.addWidgets(); @@ -112,8 +109,10 @@ public class FenetreMenu { } catch (IOException e) { throw new RuntimeException(e); } + // ajouter le panel a la fenetre frame.getContentPane().add(panel, BorderLayout.CENTER); + // Afficher la fenetre frame.pack(); frame.setVisible(true); @@ -128,6 +127,7 @@ public class FenetreMenu { } private void addWidgets() throws IOException { + jlabel = new JLabel(new ImageIcon("panda.png"), JLabel.CENTER); jlabel.setOpaque(false); texte = new JLabel(); @@ -148,15 +148,13 @@ public class FenetreMenu { contenu.setBackground(c.darker()); contenu.setHorizontalAlignment(SwingConstants.CENTER); - //JMenuItem usersActifs = new JMenuItem("Active users"); JMenuItem modifierPseudo = new JMenuItem("Modify your pseudo"); modifierPseudo.setBackground(c.darker()); modifierPseudo.setForeground(Color.WHITE); JMenuItem deco = new JMenuItem("Deconnection"); deco.setBackground(c.darker()); deco.setForeground(Color.WHITE); - - //contenu.add(usersActifs); + contenu.add(modifierPseudo); contenu.add(deco); @@ -172,7 +170,6 @@ public class FenetreMenu { String users = Request.actifs("actifs"); String users2 = users.replaceAll("\\s", "\n"); - //String users = agent.getList().actifUsers(); Vector v = new Vector(); for(String pseudo : users2.split("\n")) { v.add(pseudo); @@ -251,7 +248,6 @@ public class FenetreMenu { } } }); - //panel.add(BorderLayout.NORTH, menu); diff --git a/chatGitElise/src/gui/FenetreModifPseudo.java b/chatGitElise/src/gui/FenetreModifPseudo.java index 59ba8fc..c1581f0 100644 --- a/chatGitElise/src/gui/FenetreModifPseudo.java +++ b/chatGitElise/src/gui/FenetreModifPseudo.java @@ -21,6 +21,7 @@ import java.io.IOException; import controller.*; public class FenetreModifPseudo implements ActionListener { + JFrame frame; JPanel panel; JTextField pseudofield; @@ -34,45 +35,61 @@ public class FenetreModifPseudo implements ActionListener { * Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo. */ public FenetreModifPseudo(Agent agent) { + this.agent = agent; + //creer une instance JFrame frame = new JFrame("Modification pseudo"); + //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // fixer les dimensions de la fenetre frame.setSize(new Dimension(120, 40)); + //Creer le JPanel panel = new JPanel(new GridLayout(4,1)); + //Ajouter les elements this.addWidgets(); + //Set the default button. frame.getRootPane().setDefaultButton(ok); + //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); + //L'utilisateur ne pourra pas aggrandir la fenetre this.frame.setResizable(false); + //Afficher la fenetre frame.pack(); frame.setVisible(true); } private void addWidgets() { + // Créer Zone d'insertion de texte pour le pseudo this.pseudofield = new JTextField(2); + // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Type your new pseudo", SwingConstants.CENTER); + //Ajout d'un bouton Connexion this.ok = new JButton("Continue"); this.Cancel = new JButton("Cancel"); this.ok.addActionListener(this); this.Cancel.addActionListener(this); + //On associe au bouton Connexion des actions a realiser this.ok.addActionListener(this); - // On ajouter les differents elements au panel + + // On ajoute les differents elements au panel panel.add(pseudofield); panel.add(Text); panel.add(ok); panel.add(Cancel); + //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } @@ -80,20 +97,30 @@ public class FenetreModifPseudo implements ActionListener { public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if(source == ok){ + + //Récupération du nouveau pseudo String newPseudo = pseudofield.getText(); - try { + try { + + //Si le nouveau pseudo est acceptable if(agent.changerPseudo(newPseudo)) { + + //Affichage message JOptionPane.showMessageDialog(frame, "Your new pseudo is "+newPseudo); frame.dispose(); new FenetreMenu(agent); + + //Sinon affichage message erreur }else { JOptionPane.showMessageDialog(frame, "Pseudo already use, choose another one"); } + } catch (HeadlessException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); }; + }else if(source == Cancel) { frame.dispose(); try { diff --git a/chatGitElise/src/model/Contact.java b/chatGitElise/src/model/Contact.java index 9e7ce0d..1626a36 100644 --- a/chatGitElise/src/model/Contact.java +++ b/chatGitElise/src/model/Contact.java @@ -1,6 +1,5 @@ package model; -import java.io.*; import java.net.InetAddress; public class Contact { diff --git a/chatGitElise/src/model/ListeContacts.java b/chatGitElise/src/model/ListeContacts.java index 36fd612..7734bbd 100644 --- a/chatGitElise/src/model/ListeContacts.java +++ b/chatGitElise/src/model/ListeContacts.java @@ -1,15 +1,11 @@ package model; -import network.*; -import java.net.InetAddress; import java.util.ArrayList; public class ListeContacts { - private static Contact user; + private ArrayList listeContact; - - - //la liste doit être un singleton + private static final ListeContacts instance = new ListeContacts(); @@ -21,10 +17,6 @@ public class ListeContacts { return instance; } - public static void createUser(String pseudo, int port) { - user = new Contact(pseudo, Tools.getLocalIp(), port); - } - public boolean contactExist(Contact contact) { for(Contact c : listeContact) { if(c.getPseudo().equals(contact.getPseudo())){ diff --git a/chatGitElise/src/model/Message.java b/chatGitElise/src/model/Message.java index 8133951..5cbbdb5 100644 --- a/chatGitElise/src/model/Message.java +++ b/chatGitElise/src/model/Message.java @@ -5,6 +5,8 @@ import java.net.*; public class Message implements Serializable{ + private static final long serialVersionUID = 1L; + protected InetAddress addressSrc; protected InetAddress addressDest; protected int portSrc; diff --git a/chatGitElise/src/model/MessageChat.java b/chatGitElise/src/model/MessageChat.java index 075fc6e..b3cd4db 100644 --- a/chatGitElise/src/model/MessageChat.java +++ b/chatGitElise/src/model/MessageChat.java @@ -7,6 +7,8 @@ import java.util.Date; public class MessageChat extends Message{ + private static final long serialVersionUID = 1L; + private String message; private Date date; diff --git a/chatGitElise/src/model/MessagePseudo.java b/chatGitElise/src/model/MessagePseudo.java index bd32491..0af5e26 100644 --- a/chatGitElise/src/model/MessagePseudo.java +++ b/chatGitElise/src/model/MessagePseudo.java @@ -3,6 +3,8 @@ package model; import java.net.InetAddress; public class MessagePseudo extends Message{ + + private static final long serialVersionUID = 1L; private String pseudo; private int id; diff --git a/chatGitElise/src/network/TCPChat.java b/chatGitElise/src/network/TCPChat.java index 41c4960..bfb6483 100644 --- a/chatGitElise/src/network/TCPChat.java +++ b/chatGitElise/src/network/TCPChat.java @@ -10,7 +10,6 @@ import java.net.InetAddress; import java.net.Socket; import java.util.ArrayList; -import controller.Agent; import model.Contact; import model.MessageChat; @@ -56,23 +55,20 @@ public class TCPChat extends Thread{ public void run() { BufferedReader in; try { + in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); - while(true) { + while(true) { + try { String input = in.readLine(); MessageChat msgRecu = new MessageChat(this.socket.getInetAddress(), this.socket.getLocalAddress(), this.socket.getPort(), this.socket.getLocalPort(), 0, input); listeMessagesRecu.add(msgRecu); - //System.out.println("fire msg tcp recu"); this.support.firePropertyChange("Msg TCP Recu", true, false); - //if (!msgRecu.getMessage().equals(null)) { - //System.out.println("Message reçu : "+msgRecu.getMessage() ); - //} } catch (IOException e) { this.support.firePropertyChange("deconnexion",true,false); System.out.println("Création et read du in impossible"); break; - //e.printStackTrace(); } } @@ -85,7 +81,6 @@ public class TCPChat extends Thread{ public void sendMsg(String message) throws IOException { PrintWriter out = new PrintWriter(this.socket.getOutputStream(),true); out.println(message); - //System.out.println("Message envoyé : "+message); } diff --git a/chatGitElise/src/network/TCPServer.java b/chatGitElise/src/network/TCPServer.java index 3fe7a10..6ca7a5e 100644 --- a/chatGitElise/src/network/TCPServer.java +++ b/chatGitElise/src/network/TCPServer.java @@ -1,6 +1,5 @@ package network; -import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.IOException; @@ -18,9 +17,9 @@ public class TCPServer extends Thread{ private PropertyChangeSupport support; public TCPServer(int port, InetAddress address) throws IOException { + this.port = port; this.socket = new ServerSocket(port, 1000, address); this.address = address; - this.port = port; this.listeConnexions = new ArrayList(); this.support = new PropertyChangeSupport(this); this.start(); @@ -39,7 +38,6 @@ public class TCPServer extends Thread{ TCPChat tcpChat = new TCPChat(link); this.listeConnexions.add(tcpChat); this.support.firePropertyChange("session chat demarree", true, false); - //link.close();// A APPELER QUELQUE PART D'AUTRE } catch (IOException e) { System.out.println("Socket non créé ou non fermé"); e.printStackTrace(); diff --git a/chatGitElise/src/network/Tools.java b/chatGitElise/src/network/Tools.java index d2acd4c..0f1ec50 100644 --- a/chatGitElise/src/network/Tools.java +++ b/chatGitElise/src/network/Tools.java @@ -1,4 +1,5 @@ package network; + import java.net.*; import java.util.Enumeration; @@ -18,7 +19,9 @@ public class Tools { } - //Renvoie un tableau d'InetAdress le premier élement est l'adresse locale de la machine le deuxieme l'adresse de broadcast + //Renvoie un tableau d'InetAdress + //le premier élement est l'adresse locale de la machine + //le deuxieme l'adresse de broadcast public static InetAddress[] getAdress() { Enumeration interfaces = null; InetAddress localAdress = null; diff --git a/chatGitElise/src/network/UDPInput.java b/chatGitElise/src/network/UDPInput.java index 3490f1f..27fefff 100644 --- a/chatGitElise/src/network/UDPInput.java +++ b/chatGitElise/src/network/UDPInput.java @@ -12,6 +12,7 @@ import java.util.ArrayList; public class UDPInput extends Thread{ + private DatagramSocket socket; private ArrayList messageReceived; private PropertyChangeSupport support; @@ -48,19 +49,14 @@ public class UDPInput extends Thread{ System.out.println("Packet UDP non reçu\n"); e.printStackTrace(); } - /* Charset charset = StandardCharsets.US_ASCII; - String pseudo = charset.decode(ByteBuffer.wrap(inPacket.getData())).toString(); - MessagePseudo msg = new MessagePseudo(null, null, 0, 0, 0, ""); - msg.setPseudo(pseudo);*/ ByteArrayInputStream byteInStream = new ByteArrayInputStream(inPacket.getData()); ObjectInputStream objectInStream; try { objectInStream = new ObjectInputStream(byteInStream); MessagePseudo msg = (MessagePseudo) objectInStream.readObject(); messageReceived.add(msg); - System.out.println("fire property change"); this.support.firePropertyChange("Msg UDP Recu", this.messageReceived.size() -1, this.messageReceived.size()); - System.out.println("Message reçu, pseudo = "+msg.getPseudo()+" et num port = "+msg.getPortSrc()+"\n"); + } catch (IOException e) { System.out.println("Objet pas créé"); e.printStackTrace(); diff --git a/chatGitElise/src/network/UDPOutput.java b/chatGitElise/src/network/UDPOutput.java index 80d8ad5..12cf645 100644 --- a/chatGitElise/src/network/UDPOutput.java +++ b/chatGitElise/src/network/UDPOutput.java @@ -1,4 +1,5 @@ package network; + import model.*; import java.io.ByteArrayOutputStream; @@ -6,10 +7,8 @@ import java.io.IOException; import java.io.ObjectOutputStream; import java.net.*; - - - public class UDPOutput { + private Contact user; private DatagramSocket socket; private int port; @@ -23,32 +22,21 @@ public class UDPOutput { public void send(MessagePseudo msg, InetAddress addressDest, int portSrc) throws IOException { + byte[] buffer = "".getBytes(); ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream); - objectOutStream.writeObject(msg); - objectOutStream.close(); - buffer = byteOutStream.toByteArray(); - DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(), msg.getPortDest()); - this.socket.send(packet); - System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n"); + ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream); + objectOutStream.writeObject(msg); + objectOutStream.close(); + buffer = byteOutStream.toByteArray(); + DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(), msg.getPortDest()); + this.socket.send(packet); } public DatagramSocket getSocket() { return this.socket; } - /*public void send(MessageChangePseudo msg, InetAddress addressDest, int portSrc) throws IOException { - byte[] buffer = "".getBytes(); - ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream); - objectOutStream.writeObject(msg); - objectOutStream.close(); - buffer = byteOutStream.toByteArray(); - DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(),msg.getPortDest()); - this.socket.send(packet); - System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n"); - }*/ }