From efb0b775c7000fcad7211cd168837fd6650b42b0 Mon Sep 17 00:00:00 2001 From: Aman Arya <125aryaaman@gmail.com> Date: Fri, 24 Feb 2023 07:26:12 +0530 Subject: [PATCH] Integrated GUI --- .../Java-SocketProgramming/CLI/CLI.class | Bin 1421 -> 2472 bytes .../Client/Client.class | Bin 3373 -> 3176 bytes .../Client/ReadFromServer.class | Bin 1943 -> 1947 bytes .../Client/WriteToServer.class | Bin 2644 -> 3037 bytes .../Java-SocketProgramming/GUI/GUI.class | Bin 0 -> 2850 bytes .../Java-SocketProgramming/GUI/MyFrame.class | Bin 0 -> 4953 bytes .../Java-SocketProgramming/Main.class | Bin 1193 -> 712 bytes .../Server/ClientHandlerThread.class | Bin 2831 -> 2835 bytes .../Server/Server.class | Bin 4042 -> 3957 bytes .../Server/ServerInputHandlerThread.class | Bin 0 -> 2595 bytes .../Server/ServerStdinHandlerThread.class | Bin 2354 -> 0 bytes .../Java-SocketProgramming/UI/UI.class | Bin 394 -> 0 bytes src/CLI/CLI.java | 32 +++-- src/Client/Client.java | 26 ++-- src/Client/WriteToServer.java | 31 +++-- src/GUI/GUI.java | 55 +++++++++ src/GUI/MyFrame.java | 114 ++++++++++++++++++ src/Main.java | 12 +- src/Server/Server.java | 17 ++- src/Server/ServerInputHandlerThread.java | 34 ++++++ src/Server/ServerStdinHandlerThread.java | 23 ---- src/UI/UI.java | 8 -- 22 files changed, 276 insertions(+), 76 deletions(-) create mode 100644 out/production/Java-SocketProgramming/GUI/GUI.class create mode 100644 out/production/Java-SocketProgramming/GUI/MyFrame.class create mode 100644 out/production/Java-SocketProgramming/Server/ServerInputHandlerThread.class delete mode 100644 out/production/Java-SocketProgramming/Server/ServerStdinHandlerThread.class delete mode 100644 out/production/Java-SocketProgramming/UI/UI.class create mode 100644 src/GUI/GUI.java create mode 100644 src/GUI/MyFrame.java create mode 100644 src/Server/ServerInputHandlerThread.java delete mode 100644 src/Server/ServerStdinHandlerThread.java delete mode 100644 src/UI/UI.java diff --git a/out/production/Java-SocketProgramming/CLI/CLI.class b/out/production/Java-SocketProgramming/CLI/CLI.class index 93f0c4970d94f5c4c8cd2793874597f80954c622..565689fa6768a9de1c80d2879876cf9be1924fd0 100644 GIT binary patch literal 2472 zcmaJ@U2_vv7=BJZx|^`HkkS^UK+sb9krIojU`jz^3bkpAO(|0FW1BAR(#>wz-4v?M zc<(Pj{{S=Uj96#N49~5S?+Nq| zgw8<~^fc|2+~D4+BvR;9a7aTJx&=C0Bot7pGQDN9qE=BCR2&xQo~zmEQekePFqd}R zbiO!Qn3+#sO5i0NRnV*97>+X(=d%=!ys~cFhRdX3SvB9ZvZZh`mqZ#T6}+tB74!)l z4C-pO5KwL7p)QlkJAbUGz?;B8|5HG(JAW|-C}dIv-1L}ru^X&(`PWE z;EaYWUfuR>f>L0g?-ZQ}hMU(tM%qTZDST_RGdQc^HJoGltGdUAEz_Hvm{jowS>hS) zy5Y*~=QUiwTbwfP*K~^w-35I}tK8tCiZKD! z6B@4K8j&}>LZ#|&1c?_@5O`P8X-eRHi}vp2Obe`&?DDjR8Og~QS-LDKeqFSe&dIEw36jS%ES}MPfZD8E3R*xIc?4Og98`VN;T8m0yT9b? z<+W+OTF(`&cq;LIABmTfO zeZJK(b}zgsk|n3+mW>HhZdB!7&d8`F;}ys8J>S)<(}ut5EPEYos3c*-QBakQyf4tV zvrp4rch-z-xZUuon9$3<wIf$C${Za)EX+M(uniburMgacV=E)TKZ>*+#85lX^SQIu&Z|nN&W| z;_CRZuNf92^1)x6(%&S*90w8|dyIH&?C7_ghz1ZHC#n(zm7k>!baHeEzw*=c8-e;A zhZ~S};5j}dP}25ie1wk)l}@b}$$x1SQ;-o-fc^59?2r9L3n4Ekf+_p8$hYiQ*YFk! zUm+=5)`0d27s7(Vp7pYFGc=rehDph?;><{}jrhou%!|dJX3zna zI~XJw3SAq;_tcALINaqnBDCJed;1QP$PK9wf1`_7?%LH#gZG!|A#qge0PfIT{wb0q z;AgZ6Hnovit!GxT3JHPiNzqqce}D~qiX;C4&Vdxr delta 761 zcmY+C&uK3}RA^X;$3SRagnT{^-Fp z{sA7yp7by9sEyL3CZ0Tb^X}i$IJ+fS5AV&)n|bq@H}gIv-$z@&c6WXNSi~I(0SFwT zj37b`!MawiYYd@z(=wd}2B9!@pCimL{7iqPmtQ(&vs`QFmSuDzkPzjNWyGK`4EX^~ z-C8f#Hf+aeF$7GDA?4l`Qj!FYArCU_R)usdf+R*bQZiJGx-+aOdD+Hg96-9enhPD2 zF^Np~T_t)5IgZ0Jjv(LtJv%4i7z!LyGKwhu4|O`Gwa&mzyV7bq8-DE%Jnjh@(AYqwSb4ESqEA9TW4R;Oma*815r+ zTDc-&8CN+fUU}Et58}_lb%r?0uGF=xMjbPC$DrJ@<~3-!soSX#(j%b|#=unQ_d}iMp2tr*VcXAcM0wN03d1^JD~k+C!3FHEOAcqaPu8 z2+CgkibM~`Ka)rBAqq**1UW_sq3#2y1AvNIA8^6H#T3kuA`1m`NuS)M_`ow{~x} zyLPpEE7;(XbNUDLAL?&yzc(|HNlDKkyzMUE{ocLz&7XhY`UAjD+zg`zwF>G~%)wlN zrc>Iu7Rza7Hn#u7DLw57%A_hGbzV5%xt`Us2+`IQgDZg2o?y;_w-`kAW%~@1nQH%>3EpZ3so$Vpz0(5xv^Nq z61fp6IGXMBSYu;F(@1NMVVNN;6Ihxs^F=3`I1qgxld<(eA!?nBrgVE;w?kM#^EoT6 z2f!K^2EFM9PUZcqW0&fDN7y?Li!sXou-~25p6m2lu#&hw+Gj zY6ZNqLMrf9=t<>dR|s(7^g6*Ag5vsW;xm1Zqt*~3I(@%?>N12rMG*q5?V^;3~TDdW_?=f-@@4 z;>mKlRSN3kdX9;j>K*Dm#EkT_V73e|ERXXlp2E}YpTsE8G1K&WOQ$YD`uMn zitU1}EWuOTZ4`Pz!3}{mvx2V{lY&x3>QzMHhtFd62*64{i#64V;xupn9KhkbCp6ZXTXwCXQ{gc==jXlE?*i}N`6ds&J|1=JI>(msE zOybyt{M%5%qx4Z$z6A{^A#)9_$w*@f#!XlgD2lsFI7cxK&+zm*VXng&oMX?bb;I0( z`Gnhw2Hc6|{A5{&Rp=(iNwW7a+MuI@@-b?x$9dd?i|E89bh$JvVyNdy%N1O83AyYO z@&zr{qvkK1Q;=OsA$}+N{IrpuIvyL-xG+487lxgKi zJ{oZhU*T&~(29rf4QDlw94$lLKXk({{ze5C_y?ijy{193)`SqgEwhFdF1^4U!R(MJ lD%`u1q=NWsagAdQzQgw%L)`s=zuz#yRhY9${EjIs`4=BnGqC^w literal 3373 zcmZ`+>wg`2n~5PN&{47rdTHLS zx*brlS%Icu3$_YuNtaB+a#Mc8g=Xb+vFI4psz4&Qp*rt6rZqPbL#IIW=+MxR)RWNg zkW`{pY{#9bl`k2Nf*k@%I+soH8^bPw@l~tXjxGs#kHC)J2Q~N2NR1C`_!N2sA~ln0 za?{z=baq7LL{h_}(%Y!?Ob+bTuul#os;=(1X}esmS!O|ZP1}m$fWT1Js?^+M_Ixt% zCuv_!<_%}jaFV@6BhJS(uv!(iH}XLMKhh@*ps zUY2HZ8pbgpuyxLGLsQ(;+vjWJzR(0SC5!VC+h+xK2iWdg;-kxJn8LKcW>aQ~Z&9FY zUFm&b2=xLrhM}ITx$8S6)>#eD;{{Sqtl>EcWCLt?hG=K-d5QK5G`)egX^ju}iyCxX z6430BRe?QCc$@Y~-9-(CJZ`Zi$8?S9sWAm}0uMF3$ezo*R4^*?#HcWFMZtoG63UIV z@k&a%q{~vE(5ne%mB99fH{Ntm7F5`%DEN{F2VCtFRddZ!s$|d2v2dhvY-M_NP*Fo3 zY>_CRJPp|V`EbF78i zA%y{@0TE%VvO;}R!?$Ei+r5}7_;yomAQ)CF1>fP}4GQ}t2gV$`?3X?jucA%Gb-X6? z?)&m2g-lP@EGuwD!4DYgK*t4{KT~!?#p}L`A8GiptibJF1(r(R((n_nNMEr{OTkYC zdYUVY}-XzuWT;PGR3a)N7&&!}-jG5BM z%|8A?$tDAS#*$qn!=1N_)%Yf?sJM+g3hFZbRt5HL5N}$G_JWb}^UBZ2F}>j0 z4iC{g;qV6weWho0t5`Cs`*OCuP^*lDJPr~xG}5$j>T1PkvHXS5djFj=5>D|zMOrVF z@=P{9H2x;A*LOQf&=wyyMlrd>qtv*?Z7V5;1&d;qvyNA&jH-ga3+#Wu`BpwD__!%S zo4g3zXA<}X;89+%5uR@a9r9wM6p=3|ujM0%ZHK&4yq2}vYx$J%THeZRqu^P=CjS1C zy*ac|0`~W>Li8t;JLu?7#P49+8n(|ScCKRg3cCC2c!b}_ZgF7*@AJ2Z0DxUo)=5Cy z_`4eqqYFvw;d`hXzv8UsE5@(!8}=fE9vBtV+}F;rkCxG$*k8xNoD?3XFfN4@g^5FT z9DWzE{zF7G5Xb|>#Z??v9$&#zYZ#vGzfHimvF$F7uj0%KGHb}rE+bRNbE`PFg2^?^ z`2CBk_}mI!T$Z1w>L}dA&f#c6tz-T!tYx^OD_X~wX}_WJ9=;CL@r_&bW0W=eWn3m% z?-TbZ;{5F))sG-SpS$rG4q`8k()UqHc~-~*`cTCH_YHC9Ag&?BI&~Ny@-D!!NVyRWnRLw3i>@*8CL4YqHxee))^PlP!k+oa^h zI^J2vWF0^AnEiRHRkvvV0R23Sw{eCkcwwEbGt3U~{TRoSgEhhuR0pVnnUr{sIVMwHctQ8iU7W1$ epwYi@Jc7SM&d0c7ncus(C-+iX!$0s(bo~zvxnc7F diff --git a/out/production/Java-SocketProgramming/Client/ReadFromServer.class b/out/production/Java-SocketProgramming/Client/ReadFromServer.class index 028b70159b314e4f64d8ee51e6177f997b044afe..29706f2d4c20814f595c766f9f226a1323cba9a3 100644 GIT binary patch delta 42 tcmbQvKbwETO?gfq_fSuLAhzaWkYJExXOQAykY0Iu%{k^lez diff --git a/out/production/Java-SocketProgramming/Client/WriteToServer.class b/out/production/Java-SocketProgramming/Client/WriteToServer.class index 1b4b6fe244d2b7a756c6a836082ea6dfae035c32..529f498596e45ef74352ce8a6fe95526d0d85e52 100644 GIT binary patch literal 3037 zcmcImYgZFT7=8wj4RI+LMTJ_if|Y=p+KbZ0VkLso2C*cDs=Y1A2rJ2M+)O}wzu)hd zb9(v*`lY9*@`3j7p+BIfzp1CsWH+)%p#9LEoXyPayzlcq?`7VdKmJ<%9l&XP7ey1A z4YZiphE{>j>(-)`C|b^3Vp`^1uOQHR%64ouBG5b#&$S_fHUm);+hGc{r;4_8RKgzw znyR)yTl(Cki3Fcyj5h8u(Sc5Z4lA#0*SRRYYpz$41U@;C4%BBnTgj}Ok=~;8lJRtn zgtep+a#5q7scEL|ijofZqljUrfn6rLuv@?gtO@L`NR^RJVN^NmRRj(W`~zq_r(yS+ z=thsgt~seDoN`rV_j(pMm`*dbMgOg1&%23k6GB z?0ypm(MQU5WvoeRc!kQbg8v1@54;gsa z#3Oi=38*Em0b7B{lFsp^?6^Qz18eb|fs+C|>i`o|V>k1%tScsp$MCp;q={2Hz8z~7 znkrfqvNxEl3k*OMBRFl~NfT!y9^0rw8mz=Ad9xhW0M)njZKdUbTA=nE#MaFJ10ZoLQxw?1v*)N6!k6B%TQFmF{@Dg~BT_htwaS|Mj* z2G7!Od829-nUYOHU?r-%_u9sFlm(o>g>A{cb%F$fulKh{lO2m z1fm(Y>gDCQt%DU?*J6+9crsP>7T-DQx{Bnj@}yMrZlTiA3Kc~aiw2fV+ypz-!L=ON z&Z4^@6KSh7Td=5MU1M)|Jqm3vg;#%uk5-`M8#r${g`%wVr(JiUTHd<0*C}Rim1S7` z-*5URx7H1JxBxk26^j{mu4E?)9oz6~6qoUui9A=Wcq588@s@$Nb%%XNpnpS*{L|+* z-SK*qzW@K@;@eGLZE)B^ukQ9Sg7;Vz;=s|71A^{-5XFc1$iT-YKEbB~y=(6Av?#kI z6MnS?Rl~+QTQ4Mm+yAAPI`3y?CGXi~R$4fVwU0pfMFZE@RY_0?;amr2CW6le_`x(M z9Nsf(z_McCD}h66o;Sd%*Rg?b1om$&%J}+4kK?SQCR)47OHwOG-oN<&JXZ;hB!X>& zze3#RqzNwsLg2mYMb1rM058GfN?`Vmarv@gRLTtz#uf*orh`o0Hr5}-E()E)pe z>B1(QX7Mvx(9Cg|Kr7fYd1M9muHe8A=vqeqG6wW|6-PAwgFj-|WGu3R;otDYGE#zj z6Sr#=`*^Q8K^*PCei;1k<9|PP;1FkVee21HuB0@xk=-Yqmxe+KyJU#ZWa z7^t73F&*W|;Ls{AZKl85m$~Cr1SL2`Xn|X^SH_Ln2zVTO7{dymm+=ap*D3cd-Y3Fk Re10Fnl>bu1Z?XI z*7v&7xeI6d1-enkvWUvUl`Ci5=~5Ri`~qETJxQ33I#b8ZIrpA>p7T8SoO^!>|I`uq z;m@t_fC)bSG>{q6Gud=9n;!EKR1lz*HciOTPKUzVI8%7aPHssNwZ`3T$6dk0orE=A zhTU{4S}*0+bIC%kxSY&X%lYE6Lgy<}E34J33U@5N;KxU=;X(TBXKH^-#L&-x{ZaKE z2++wM!(O67BG?s0M=U<`?}B3?5gaqbN!UAT{(*fAX@(6+_S>xM=$-?L_68jcj!hGRD3?yz6F!zO+@gd$@&Mb`fA9`z~a z4KHxU#yoM^yl6PfIeW&F>Ul}pHCf1ufaH8RUv*BEnnaqM{laruw^SPQunXS4fq`aM z|3kaI>AewL5AYgSG*|20zGk!f`<^!xEh;i}B%*e<@K%5g-qu_YAeX#kPqJ$uDV_ zj82J#IYhS%vWrpq4JYVnXikVSKfPRJKom#WXeG}jDLpFCJeM0J)7w`nNLeF*CCx}i zb6mcl%swi>dWS~D*PEdeTRab6$?|?Z(%S{w7yc~8ZTz^f)jQ%# z3~sS-KYV91XPaNLDX}UQJiOZAOO~lL7El%6D(P!-{5o&S>O4DmPoe>dyw8W+VE13n Cq|%@O diff --git a/out/production/Java-SocketProgramming/GUI/GUI.class b/out/production/Java-SocketProgramming/GUI/GUI.class new file mode 100644 index 0000000000000000000000000000000000000000..04f10b366e0b1e11056d1ecdaf18d5df70c2e364 GIT binary patch literal 2850 zcma)8U3U{z6y3K;J83!+n$kj1AV9&kDMVBd34%~s2&65NQY@%AO>WzvlbM*A^usUw z{{8{_3w-eb*Mic8OJ7~fzvC-Q-FIf%CN{cw$j!Yo=kB}DIs2SDfBg06HvnhxT{~J3 z(GbfQ;&TxpliRiz=Y zGk?ceG?p{&l4;LnE>Fs3Prb;-u?-0g+jVpzDbU^2iZte=r}hZ!=pXQ*GL}K0f>$M8 zHijJnP*^=Wc48Mdxa%9b`?uN;Oex;Gbv%t{1mcS3`I_fBHW@S$4IY!`UhLD5(y<>0 z1iBh%u5ax$N~Lo}&vfj(>3Y(ZRe=NH>Bf?mk&DvyGL075fvGt9a7e>p9nYd)V7tN& zyqlQ0Ba8I8?X+o|-Wh>Nzhd5kK^oN6ktN}Y}2Bold=^il<lnrb zy5r6}O9A`^)3BU50k1C5!%n&4*z_h_7nmTJ^-n_a9US1O4Lyby`<=m=@`d^Ktj>a*_E2N&i>RBvab(JNM8ZJ zrhu;r zc~i$*xJ_}CjRiUE*hRy;VS4kNxt?KruE61tc6~`VCA1BOju}lMJR_@<#*D=$$-GlEtSO^vs&)7<>dl+v(eAf4wy-Rd z=z4_N#Wqq<-NCaP>z2*U+9>jUK|KGn#>vu^7E3v(sflV(QNB{xSvAKm6cXsF*Ik%j zT9sW2ye+U|11@+*abe7;gyiER%S9O=Xjl|T`PEhPOe-_)6l%r!5lfa?3>#(wCz}Mk zP7~qDO;RABm*lKbv%D!)t^$I+y>+Q-dYs1#POVy$qo#^;jA1;gm{2+A9miuhjmntx z=ADw8Xv5t&KElTuK2hTMRG@FOC79ICf(%=GpqEjj=s8uE*7xGtIv zXQ5VUQs#C3HEf(*smLbg^_f_&_pK1ahGiA#Ja3@S1zJR$0m|9z{KJ;vy3*C~mB67b zzBQw);TwUy|8Gha1pe_FYT>m3j!;(tN2m*%V+;aCBsrG2x=ssa(>r({;y$!h-rwOg z*|m!9^gX_8f#kRi5r6DJf_Lb4%yQKeY{nesx$2;e$-|g-+`)nHhzsEndVt%TUd5iD zX&s=dMhNWS-tIa?Jwya_EWq*+c~^yqQ;7PzdIlfj;9&Xz1_pmYY&!iAM;<_IVkc<_ za*c9lJ9>G-?z%I2HqPkrL&W+<8FqNaxF0AW)%q(k(~;z{!gMtGLg9)?9#6g$X%mBy zHDuRt?x%lwvWL;x>z|?%DZ$Sc2Nl`~_WIjot%81+|0^JyhRT0!EN7_pi3Hd-hJsdJP=Ds4fs8!?tb42N7)&^twXXbo4# zkNggekt!V7bS2PH2K?}#E6053!C=#d3!R}01j4fK0>2@#!db+3h9Z8fz6&!AuDrXU zkR0hKU3CVUn@&H%8^9{w-V{e5yyFz|37B6!dD`h9%Be^osn^7k3O;4049 Km-rgrqW2$`jGn^) literal 0 HcmV?d00001 diff --git a/out/production/Java-SocketProgramming/GUI/MyFrame.class b/out/production/Java-SocketProgramming/GUI/MyFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..1d7ce4a8e51bbbab3d8e12814b71e1f201726757 GIT binary patch literal 4953 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 X6twe8{tw9$OKQJ32!Z=d3}E~(%4zZ4 diff --git a/out/production/Java-SocketProgramming/Server/ClientHandlerThread.class b/out/production/Java-SocketProgramming/Server/ClientHandlerThread.class index 3b69ecfbe4f9d52d8d4f5f71a6a523cd11602acf..07c910a971ac03aecdccaed53911413318113fb2 100644 GIT binary patch delta 31 jcmeAdn=H0rClfoTk9(-6zWd~TOdV|OVCH5o=A-NYo39Cg delta 27 hcmbO%)-SeUClf2XPpGH<;QQe2x0&L diff --git a/out/production/Java-SocketProgramming/Server/Server.class b/out/production/Java-SocketProgramming/Server/Server.class index 444015e07cbd42c0a0f409d5740c0635be26e806..a240d24e4ab30c7980d4300786fd42c7fce2a94b 100644 GIT binary patch delta 1611 zcmZux>sM4&6#t#!&fGh9ZZr;ykRTYGg)tL2fS?(YiiMyfS%cURJti4oWE^y6z{qM+ z!?G9JDN%c8_VxkDj4);|dy$ouy+8CP)R#WQYH9o2p#`ngy6c{^&p!L{+rPc4@`T`LZ z&G2bh4X1FuO+y=QXE5{z8O)w(`x*szGL-Q`sjNVOpFvt!US2LdH)?1{fE1B{zn$S) zUS!PT<*J3ZnH9cQvZ*3yr-m*B`QeOtib}_B4IzF(vRlIFk+DU?Rz&zEX-QR#A$ya* z&+iTgV(v6LZ_mc=KukpxeFEb)%2d+mY_U+%|ZVv?_X(JUo(4ZoY0g-PvpEBmNM|h5@ zXh9s0YIsZ}k)wfFlYetSm_4E4Nvxs7(U?D?1Kq1(AD-eJCWq;15#t#?Xv&j@G#uc^ zOa)TEjA!|I)790_Yj^>*R8V76{Y?s9qTWK#0?L{gU;uQ_cahPEN z|IJY9aJC2<8)Ur3kfm4I8w-ZqD6q6t(N@wQPPWhU@nf)s_C)?$8myA zP7J4QNv@{Y!p<@R<{HOk25cCnqX9D^a{o8P2!)|^WcvXmdVr-AVjNZm57)Hi>?mKW zIpQL_9T_Nr6{9#wQa(Kbhe5btOs_9NauKAzVV04730Hx5O_C_108EB!3f3udaN+=N zoX%RL!zN1ftaWK9Y!++>8LZ~NYsR<$c@IGpbym8PsCTh3cw8A{SeHVx&(@N}t)pml zjiA+bhwZKe?jA#jOQLI60-I*&m`6MV#T3a(ovJ8um$HG94VnE*4 z$6{!jIt7C?T^|y6VnF7?coBMFa5l{_!A%deIRyg|_-cBb z<9dz1pJS5t ZOp?AJi*NMxJA6+%mCirlC;VbS?msm0PlNyf delta 1713 zcmZuxYgANK6#mX|XYO#h$~Znr!XXyM3?Qf|iO(R3(TU6vYADJHE;s@goVnm5Yt(}5 zsdh@zO0#!K4@72^DJ!!w%go+y?MJI0{_aPvmbTBGab;_@=5hDgv-h{Z{q23`&zuue zloJ<5jsRGQ-v*W5v~hOa#30QqEiFxl1%4GPP{-FvS2c*^%_?p|fI$v->v~9UWnc|5 zZY4*R&s#ztI~o~mel6Uig%vd54i!t_7O6oMccO{G(jB63U!Aw4&O6r*jbQ;lmsUL8 zRnV-p1iRaf`J%SlRiU62t7L>!tVSDy)yyDjVJ+CqFtvbtrTj((9nfWTs^~%%gJX5D zCs@)R)LTpZM%W}Mha!tRx{UP-aR{r3U@1dZ#0Z9sYnz(1E`x%qI(1!ZGD4ktL_s%t zWUN)O4(s_zX-?T)4C75yT{B9Ojrlv9+B8GK2HY*$yN5^>c-{3*QgM@t&Dg>#tYu?c zai5A_xQY7OaLCYP+|M^#$Ip0xVM-F`5}eT-(rbcxbGsH^u}ZY3U@K}A^x{)~@;xZ`N za~Pv&;|J+z!M_k${|j-LV5l6$z7L6Bz&wID32#7Q%&c%YD-Ppvy>E@O}hC&pnabz4A0-K1c?oO?OpasY z4a9Zw2%;cC?@gdDkigbJ91q6vP;IgE(HOSRDUN|tTKz7Rd5U7#Nqr{+a{}b{#j%@$ zE2J#x5S|&qvjS;*mPASX^r-yk^UjxIcx8~-*r8($Jm#|(`%)UzVl440CGQMUU?vT2 zHZ@#Mr)$WnzboQAPOn8(WI>nO_lmJNrq%evYYNsqWvd6 z{su3s7wE%UxWo0*+G=RNN^^PZW!_~+m+0H4B%B7^}AVI6}Q zVi?`y9iD1%vzmG+%9dSW7+N(JHk$R14F27FbwDJ zJj$l%NyjP18#-bbWr*>zG%WLhuy-xHDF}EYk?V2Knyt3H%gstd*xNN*@Jc$FbNTQe zWlD5}DO2k%NX~GiFom6tB91pToY!#y7a24^FvBHB$bv8{8`A7`VYr+)1vFVyu$Od9 zV3Of{RY;fFw)jb|o0UvMaGRDBJ~y{k1!)^*mFP@iTEmQvS>+lirf0wqCc~yOo7Zs} zZxdz1*=)AtGq=1uaWGubaTV_{j5m2*WGu7HRWMxWhf<7_9&YGZLW&_GtuF7IXWpwIDFwEy<2}4jU^VVg5*3QP za0alf^1Z2J1s{?G#nU!#Q06PAdwQGevbbN`6J?oB?r8XkVfGZUX-G4~1Nv{9CNDLJ zZ`h+9%NeG)*KU?bp5BLe&MNapk=urP_ZP#mW)Ri+Q^ieNZnsT_2}cRFEv4maHP9oo zCx~@ZbwfH?Bn;7!3{(9z?U|90BT2LIKy7@*suq^KT+j2CPoKIx`-(UY>&U>YUKsxq zL$qME?XuW1RKcdbQXg;VB~@P9&+geWx?x$8xbaqA$eLAgVncWsMFHCy9_c9JG4<=w zmKbKos*6;PH%k>x9(Nz4MmdToc2U(((_vtb`u8YDY8z=Z zMao0=r9&4_sjDW2=l^A@YV&Ukr)(Q7l3Q>qGY#%I!G%8g_ejN8LvX|W`b5xRpz~kP znsl|fz{1f$4R_@z^FCNzF>83rF!Op-YCTW+SSC4zDB8z#MGw(Pw?F-^(p!o~B7(ui zKfs>TB!o|VBhc-?MswXWp#Kk_(Hq11p>x^=1x9{{ws?RMU>{>gAnM-+eI$U%0MLjJ z6jJIYIK`qv;{c5_1hkLw{PlgjwU4=95L2@QEC7EZp^yh$dU1qlJ`K8kF-F(#H0Iq1 za~_Hxf$(q}n}n@l99y_UeD0E81nh5hb5D`)5^?i5EYqkep)$D+{6^E0YN7c7#^|!k z_Hlm~`1MTgEBM@ZU!`EGT9L(T2l(J5|BIf@VSW*OfgB-(k$2R)%cR0 bukbZJ-;iAi6+*a$I-2x7N-HK>urcv3&FiX` literal 0 HcmV?d00001 diff --git a/out/production/Java-SocketProgramming/Server/ServerStdinHandlerThread.class b/out/production/Java-SocketProgramming/Server/ServerStdinHandlerThread.class deleted file mode 100644 index 15188b8247b490c2339385bb9e8d47e657f4dbbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 zcmb_eTU#4d6kUhgkaQ@J(hJo>sI+piq^PZzV5_BIV*@Aws#L2dlVdV4nMr3RX#Yt+ z|9~$(NFT5t5B>muhyTEL>zYeQBB}Jjmz*=_?7jA0>+G{n{`mXwcL2BXLlRx+*3hG) z7kvUlJ91BEENPcB>&kH4l0e^rX`B8nf$pj4tpxg!(2&$|3cA2RLAiU%%|wGhSKSoQ z@|(HLW-i;0(*j6h2*VmuI?iB3pf}tT=y8=K_|>U=Gh)GaO}m_(KE9O1Ih@yULB}XA zwq+UlFsSJ*Rcro}FwO12{&gLfFvdtktqP1xb-+zggtU%{AhYvTxvLf(+mQYP)30#m z`O@~iBq_h4V-i;wxac~vWJu3nQJyEuO5kiK23s256iA2E>b_}ZR-HoKs4Q8ks%(Gh zM?=+o)3KA7#*Btp9d8Ah4mPD&w4~>eRayC~vZ|7pLq@}O9rJiw;6fAFa>`|jmdSHe zu0Vnwjrm-s)FN@iq}qM63A~FN8gA-%5ARct4nfqOvZ!cob$Lx-v=dZd!IS@x!bC-p zF8C$WPA^)Hr%LIGfXRZ6j}R0T6A)-**`88}bG#6yw^9)JSjQ*0Bhc?Vjq|@Tm2a!X zFzP*Nmn`LORDxpbR96AmT^&nUCRjy!JoOUKbn+Fza)IwX9XWi)JE9)frNslgd9r5< zskP#cGW_iHwuZdG_z46wtO}%>HL_l}ZCSLKZ%>r=VBWOVYQ0({p{yM|ge1Ll_^&5ob;T%Z$EZ*;MtJC5U%hpeqAzv7g)82D-RVE@CHHBqq_>Rj4^R)F^#fA}RRBzs7-f?#8wd`@VT2|T|H=fi~ z2lIz5_6=!TmSTuSX;}r+SG;!YzNg}AckNbMkmGI=7OEO-9S&+NvL;8Kt#4LUCPI#7 zVFxKTloHtgKdA;J?<&u5%^HPlr5kp;)`hsZTKTu>6$#yTqmSxC&)K$eLrCRmV5MJa za_)fAI4%u!fwBKKWkE$}%RYRcFQ>o?Uyxpod_DQQ#;*)VzI*7M`3+*9lP-MD-(VZi z@CASM$N=jo@JnFh$oVO{X%EalgO(aNz+is%0B3)C@fU~J4lxcq$K{`2{FzVnA7JV^ zu06v$sSgg2-47whX>pYhLBNXy1x_P@K|aAl+&P0ZMsS^PV~|9eb_vcmu|?lBEgs;@ z5M@42>?>MnOy`kC&|$XRF>VJG=Q)OKW)Aru0>5(UWhAv2YnV-TyMy~8@XIT?=kPFg zUtq96qyCxMLwx!&|8tQ|9G=$r8s8A12am#d-{QM)1SH2HS{J!n!47BlF@VQhO>)JB Ik3Ee312QFGWdHyG diff --git a/out/production/Java-SocketProgramming/UI/UI.class b/out/production/Java-SocketProgramming/UI/UI.class deleted file mode 100644 index 6c55065de658a8a071b16d7346ea58d1482225b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmZutyH3ME5S;ZR24hGFuNE4VP~Z;;f&vA}k`)SL_h;vnT;!aQa|V8k3WbG0IP@mf7%c`e11a6X8C zk0z#8dNvyVr3n7`rI3$CReI&2PdHu68l%c^QYB3>AD40|wfPxir_Z%AZ0P8}8yT-m zs-`aFooZcsX>{4Hbk5-Mue8qw??8ufo2!r`ada=Fj_ diff --git a/src/CLI/CLI.java b/src/CLI/CLI.java index 552c614..799d1aa 100644 --- a/src/CLI/CLI.java +++ b/src/CLI/CLI.java @@ -1,20 +1,29 @@ package CLI; -import UI.UI; - +import java.util.Locale; import java.util.NoSuchElementException; import java.util.Scanner; -public class CLI extends UI { - private final Scanner scanner = new Scanner(System.in); +public class CLI { + private final static Scanner scanner = new Scanner(System.in); public CLI(String name) { super(); - System.out.println(name + " GUI Initiated"); + System.out.println(name + " CLI Initiated"); + } + + public static int selectClientOrServer() { + System.out.println("Run SERVER or CLIENT ?"); + String output = scanner.nextLine(); + int option = -1; + switch (output.toLowerCase(Locale.ROOT)) { + case "server", "s", "1" -> option = 0; + case "client", "c", "2" -> option = 1; + } + return option; } - @Override public String read (String msg) throws NoSuchElementException { if (!msg.isEmpty()) { System.out.println(msg); @@ -22,7 +31,16 @@ public String read (String msg) throws NoSuchElementException { return scanner.nextLine(); } - @Override + public String read() throws NoSuchElementException { + return scanner.nextLine(); + } + + public String read(String msg, String defaultValue) throws NoSuchElementException { + String in = this.read(msg + " (default="+ defaultValue +") :"); + if (!in.isEmpty()) return in; + return defaultValue; + } + public void write (String msg) { System.out.println(msg); } diff --git a/src/Client/Client.java b/src/Client/Client.java index 7b2147d..369a26d 100644 --- a/src/Client/Client.java +++ b/src/Client/Client.java @@ -1,7 +1,7 @@ package Client; import CLI.CLI; -import UI.UI; +import GUI.GUI; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -13,27 +13,23 @@ public class Client { public static Socket socket = null; - private String ipAddress = "localhost"; - private String portNumber = "3000"; + String ipAddress; + String portNumber; public static DataInputStream inputStream; public static DataOutputStream outputStream; - public static UI ui; - public static String name = "newUser"; + public static GUI ui; + public static String name; public Client () { - ui = new CLI("Client"); + ui = new GUI("Client"); this.init(); this.startCommunication(); } private void init() { - String inIP = ui.read("Input IP Address of Server (default=localhost) :"); - String inPort = ui.read("Input Port Number of Server (default=3000) :"); - String inName = ui.read("Enter your name :"); - - if (!inIP.isEmpty()) ipAddress = inIP; - if (!inPort.isEmpty()) portNumber = inPort; - if (!inName.isEmpty()) name = inName; + ipAddress = ui.read("Input IP Address of Server", "localhost"); + portNumber = ui.read("Input Port Number of Server", "3000"); + name = ui.read("Enter your name :"); try { socket = new Socket(ipAddress, Integer.parseInt(portNumber)); @@ -43,10 +39,12 @@ private void init() { // send client name and some other imp details if required outputStream.writeUTF(name); + ui.write("Client Connected with Server on "+ipAddress+":"+portNumber); + } catch (IOException e) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, e); + ui.write(e.getMessage()); } - ui.write("Client Connected with Server on "+ipAddress+":"+portNumber); } private void startCommunication() { diff --git a/src/Client/WriteToServer.java b/src/Client/WriteToServer.java index c62d1e6..fee4509 100644 --- a/src/Client/WriteToServer.java +++ b/src/Client/WriteToServer.java @@ -2,6 +2,7 @@ import Server.Server; +import java.awt.event.ActionEvent; import java.io.IOException; import java.util.NoSuchElementException; import java.util.logging.Level; @@ -11,18 +12,32 @@ public record WriteToServer() implements Runnable { @Override public void run() { - String string; + + Client.ui.setSendBtnActionListener(this::sendButtonActionPerformed); + +// String string; +// try { +// while (true) { +// string = Client.ui.read(); +// if (!string.isEmpty()) { +// Client.outputStream.writeUTF(Client.name + " -> " + string.trim()); +// } +// } +// } catch (IOException e) { +// Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, e); +// } catch (NoSuchElementException e) { +// Logger.getLogger(Client.class.getName()).log(Level.INFO, "Server Stdin Closed !"); +// } + } + + private void sendButtonActionPerformed(ActionEvent evt) { try { - while (true) { - string = Client.ui.read(""); - if (!string.isEmpty()) { - Client.outputStream.writeUTF(Client.name + " -> " + string.trim()); - } + String str = Client.ui.getInputTextAndClear(); + if (!str.trim().isEmpty()) { + Client.outputStream.writeUTF(Client.name + " -> " + str.trim()); } } catch (IOException e) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, e); - } catch (NoSuchElementException e) { - Logger.getLogger(Client.class.getName()).log(Level.INFO, "Server Stdin Closed !"); } } } diff --git a/src/GUI/GUI.java b/src/GUI/GUI.java new file mode 100644 index 0000000..a1fe6e9 --- /dev/null +++ b/src/GUI/GUI.java @@ -0,0 +1,55 @@ +package GUI; + +import javax.swing.*; +import java.awt.event.ActionListener; +import java.lang.reflect.Method; +import java.util.NoSuchElementException; + +public class GUI { + + String name; + MyFrame frame; + + public String getInputTextAndClear() { + String str = frame.sendArea.getText(); + frame.sendArea.setText(""); + return str; + } + + public void setSendBtnActionListener(ActionListener listener) { + frame.sendButton.addActionListener(listener); + } + + public GUI (String name) { + this.name = name; + frame = new MyFrame(name); + } + + public static int selectClientOrServer() { + String[] options = {"Server", "Client"}; + return JOptionPane.showOptionDialog(null, "Run Client or Server ?", "Java Socket Programming", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, 0); + } + + public String read(String msg) throws NoSuchElementException { + if (msg.isEmpty()) return this.read(); + String option = ""; + while (option.isEmpty()) { + option = JOptionPane.showInputDialog(null, msg); + } + return option; + } + + public String read() throws NoSuchElementException { + return null; + } + + public String read(String msg, String defaultValue) throws NoSuchElementException { + String a = JOptionPane.showInputDialog(null, msg, defaultValue); + if (a == null) System.exit(0); + return a; + } + + public void write(String msg) { + frame.convoArea.append(msg+"\n"); + } +} diff --git a/src/GUI/MyFrame.java b/src/GUI/MyFrame.java new file mode 100644 index 0000000..193f15f --- /dev/null +++ b/src/GUI/MyFrame.java @@ -0,0 +1,114 @@ +package GUI; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; + +public class MyFrame extends JFrame { + + String title; + + public MyFrame(String title) { + this.title = title; + setVisible(true); + initComponents(); + } + + private void initComponents() { + + jScrollPane1 = new JScrollPane(); + convoArea = new JTextArea(); + jScrollPane2 = new JScrollPane(); + sendArea = new JTextArea(); + sendButton = new JButton(); + + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + setTitle(title); + setResizable(false); + + jScrollPane1.setAutoscrolls(true); + + convoArea.setEditable(false); + convoArea.setColumns(20); + convoArea.setFont(new java.awt.Font("Calibri", Font.PLAIN, 18)); // NOI18N + convoArea.setLineWrap(true); + convoArea.setRows(5); + convoArea.setWrapStyleWord(true); + jScrollPane1.setViewportView(convoArea); + + sendArea.setColumns(20); + sendArea.setFont(new java.awt.Font("Calibri Light", Font.PLAIN, 18)); // NOI18N + sendArea.setLineWrap(true); + sendArea.setRows(3); + sendArea.setText("Type your message here.."); + sendArea.setWrapStyleWord(true); + sendArea.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR)); + jScrollPane2.setViewportView(sendArea); + sendArea.setText(""); + + sendButton.setText("Send"); + sendButton.addActionListener(this::sendButtonActionPerformed); + + GroupLayout layout = new GroupLayout(getContentPane()); + layout.setHorizontalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 466, Short.MAX_VALUE) + .addContainerGap()) + .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(jScrollPane2, GroupLayout.DEFAULT_SIZE, 357, Short.MAX_VALUE) + .addGap(28, 28, 28) + .addComponent(sendButton, GroupLayout.PREFERRED_SIZE, 65, GroupLayout.PREFERRED_SIZE) + .addGap(26, 26, 26)))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 262, GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(jScrollPane2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(sendButton, GroupLayout.PREFERRED_SIZE, 63, GroupLayout.PREFERRED_SIZE) + .addGap(36, 36, 36)))) + ); + + getContentPane().setLayout(layout); + pack(); + } + + private void sendButtonActionPerformed(ActionEvent evt) { + + String str = sendArea.getText(); + +// if(!str.trim().equals("")) +// { +// try { +// Client.OUT.writeUTF(str.trim()); +// } catch (IOException ex) { +// Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, +// null, ex); +// } +// } + + sendArea.setText(""); + + } + + public JTextArea convoArea; + JScrollPane jScrollPane1; + JScrollPane jScrollPane2; + JTextArea sendArea; + JButton sendButton; + + public static void main(String[] args) { + MyFrame gui = new MyFrame("Server"); + } +} diff --git a/src/Main.java b/src/Main.java index 1f0e45f..c589e61 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,16 +1,14 @@ import Client.Client; import CLI.CLI; +import GUI.GUI; import Server.Server; -import java.util.Locale; public class Main { public static void main(String[] args) { - CLI CLI = new CLI("Main"); - String output = CLI.read("Run SERVER or CLIENT ?"); - switch (output.toLowerCase(Locale.ROOT)) { - case "server", "s", "1" -> new Server(); - case "client", "c", "2" -> new Client(); - } + int option = GUI.selectClientOrServer(); + if (option == 0) new Server(); + else if (option == 1) new Client(); + else System.out.println("Good Bye"); } } diff --git a/src/Server/Server.java b/src/Server/Server.java index caa6f02..24bc099 100644 --- a/src/Server/Server.java +++ b/src/Server/Server.java @@ -9,14 +9,14 @@ import java.util.logging.Level; import java.util.logging.Logger; import CLI.CLI; -import UI.UI; +import GUI.GUI; public class Server { Socket socket = null; - String portNumber = "3000"; + String portNumber; private boolean running = false; - public static UI ui; + public static GUI ui; // for multi-client maintain array for outputStream of each client private static final List allConnectedClients = new ArrayList<>(); @@ -35,10 +35,9 @@ synchronized public static void broadcastMessage (String msg) { synchronized public static int getTotalActiveClients () { return allConnectedClients.size(); } public Server() { - ui = new CLI("Server"); + ui = new GUI("Server"); - String in = ui.read("Enter the Port Number where server should run (default=3000) :"); - if (!in.isEmpty()) portNumber = in; + portNumber = ui.read("Enter the Port Number where server should run", "3000"); this.running = true; this.startAcceptingConnections(); @@ -51,9 +50,9 @@ private void startAcceptingConnections () { ui.write("Server listening on port: " + port); // to listen for server's stdin input and broadcast msg to all clients - Thread serverStdinHandlerThread = new Thread(new ServerStdinHandlerThread()); - serverStdinHandlerThread.setName("server-stdin-listener-thread"); - serverStdinHandlerThread.start(); + Thread serverInputHandlerThread = new Thread(new ServerInputHandlerThread()); + serverInputHandlerThread.setName("server-stdin-listener-thread"); + serverInputHandlerThread.start(); while (this.running) { diff --git a/src/Server/ServerInputHandlerThread.java b/src/Server/ServerInputHandlerThread.java new file mode 100644 index 0000000..a39f2eb --- /dev/null +++ b/src/Server/ServerInputHandlerThread.java @@ -0,0 +1,34 @@ +package Server; + +import java.awt.event.ActionEvent; +import java.util.NoSuchElementException; +import java.util.logging.Level; +import java.util.logging.Logger; + +public record ServerInputHandlerThread() implements Runnable { + + @Override + public void run() { + + Server.ui.setSendBtnActionListener(this::sendButtonActionPerformed); + +// try { +// String string; +// while (true) { +// string = Server.ui.read(); +// if (!string.isEmpty()) { +// Server.broadcastMessage("Server -> " + string.trim()); +// } +// } +// } catch (NoSuchElementException e) { +// Logger.getLogger(Server.class.getName()).log(Level.INFO, "Server Stdin Closed !"); +// } + } + + private void sendButtonActionPerformed(ActionEvent evt) { + String str = Server.ui.getInputTextAndClear(); + if (!str.trim().isEmpty()) { + Server.broadcastMessage("Server -> " + str.trim()); + } + } +} diff --git a/src/Server/ServerStdinHandlerThread.java b/src/Server/ServerStdinHandlerThread.java deleted file mode 100644 index 4fc0a4f..0000000 --- a/src/Server/ServerStdinHandlerThread.java +++ /dev/null @@ -1,23 +0,0 @@ -package Server; - -import java.util.NoSuchElementException; -import java.util.logging.Level; -import java.util.logging.Logger; - -public record ServerStdinHandlerThread() implements Runnable { - - @Override - public void run() { - try { - String string; - while (true) { - string = Server.ui.read(""); - if (!string.isEmpty()) { - Server.broadcastMessage("Server -> " + string.trim()); - } - } - } catch (NoSuchElementException e) { - Logger.getLogger(Server.class.getName()).log(Level.INFO, "Server Stdin Closed !"); - } - } -} diff --git a/src/UI/UI.java b/src/UI/UI.java deleted file mode 100644 index d34bce4..0000000 --- a/src/UI/UI.java +++ /dev/null @@ -1,8 +0,0 @@ -package UI; - -import java.util.NoSuchElementException; - -public abstract class UI { - public abstract String read (String msg) throws NoSuchElementException; - public abstract void write (String msg); -}