From a14b21b97ffbb3133ff3d5036f8fda514b267022 Mon Sep 17 00:00:00 2001 From: BrianZhang Date: Sat, 20 Jun 2020 21:48:12 -0400 Subject: [PATCH] Add files via upload --- code/ocsf/client/AbstractClient.class | Bin 0 -> 3177 bytes code/ocsf/client/AbstractClient.java | 5 +- code/ocsf/server/AbstractServer$1.class | Bin 0 -> 720 bytes code/ocsf/server/AbstractServer.class | Bin 0 -> 3843 bytes code/ocsf/server/ConnectionToClient.class | Bin 0 -> 3948 bytes code/simplechat1/ClientConsole.class | Bin 0 -> 2369 bytes code/simplechat1/ClientConsole.java | 36 +++++-- code/simplechat1/EchoServer.class | Bin 0 -> 3784 bytes code/simplechat1/EchoServer.java | 78 +++++++++++++- code/simplechat1/ServerConsole.class | Bin 0 -> 2114 bytes code/simplechat1/ServerConsole.java | 126 ++++++++++++++++++++++ code/simplechat1/client/ChatClient.class | Bin 0 -> 2730 bytes code/simplechat1/client/ChatClient.java | 82 ++++++++++++-- code/simplechat1/common/ChatIF.class | Bin 0 -> 142 bytes 14 files changed, 303 insertions(+), 24 deletions(-) create mode 100644 code/ocsf/client/AbstractClient.class create mode 100644 code/ocsf/server/AbstractServer$1.class create mode 100644 code/ocsf/server/AbstractServer.class create mode 100644 code/ocsf/server/ConnectionToClient.class create mode 100644 code/simplechat1/ClientConsole.class create mode 100644 code/simplechat1/EchoServer.class create mode 100644 code/simplechat1/ServerConsole.class create mode 100644 code/simplechat1/ServerConsole.java create mode 100644 code/simplechat1/client/ChatClient.class create mode 100644 code/simplechat1/common/ChatIF.class diff --git a/code/ocsf/client/AbstractClient.class b/code/ocsf/client/AbstractClient.class new file mode 100644 index 0000000000000000000000000000000000000000..13b37d670d6fd163aec5c3b9158d8d16087e3d12 GIT binary patch literal 3177 zcmZuzNpKWZ82;X*Cp{TD`%VDECSig^0hJ{{LNGCq1xQ5WKAGtx1C#DJ-3hz4L~qNl86D3=kcpxRj&QiL%nE!?%%_Cvv~14^-&y%}PL}gxxFBFI<+z~Z zSsl;mcwWIsq*JElj@XHlrmIjra3Vez@32g_!&mK5D79zZnOPcF`NovpF+6_4Ot{0I ze#Fg~@oD11Da(VkEQ9rnI*$r2JZ8p|W=5gL2dCrKWXI?fnUZ8$A@auFk3hGe> zZOV4&K_QxqDQl8wZN|>fruyk>XUa;s`xF}53U~u#|K{Ta_t;5Op>iN)nM1SF<7Q?w zKAxtg!k#g$9^0}QSjx5(O44Z5W2#3jYOe;w@&CHy{QeSwf zpQ1g&Q9EI066P_}G2QM7*UXIY6kSN9ZO2@?QO666Jmmx$lMuSV*!4-%J>rGPJ%iNA zh`zL%rk&8iI#Kj6y^t0;S$z;ZK7+O<~Nm`-6!hDxxW|^L< zL_SwN5(wR`T~g(I)7yF6)qTri7?*DsCmy<{&+ZPnx|Mdpeimh?lhP zbXp-gV$U+Iy(y_)ZTGn2X5tCA$7|=U(!~Y`bFYDI*lu74?lo{9?lLt-ye{XOJjBwh796g3yn${_+NRTL*>0+Fl68jbQ^e6 za&t_Ux6o@~7)J~|B-^*~j)CI>8NsN5cjcy)cEXwH@Slo~;#3zo>Nh>-bjkN)vzFyg zn4f`MK=vtLTglEVd`JpfPij#7#54!JwA`}P!uh9$U6gBKq6;d+4$igYGJ~)*7ItgS zcduE)>`-}UR-DSDTr(GGnByW3r=D`U)2TVOVpJZloVj=)eJvdbdu^<(<=fl_h0V|r zlJ4WjBqW{XNw$qAS#VFXkv+*?_9WYxvYO}Fyj*v4*U9rGly$L1s94DYLb3J*l*Cpo zK)XV{!XB;-2y-2UhJE}d97hHFuojPys}p<4AWT0KBTN&qEW(#~I(7}EW3j6wy9#X) z`T`7GO|Q9%w2SQMrJsc~lILqGlf2VEc92>&EC?{Q??%_pYKLi^eOw zHG=&(Kp%S0hePxyb` zrm>plMXbCoiuNp8B&)usHKYM9GMlgS1N|miIazYMhEPRW(KQG1S>C{l6)_Q^%VO11 zjiTQ5@6+QCiq7`r&pttfxY!iaq|VGS|F51$RPw#L{rVL$hgsh$VtfzRkPY~V+K;Kf z%s&M_q4hHADH}2GdCLqP(Q&Y}=u$qKB$Kw-9XQ-bhZ}C7T0|CWEQ^Kc+Gmg10uUP7b5+d_tGWcC!&7E3j9X=A81h;T2+`Q{=^0jK|B5-*MDUD z7uy-%PTKd<-bL9*c}SIdbzFyt*3ienxydFk;UKY}YW+$23mOdv%XkkzDnSC8d9$QT zEoIg#u#!>X*QEd!x*cpaVf-c)z;4U7QPbpuMTU@kP`OH{E>a5XFf$uWFiW<9J0qCq zEH+9x{2i-ur)1fXrAn5_Jn9FQsr;z|-|9~9I(bdK7fS7ct~ybn_M={PVU_B^dUX&n vb%-DT!`Pt)uuBc1llueQ_i;bK{g4{+G8;v>qP+YlGgw_Pc#3bb1U2?Q57L3v literal 0 HcmV?d00001 diff --git a/code/ocsf/client/AbstractClient.java b/code/ocsf/client/AbstractClient.java index e905636..cf4fec1 100644 --- a/code/ocsf/client/AbstractClient.java +++ b/code/ocsf/client/AbstractClient.java @@ -246,14 +246,16 @@ final public void run() { handleMessageFromServer(msg); } } catch (Exception exception) { + if (!readyToStop) { try { closeAll(); } catch (Exception ex) { } - + connectionException(exception); } + } finally { clientReader = null; } @@ -268,6 +270,7 @@ final public void run() { * attempting to reconnect. */ protected void connectionClosed() { + } /** diff --git a/code/ocsf/server/AbstractServer$1.class b/code/ocsf/server/AbstractServer$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ee21e47860e69c9b653fe3f935ac053c30c480c5 GIT binary patch literal 720 zcmaJDkFKtt6@92xw)U-15u~`QPTgyH-FhtiP-@b0#?4Un9jxY&#TvuZIoIYyYLkb9DO+4;SWnu}l0tCb>gvi? z7;r(*4V1~PBx?NH?K(sLlz6HYdRlYMP#U@N_d!3DjBXj0Kkh=NRZgvUrKBARPYZsm zCt+M;{LlQa{UaMurt!$oq_ASqIzguttt?zHXv}Y&+ zm$Xk~<{x2);Fd65eFWQm#l+q-(j$r+_rD_g0BIBmm_iY=6w@@D^H_*0b6BQmHB3^Z F?;Y|vv~BVwb{s$XK|5A_e)nFM3t=Y0 z?0Ne==Xaj-dpr02|NinV06q9#7zgmwHhdguX{MyfNHZ;sq2o#=X2Q^MRp!|+n^_&# zq|b#B#hf&G9cCESm>0}-85IOziOiN!QO80U4X|}QE%O^Pxf#YSd{&xgWbJc;{=5jD z)$yFHJg?&g>0gv)QO6f_yrkoc3ejXfZxjY|Y0EM!PA#LbU=+s9%r(PSXh_Yb7t)Em zVJF6Yf<#^lC~oi+2RtYsTi!bKOJOXp`26ITmHdYVXW-Yig+N-F4fcFr)1oas~P z%(a|3qfnE{WsSV;!iNiHalU-4Pmd#@vWO_XIbn|5CUNSbLg-jFpS6$koc3hLd3J;5 zw4tygmCYNY#knb?Fp-|haV3;e_u*ADfz`W%}flNY?VH;mKsYbH=dUje}(y zIx0FY`IMCH7bD!g$k>(gdDJBKr0BF`UENw6g*lp7GqX%itXVoxC^EXfLfg0|_f9va z7528L%#3v<;d(!@&TGPSk8~~*bN8LhTAuS|tEa4NJ%yh8D%*HX^J#IAdxGmD+T5qF z(QjLt#fPu*!qrX}Y#~#goAdKB_riHlyvJ$7)pUM3XN(w@m7Xz970fyJb_z%QXL$bm ze@xO?FfvAVVJns4akE&+7^kule6<5pmR(3^Y&VS#N?I{GMh(jzF(gQ>D2}2pia0u> z=td%nL(&|^kthx#q0sDi&_-?h4k_%q*JrJ^lY)-sm!o(PpN!%ph8V0{CUq2#At@|g ziQ=nxh+*!)d`T$6uSL;?Pek!`A$we!N2EE0VTA|$6z}CjE39iQ`!|Y7QSd4Tb$la= zZwiNR;oDJMkmc{-yK?GlRPOA}nu%oIHVTE}JRP1K^QrkXSRdRI1mzcN40_xS&LmSg$BZ)p=YK+?jCW4a} z!S?CZJzC>~59wP_7$O9Goq4)|SucJTy3sk&|da933a;b`Q?GCmJ5lZ+AtYC*r<1VTv zNwa1dF|Nl}P%AVld^B#*F1N59&tMOprCpw5;dq{;ULdJO93xso#hx~<$cUw$)R?!P zE!wC{sDXN&FS+V~TUmtEflW%jJv0^j&C6E!QY@^1&t+Wql*=)wEBT->J{uNp{G|9bZ;n-V^NA7en0i zm-412?bl1ZKr1?U$tHf^)RGo(7MJl9=Z|2(nY*Srk2=b}Pt*K>bl)KQhs57TBTCfp zW9s-R1E|Cxd6U;#qM3fi-M2B!wX>98rhJOytCY`Cew}g~KX=SIgh=H_sL|1{&geY( zLj+e5fzlbMYz9`rZ#an5LGIiu<{1ebZ|S0G8oOG= zFr6#dT|%%|TMW=Le_i61Dt_YaA_w=@yAa~mx2fQ_l)OjT`)KC44S#T$*FgJ7sP(I} z9v{X6Uj*;$ZuSxj5|6RpLD%TIz)!f~Y7aTWKRcS3K#_jM$Y9;)vIKcAVG=X-+#Oy) z^RG~yk|9~QTOwH&Gy4f+4K9-74j=X&r4U=MnPUe5>XxBR>gnPBFcbEsI)jy?5 ztAFIaHYaT*M`8?Su{X6u;5P#BtYYBrpwma_)Wa+#8vUGP zv5=ga$Q?{VIt=Y7B?f<2b^;M~&l{%3wfE z! z5jvq`PvEqUz5l@uwjUypqF_6DpT-$4NSer7Jg?TB;>41g$3CX}ePOo<8^?rCTVN|~ zFY!=*Y4~7U9{MU_{I>DIB;4=e_8MXQq`4pL4Z`>VbwAi`O_L8G9@Nc8>XHZFiva&w pr{bMmE7-qo9;f`P_YhLQC*U$66@1q|!(N^co%Iu}ax!xM{s%R2C`bSR literal 0 HcmV?d00001 diff --git a/code/ocsf/server/ConnectionToClient.class b/code/ocsf/server/ConnectionToClient.class new file mode 100644 index 0000000000000000000000000000000000000000..e592699e48de67af383db80ed6f3c68cf97b0427 GIT binary patch literal 3948 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 MYn(?p&++&9zmLyI^8f$< literal 0 HcmV?d00001 diff --git a/code/simplechat1/ClientConsole.java b/code/simplechat1/ClientConsole.java index c9bb4e9..335b9a1 100644 --- a/code/simplechat1/ClientConsole.java +++ b/code/simplechat1/ClientConsole.java @@ -40,12 +40,13 @@ public class ClientConsole implements ChatIF * * @param host The host to connect to. * @param port The port to connect on. + * @param loginID The loginID user gave */ - public ClientConsole(String host, int port) + public ClientConsole(String host, int port, String loginID) { try { - client= new ChatClient(host, port, this); + client= new ChatClient(host, port, this, loginID); } catch(IOException exception) { @@ -106,17 +107,34 @@ public static void main(String[] args) { String host = ""; int port = 0; //The port number + String loginID = ""; - try - { - host = args[0]; + //Checks if the first argument is a loginID + try{ + loginID = args[0]; + }catch(ArrayIndexOutOfBoundsException e){ + System.out.println("No login ID detected, program will not exit."); + System.exit(0); } - catch(ArrayIndexOutOfBoundsException e) - { + + //Saves the inputted host or uses default if non is given + try{ + host = args[1]; + } + catch(ArrayIndexOutOfBoundsException e){ host = "localhost"; } - ClientConsole chat= new ClientConsole(host, DEFAULT_PORT); - chat.accept(); //Wait for console data + + //Saves the inputted port or uses default if non is given + try{ + port = Integer.parseInt(args[2]); //Get port from command line + ClientConsole chat= new ClientConsole(host, port, loginID); + chat.accept(); + } + catch(Throwable t){ + ClientConsole chat= new ClientConsole(host, DEFAULT_PORT, loginID); //Set port to 5555 + chat.accept(); + } } } //End of ConsoleChat class diff --git a/code/simplechat1/EchoServer.class b/code/simplechat1/EchoServer.class new file mode 100644 index 0000000000000000000000000000000000000000..0ffdbd7544236e83fc8b185af715760b3864eb41 GIT binary patch literal 3784 zcma)9i(eeo75;|T49gH;3^5^1I*}wSy9CtwphD9kuw+{Z2n3thnhwjrPMDq9%nT%0 zt!=f{s;zyS)LN~rViWr?M#R|K_v6<;s_l1Yc9-Fi>W?3H=AL`r=R0Ta{`)^SJ^;{* zechKj0AOPI5Ti+bo%VX_~f(% zDJ!9I&~^O4aDo}bUNWnJ*0&`nzUeKS-YK3pjpp1!!F75D^G1-(^hv1ew;U@tF5#AB zcFSSsjD(s&cg_@YmSdh=D$JVRv@vUwk{G_2GmC*mdlGKV8_t|!t)PL7^4mW>|Ua29&TXV00rpl{U8`SU%IQ$2LpA(48f-AJfU*lnB&jNIawQ7oBj zjMz!_0&`A6bu#2CQ{7@wP@8h0*^*8{X-|F>Yg!~XWcj(s9U;1JTToM#JhsNenhHG2 zSqR;(DHxU`VNdd*SlE?w8P76tQ|^+NGc%URV$*Og??!67MV?fG^f?vx;9eQuR`DG? z&$_nD_^yiY;rkM5ZFfN!kVnNcJH-06mq<|Y1N>0Nk5v2^FUYv0;xc|Bq4|E-4gA0} zieqMwcjx@3I=rahrz&2;&t$x;;uVaj_&Hux@C!lwrHa?^x{6i2q2O17az(DFz_4@`%l>+`Osmog^+(XHUBkb6_cuT}g8BMN>?D4k!j0u{>`AlO1sSZ+^t zyn-VYzr%B66Y5pGCD>|nw(B!ZvTp`O*Q4|`5YYY8dCRB4LV>W;bB3ckZlKSay5;*z z=A3>Z&*bVs-qa&}kWQy9+tyvDoBhyUQYYiOig&Q4;$306mYpMPtP9ifLfPbdxT4^O zi0A#X;~|=-^PYR5+zgd63h0I~AqaifHdXu{f7m2f30T6B;mOJIN&T2U=q}lFVH8nP zql|`N_76#Di+9Yxtf*!#h|Ey+4p?IvlUdOr&0D*V;RkMnNC~@>o!fD`NvO=Ju)G1W z&1T;p$3EwXH)Wn*GM${+*Lj9{^UR`cf4aVikPDG<0E0iyH6c4Xh*_2J)w zozypO`eZW8bCyqtuSn>O8zyzbb_j}%0Yu|9=0%HPH;U;tS{|Gd8Z1Ay<5!I>)UuKG ztP_|ErpKl&8lG=*yCt{f+A^17NJhD>i_%HbvbY9}&x@fnJUKHwsgF&K92dF#Fo0Bw zTNkB|w~f(_Z&ja+KZ$|(HwlL~oVA=~chT&LM59i~a89}2ij02{YNM{ZxKyO3EKB4K z+J^6&#LA^O@=7|QPt}R=R^cCx1pBrZCq~&MIK5IdcVLeX$}%Xos~9wFd&&w-2Ki5p z=xy=s%}L@aUXYSK6!sbLu&uK zkWyXmpz1AdCG>IK6&`i)ikL(Ko#-d6hG%X3{}hgM6)GO(xll2ZUPHB3vxeHs(8Kq- z@O^ieCWl)^t6xK64Gq_zrn_#S5m>{n6pz=?l)iyxv2PLPt3vZ_sN?&+ym9nmFFh6x z+(W||n*KCTsv&jKpU+^RR56NH;63cA;?1I*#zc62iUwzJ7{fP}y!9rM zrzv@c)-rTDOt~~m4@An>)1`dBme%%$$!=oY`&LmiR=tk>Y3*YnQ6}*~T00nS8p<4L z?c*V#g9QCDT7>`Fq0skLXsNVzTUf7kw6EcCT00Ul>pL+El}ClqwAK-F-6nLAsI4Pe zQYZ@C35=!)1=hG48uk#QZNz6UtKEjD@GLK)ZOoN`-YhE)JdAprC8t5&S)S!^5cBB3 z0&#nek~U=vL`9KVJ&#d%%u@gh7x}irzelL`G3tFB&*KSP!jrg4$~8RAo7giUhW4WI zv`o#_>bQ6u*mWQyp8FeU`2@118n4pd8v4^+-JhzylNsq>g)-LC`gZ^O=sL~LIX2dH z9o=CT)RO`~w}Vk`3(8 "+ message; + this.sendToAllClients(message); + } + } //Class methods *************************************************** @@ -94,11 +164,11 @@ public static void main(String[] args) port = DEFAULT_PORT; //Set port to 5555 } - EchoServer sv = new EchoServer(port); + ServerConsole sv = new ServerConsole(port); try { - sv.listen(); //Start listening for connections + sv.server.listen(); //Start listening for connections } catch (Exception ex) { diff --git a/code/simplechat1/ServerConsole.class b/code/simplechat1/ServerConsole.class new file mode 100644 index 0000000000000000000000000000000000000000..96fdb23067ed00b4da58a4d2a96c9934a5451b3b GIT binary patch literal 2114 zcmaJ?ZBr9h7(E*z8`h-=8r0g_)uM(Mp+(zTp|%=9Qxl*hXsK=OCApA=&EB}XL1;VE zztMldXSD@KX8HsAclxzcdhRAj9BGH)CePb>&hv6_{`}|V9{{c)vTz0;ni#i`z?Cla zPjTI%FkxcS#AjN6!@^N~Zo$GA`nahBZ<)xZaJ!F?cP-@brHOkc z@)qF=`k2v9vnkA(_{zk*0sHpU^v#8Q>CxQme93^3Gtiw?ei#Wqx-Yzj>;Tfw4RnSw zSeF3<@>AuiD#p?T^^>meMmG#3Gr7V0{K%?`G|-cGeL2&pEyCc>~Aew5}S<%}#A-Zm#l8EZDe@2L{Hc zfbWlhmaM`Y&lRhOJn4%o||BLt2n-j9M26S={w7$RrXxzN1^5r zS05KLyR=H`+?BGb)s#P$t%@i&&HRUqoZ3t-|C(dGCT(!VO{S}H!&HNy>E_ySzH{8E zR-3uOug2b{=04W7lgEWi$_#;MlM>g73@Va(_FfvGvuSew!V(Raka ziOk@e3(cjd3cupXf(%2kBBwdG<~}dvEUaRURo!q511D=@O>zWf5j}9Dsvd^Ex}kxK zhux#YGW8w|Am>MNMXzM4E`m@}{Ez#{XQHz?O%tBpmb!s~102_1S8K9$dzG$@J4-yaWioC|NZ#b^z*4V@D88i(|8wW`TadU*a zEKHt*)Q(Vpg_cpI@d5LWGuKsIqO})^JsJ`w`uP)J;)qQc-sD#LUs~x$c3~~<;^^Wt z*gNRn!CU#^ZS)j|enWC(8^^Zx{>p1IeI%oakTCxU-bUmm`fvv)ahH~REU~~mGZ@BP zOeBrO-{>=8?V(2#>DNaup@!(v?8PAA5`^w%rs0=34#e3&vo2TvzJc$pemT2X^5s_8 zQ#LS3%his_p^otvI5D|}RG~Nhd~z54i~QWd$pVWwHNs-Hae52(jIQPF7+t6AB4(N+ zx-7JL5gRPvN4EcG%3$5eJvy`DqjAI26i=Z; gi~B{VNO+8{3C>FK(_$et!us5qDat9z)BL~lFE$hY3jhEB literal 0 HcmV?d00001 diff --git a/code/simplechat1/ServerConsole.java b/code/simplechat1/ServerConsole.java new file mode 100644 index 0000000..6325223 --- /dev/null +++ b/code/simplechat1/ServerConsole.java @@ -0,0 +1,126 @@ +import java.io.*; +import client.*; +import common.*; + +/** + * This class constructs the UI for a chat client. It implements the + * chat interface in order to activate the display() method. + * Warning: Some of the code here is cloned in ServerConsole + * + * @author François Bélanger + * @author Dr Timothy C. Lethbridge + * @author Dr Robert Laganière + * @version July 2000 + */ +public class ServerConsole implements ChatIF +{ + //Class variables ************************************************* + + /** + * The default port to connect on. + */ + final public static int DEFAULT_PORT = 5555; + + //Instance variables ********************************************** + + /** + * The instance of the client that created this ConsoleChat. + */ + EchoServer server; + + + //Constructors **************************************************** + + /** + * Constructs an instance of the ClientConsole UI. + * + * + * @param port The port to connect on. + */ + public ServerConsole(int port) + { + try + { + server = new EchoServer(port, this); + } + catch(IOException exception) + { + System.out.println("Error: Can't setup connection!" + + " Terminating server."); + System.exit(1); + } + } + + + //Instance methods ************************************************ + + /** + * This method waits for input from the console. Once it is + * received, it sends it to the server's message handler. + */ + public void accept() + { + try + { + BufferedReader fromConsole = + new BufferedReader(new InputStreamReader(System.in)); + String message; + + while (true) + { + message = fromConsole.readLine(); + server.handleMessageFromServerUI(message); + } + } + catch (Exception ex) + { + System.out.println + ("Unexpected error while reading from console!"); + } + } + + /** + * This method overrides the method in the ChatIF interface. It + * displays a message onto the screen. + * + * @param message The string to be displayed. + */ + public void display(String message) + { + System.out.println("> " + message); + } + + //Class methods *************************************************** + + /** + * This method is responsible for the creation of the Client UI. + * + * @param args[0] The host to connect to. + */ + public static void main(String[] args) + { + int port = 0; //Port to listen on + + try + { + port = Integer.parseInt(args[0]); //Get port from command line + } + catch(Throwable t) + { + port = DEFAULT_PORT; //Set port to 5555 + } + + ServerConsole chat= new ServerConsole(DEFAULT_PORT); + chat.accept(); //Wait for console data + + try + { + chat.server.listen(); //Start listening for connections + } + catch (Exception ex) + { + System.out.println("ERROR - Could not listen for clients!"); + } + } +} +//End of ConsoleChat class diff --git a/code/simplechat1/client/ChatClient.class b/code/simplechat1/client/ChatClient.class new file mode 100644 index 0000000000000000000000000000000000000000..c74a293fcb77f2643c328655a697bd229ede6947 GIT binary patch literal 2730 zcmaJ@O>-1Q7=9)R*cBhw_*+5W0 zLkL zxf~tGG}NSIMkw8mD-Ms{oYgnGM+)Q2!2;aA|qR*3sA>oY+ zPs7qm%Y!55gdOxKy({NPq^2F2B@>}lGWA1&WseP5#Rx)^EnSxii6NDjzF;`2+ZE&D znTu(Z8dg+7nWl$mYR;FOfIbb$l4pxPM>*K2!dM2?rGjUm9m2o{Y&0;6ts0tkNg4Qo zXB7uTkdqm|u@+e!IRg&P85l!X40!_uxG_irMQqWawZ?GXfCt~eHl?ICFSBxV)Igw4 zi^D8AvO7IE4NybOSNi?HKndd-b`0kn-&DC~&`sNNO;-lyh%g=BFNutKAxHe?ge;ks zCrm$Z@_Cb1vb>UR7fYr!(x(9iF5sep3589WDN2uV2szX?hD!$C!rKNeH2ttNx=eFecm>C`0#>70E@Prw zy3;j<=Sk1ZS-vT4yX1)s>0QG)IunXc`xd2{j!~^*_j9Gd%*YEaL;s$E_Z8?xWz}I< zl+&qUm9+iQ?&xCYh)SXziCRnsH>ZWw)3}aw9s*js1L9+h6A#uJWTwC;XoMcDXs>@~qprOw3qhr*3x?n)D`OxWne}mvXFBWX{tZWL_$7`MzKp?p6ja(ovo<`@%Wvx0MBZ=7y_+ zGD~oHqA2EJKUKj$HJvL+k&2X+&ks3)=!xMI4eRIlHy<_)YyO`P>-e;-=QGMNq^2sr zwcNL(16AncDTQh*;M&}oT>S&I&duMWs&f+6ohxe|p$3@5f(N|TkmPq+$hwItHlq$* zXhb(wVGB0#u7*4f{B0&(3sra0L=|ruI=@3zauT&aB36YNZSnB77xmadiEio%<+N|9 ztD16uClmT47T&|J$wWNd#E7genJ~gb9S`;QQ8SQCG=_vW5}NK|kusN96dJpa#?E9S zkyt#5C6id1Oe_mIH_peIAm{Rs^C4DDVr4S1Dr7e2V^+qi%f_2St|n!b#MPnQWTGXc zc16@R53x1^#6UBq_px{&#A$|P3f4WK(`(VnEH&T@e2K5PKE@OL#aDV#~z%(VVuTEoZ-Kivyl8=fxrzusdtd2_H)#q$Jcx= zzrlGt;=A}WpS{O?g`VIVEndd&l=uTz@h6{~zi=JT((+0)EE|jwPD@=&Lrb69Ep6V* zrI8tX4qKzVw-c@^HzRa#UFhJ`S--*hxk;(#@j``^s+O|UGxJK_qSS5j^HGna`nW2o zdPYzcLx1%{v_2qF6{G@Kj$DE#;4^+dhmN~^k?(~b#Zaa2gQ4F}hARFCy~Q<71s~#L Pd_"); } @@ -64,19 +65,80 @@ public void handleMessageFromServer(Object msg) * * @param message The message from the UI. */ + + + //This method handles all user input and excutes the desire effects public void handleMessageFromClientUI(String message) { - try - { - sendToServer(message); - } - catch(IOException e) - { - clientUI.display - ("Could not send message to server. Terminating client."); - quit(); + if(message.contains("#")){ + if(message.contains("quit")){ + quit(); + } + + if(message.contains("logoff")){ + try{ + closeConnection(); + } + catch(IOException e) {} + } + + if(message.contains("sethost")){ + if(isConnected()){ + clientUI.display("This command can not be issued while you are still logged on."); + }else{ + setHost(message.replace("#sethost","")); + } + } + + if(message.contains("setport")){ + if(isConnected()){ + clientUI.display("This command can not be issued while you are still logged on."); + }else{ + setPort(Integer.parseInt(message.replace("#setport",""))); + } + } + + if(message.contains("login")){ + if(isConnected()){ + clientUI.display("This command can not be issued while you are still logged on."); + }else{ + try{ + openConnection(); + } + catch(IOException e) {} + } + } + + if(message.contains("gethost")){ + clientUI.display(getHost()); + } + + if(message.contains("getport")){ + clientUI.display(String.valueOf(getPort())); + } + + + }else{ + try{ + sendToServer(message); + } + catch(IOException e){ + clientUI.display + ("Could not send message to server. Terminating client."); + quit(); + } } } + + //This method overrides the superclass to display the shutting down of server + protected void connectionClosed() { + clientUI.display("The server you are connected to has shut down."); + } + + //This method overrides the superclass to display an error message + protected void connectionException(Exception exception) { + clientUI.display("An error has occured."); + } /** * This method terminates the client. diff --git a/code/simplechat1/common/ChatIF.class b/code/simplechat1/common/ChatIF.class new file mode 100644 index 0000000000000000000000000000000000000000..4457d731d49b46f92556e1499d146b8c7e359d76 GIT binary patch literal 142 zcmX^0Z`VEs1_lcTPId-%b_Nbc2KJQ9;)0ySN=61z4WF#UvPAuy#JqI<;F6-uymV{L zFh&Nh;QZ2}GchkV-}d-sJq;-26O!h#(__0Kx$Oq^#8B5;jH# bMg}IJjSLKoEQ}1y3@jiP11peZVqgORySX6c literal 0 HcmV?d00001