From 5d75c12b7dab6831e87017d4064dd48da865204e Mon Sep 17 00:00:00 2001 From: Defend Date: Fri, 17 Feb 2017 15:17:49 +0300 Subject: [PATCH] Release 12 --- .idea/compiler.xml | 22 + .idea/copyright/profiles_settings.xml | 3 + .idea/misc.xml | 82 ++ .idea/modules.xml | 8 + .idea/sqldialects.xml | 6 + .idea/workspace.xml | 915 ++++++++++++++++++ ctServer.iml | 11 + ctserver.properties | 4 + out/production/ctServer/client.class | Bin 0 -> 7135 bytes out/production/ctServer/console.class | Bin 0 -> 4548 bytes .../ctServer/ctServer$ClientInfo.class | Bin 0 -> 796 bytes out/production/ctServer/ctServer.class | Bin 0 -> 3356 bytes src/client.java | 303 ++++++ src/console.java | 89 ++ src/ctServer.java | 102 ++ 15 files changed, 1545 insertions(+) create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/sqldialects.xml create mode 100644 .idea/workspace.xml create mode 100644 ctServer.iml create mode 100644 ctserver.properties create mode 100644 out/production/ctServer/client.class create mode 100644 out/production/ctServer/console.class create mode 100644 out/production/ctServer/ctServer$ClientInfo.class create mode 100644 out/production/ctServer/ctServer.class create mode 100644 src/client.java create mode 100644 src/console.java create mode 100644 src/ctServer.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4b23316 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a6d8063 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..af0e43a --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..aff860f --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,915 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1470646840402 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/src/console.java + 48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/ctServer.iml b/ctServer.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/ctServer.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ctserver.properties b/ctserver.properties new file mode 100644 index 0000000..81b0032 --- /dev/null +++ b/ctserver.properties @@ -0,0 +1,4 @@ +path.variable.kotlin_bundled=E\:\\ProfessionalPrograms\\IntelliJ IDEA 2016.2.1\\plugins\\Kotlin\\kotlinc +path.variable.maven_repository=C\:\\Users\\itsmy\\.m2\\repository +jdk.home.1.8=E\:/ProfessionalPrograms/JDK8 +javac2.instrumentation.includeJavaRuntime=false \ No newline at end of file diff --git a/out/production/ctServer/client.class b/out/production/ctServer/client.class new file mode 100644 index 0000000000000000000000000000000000000000..220a390f6d503ff8f13e6cccbf7c8e8e2c77438d GIT binary patch literal 7135 zcmai33t&{`mHtj z;)?BR7i(>O6eQbiwpuCB5>mj}TDK2dYp~U>cB@v~UF&1rcH1p2Nc#Qv-Xz0gTVU@0 z-~XKd{O9qVbN(5gyLf64K&fo>+=>t1{VC)BK8%}%P>fR~SN zrr{J$t5-fw;Y>Q7!k`yV<6Anu?Zq?rj^cV&ZTdI$_^yWUDf!=5+&}Q*Is8z~ex&1h z#rR|OctJge)Z?sraLbEc`0*39|EC&W(($qv^YAkr|E|VY)ZZUp@f{`mUA6q47w_Z0b$sB(|KPVee&tvUdIIuA1Xl?y%-j_fZ<_H#B;~6{YRG+ zU0k}jb@Awu>J?3N+9qkbcr{7a#1N#$BEj3txL`v4_P~xnQP_+ZHCsz7NsO9-HZv-i zY7;||qRK>jyBRgxHdqwJvojisE1sF7JWYvsPa@tN=kD&!7L|OiNP?$KzA6*RDWR|+ zYm{0S9+g0%w=*8^sYt{-%{IYAo2e@h?kK8^M7qpCm@I~E#|V>dzt&X?q>f5n8w!Ww ztEffpqD=yKRiw=njIR%c&BjD`s~K$xw03bNvpy0GbZrVmL+agGbjLeGF@atm>R2(cOr<+R;f|G>WYCMPyW?i8C1S5_Y^kkE#Nv@|5^}fJ zExK|OwF&Z5#ZQRVhr)5{ld@Ggrqzn4daKf~k4kg~!fmn6z-`n~kD9R_>dtA()=F;X zBq>Bqqt?+SjuT>LFu{oLE^3T4CxV?7T^$j=c6KMTdb$JgV5eZ3t!N@1>MDww9p~Q| zbm1-0Tf*vNNQo>lUMP<_V@Wo58}(W~&{&!gc2E za)0jPyhWs3u1IAf)Mb^{z?znp^+hF%OZ+9pCI04}A*KMaBg&eb;dLhE{+(uP%qrL!-b;_K2&&>!?l+`dm{OkRH5G*=np|thb+XEk>*WSP z&XT3eYbt6hmKN5mC@C#0T~=LDxMFElMPb#_ipt{Zs^v>7OG*r>phu-rstl=?8ck{q zSuMnzJHwm7PEu#cT3M%Rni<_;M*TI>Xe3%rm`J@~fo1vMtP70&nvu%m4_KO;ZFAUp ztnFj9bu@wK)1iU0cMhEzI(_!Ovv&`j7=5Y?So|K90X_mDnZeyJK*$!hP^(A$n`cO<=5bSVTrm7W| z;6NMwGC8*{sVy|MZf7}MsV)n4DY6_;$2QTSN)efp&34u)Tw{!4y!Wu_CikrohNKgm zexXj#LopR;b%Ej?=w?>WR{QR>Nx7LC+u^JWw?}M^oknljP!Wv=b~~ooCHm53q9JN_ zM|Mz7)}>lIHuC%!p<`c!CT&epaV(l?R)dTtdgv}s?$#=$wGlJp%@HRzS#Kzut9g#u zs!t@{6O*JS8EzzEX0_QB>b7sGf2Gx1HaVSuZgz*wT~y@?)UFT2*~od7V;s7BtPWb3 z9EXv!ZFMZ6_U*>ms3K_HfK-sLN#0r28HhHUA5E}|m@A#wC+$zV9kqwT3}kAchxbrU z{>u3lrfij*mc#RBScx-Qlbx)t4t1CctLau=5b;z)P?D_SrM6vN0Ofl+qLD<;6<~07 z6AW?Z>dGk(t5mmH1^BB(P~AII+Z@eObGKG5QY%(%-&M4$yQ`>`t|+SJZ85&P$7H8u z1G2u3Oz7c#IbIovnPsJwp>QC&Tb;oDS02JUyycL~N(Ak&zS}Tf+*fBo?`rV5QlJ8< zr_F3lu#jh6%_`DUyUcJ$oY!EcBQN5~HjDxs}j1jwu}ddHE;c$;=)@#ZP?HppQ^fWzhV*<48XN<2W*SzLED$jB`QF1~5L;H-HIL zAoFqs=0QUaCSg7gS-{!CBtz$q8pTDuRnS>L>A)(6>UzTH z224Z+rlE>~uA!#2PAC75vkaX+bucym+I)AQmf%(snm+s8b`-NJVs$>VgBG5 zPlIb!cEMmTCgo=@zQ4>}ke%h;xX&eh!|$Dje@nqh%sD!$*L0o()N^wKec4F8nlP2~ zS-8>CrIeJ3{OrLU)LkR!Kf(M_?pQbq#f7*Nd#Q*AbMZ;+qhiXN22wtRrr|F6vjtv$ zxv`Z^xsIGl*>jFFAI1xuc_wH>{g`_i^S1CUEi>mN=4USG$HIPoJPOWetTS3V7VNQK! z)c~sd_{$R+EiBh6EIWne7(KZbkKz!qs>UP41n@FmL8UdmNi5i?*-LByn~3kt1m#Uc z$QG2c@~vd**Rb-f#jRX5S!&vu{2hdDJ24Z)r&!xQLw`TYqI8HkdYBk|g7YJc=~2e* z6wA~zEL6|2h`fxC@#F+vWz=5h{7pjtEn@EjO8O%qri#xkMDJ&akGrv-x*w)K_wWoi zWvSVxIjg||{3GtA-g)>c?z50vieB!zmw0%U@xBND#Q48OJMJN`Q0loPTrYw)OjX?) z?$_{H4G-`igvr>b;dANdFr!k#gKIQ=Ugajg9Xn9kWkX4_^R37>^dZ}dqvi88^tp2R z(Q>yn5I<{udwMaaV9>MejNVw_D)bZ#4q#oO%Xeo>p}S!4KuaIKuGli`dr?#{s5xv} zGMjHti`wVYKYpO4FxB3)r(p1|NoaiFAj{VJ%o~Xi>qN!ni16u`$hgCnvD}g2D^?R8 z;a!bA>&-i7+=STRx-lt z7{wOcPb7Yp_ATjuP)`*9>;}LQ^%9VrsdkFuE$M7VvbDXF+jeo|o_!6GS zzYu?4#vACvJLLF1zJl|3Qc`h*+I>wja8xGYm`vp^g~N7gr%`8x!xU;cf%-m7^v$;L z^$2IBtWb}V>Y`rr?HQ%`$fxiM$sVa%oPE(kX%7D6$UDdyXYW<@D;xS+4F@-9ICKH2 z8Xj9vnsotfoHVH(AvC4eMxpC_ETUcte<`!2-gU;?;9lh_^Jr(h<*AHKT0b_HX<6D6 zlu4dX^WjpzaC6Mz=T3f#`Pt7;o{E?pb)L>vced6m>$4x{-dggg#8KsU8b53JT9)Ou zBv0qNYQh)!@$;kPFYuIk`uM}4dg?x}8YIhOEAnO1l^nH4wJACWMf}hXtjlswz$e;h zNgr-^Oz`QuoY}TAcb40t-8w>BK0@;q@7gx9m^(K0k4>kJO?_iieRMh^-BqS%=~^$c zrln@-j>x8cI=k4r7D+X@InH`nT0xecm8LjT_blFfz~+0c4-*Rp5AxQ-mba#I7#kPMCobP%%_OaL8A0&Ovks_^}mg3*4x93M(Q|8M3e#GJ~$+hIr}>w>xg=#(;^nsp*gLd>);sWohr4b13HdQ6kY znAdv=uQWNx>{fRMLmpv{cQRKe@XW7}nu_UiFCOQb#uL-6EF~c2B_~T=@*=ibS*kK} z8>S4?iTX&7c!ED7Yv2>(#5Lx!nHiY*IZ Qd)b-J`ASel-BMFHlL@~AcGI>d!OlHPe5GiX@FUbCjD!!!R0TmAx;2}J$;>%L^SLEcYUUcJYa`bgC9>Jrs`Njl%6W>zs z?E;je$BTV((yQV-Qfr@z{sL4WrDDJA2UHBIIG|!k#X%K^R1B+lOp1A2ih06I8HZIo zso=W`zNg^(0uD1QFs=3meWPA(M#`&`?d?X)Xj^OOZANT~fGcE%4FR7`5z@mQ<&BA$ z8Sdbo=VCK#CYA{}i{~|yv?kI<(uuX?Sd;8(HDXPAYsg}b1ocp}9y8@Uv*=26nsI@G z+F&FckAw`$E6faQ&3Gbg#00!6HwBGo!XyQiM3M=CbBj+#a`K9V`ciQf;0<+o){IQCTJd zcbn0gB#5G1nHfJytj<`H$KVK>w7Di^5_TZm9ud$2VLGBFq{rh1T~JgTOf(v?jYe$F z7!{!l@`(V&1kI47vQ9IZFhk|bV=;ZR^rtkiOP7Z|J!d;cqc)W{=!t|83zNhV-$WBy zPPS6uwA#Ew+#JmwWND7PQFRxOi*y-PoYI)kgB$Afs1*lR7(S(-OTp6$o?&3p1C5bn zENHAUW$b8~m{=ff(y$t}gff1#(zNVGARJ95=wCzcvLji+vl=eL52S?WWb;Egy<7kq z0=PoMk5H@Nc@1fdXm|lXR`3%IKgEk0n(#A$sg~rN@UKpqA>I)By+y;%@e2;N@Bpr@ z@+@n!)^YCwe?N)HTAVz{hwT&uqKl5>&Zl?(KcJ4#KP_`^QRw9A4vD4Q|W<` zThjgh^g#OH$X))C?df5z_j9dBpw1?4v2T{ycCA0%mmVTndYA+UIJ|RYSGqrah(hvt zEea{Ee`H&_*J>$mspZ8yA;al?q>wnWV$!`9+fKh!Kv-O-vf*^EK&0H{jr6|{o^eDy zM!q4!8%_^O3lEL#Ao6YLgXx};TR9&fOo^t4B$DW0zRrGuD(h%-HMTI3(GSuALuBmZ zXcw7#q*o3|8J0B46quVmL4QLml8E?M810M`b{maQB-+IU%~ zfGAGiBYj5M_SslrHtIEL(?M#zJw3o68NF=vqiLE!lDV$}lg6%0QzvgClcRl$ti+U; zdGd(uw3wBjpT+VCH^&o3*J!?D^~$;S%rw(7$@YW|nQteLZDlH*Ty?WR#F+UfTF9;P zP!r+}=FN>;y4E$-NZxsN#v3D`G9^=9WRB0>AFD5?j!DfdGD9RHS#zgk*>aK$XOJ#Lk|hStg`kgo$POuC|0g3r^JEr~fLB`;8j-yM&JOde7m zUrnbTYa|dO95j~98@GO`oqD{}exdNW!eZ&Mfu8_3Yq5lzy+iV4GFp^nG36fXaom2F zOvzPO9pO_(m!;G`Zp&qvMHaJGd%IZ=CFum>pc=(aaV+nXa?H-u>>MeX*8~|hO7{A8 z7Q*5{?$M0BH~82|WRw(IVP{<<8@jVYzHW;0Su`_#rl z!X+yMeUvQ+^;nFd^@nM zQ{!yvI*Z88&O>%B zK1>gM5VGrVeFoWPB6X6!-1b>5y>Uw22|lAAeZJ{7viEV-Tmm|mfQqpI^DIDqTdd_E zaJSfU5HAe@O9wd!K+i^*a}KFh#?I>{eJJpqp28XTi6bSPC@IWfkoaZ}U{>vXxtqe7 zb*0XVHI7Ob57YmsWo{c=m*c53-(VkbJiYr(_EnB&gba)Mj_3S~*k(oLP=@>`-8GZnVSX?0d%G8N ztK7bGeX|Ep?5yJ%2mCnl;^NGJG+nrQc-6&W@Kq|`F$60Z-+;8ACGq9?$TlR zL%4$|t1OP~94+C9-Nkmd)b5tq-6ib0(L!5FT@?eklm^%)T~3n*v0Pwu{Xr}m9p8^) z?vGBhHkZ1|TzyqHywq1CMIW19+kLEPAA>*>FN;@rlU`ETJuu?QE5#i$YuxIi>xsaTIo#C5n-m{=jASSfD8DzO!p ziJklbvj+ij7gmdh_`~Qh>cmU9QoM|2YHt#+vVV;sD)ZSgX05ld6s<5AxKH9M};$xRgGz$VCe_fka#{{tk5 Gg7*M;L<-FS literal 0 HcmV?d00001 diff --git a/out/production/ctServer/ctServer$ClientInfo.class b/out/production/ctServer/ctServer$ClientInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..c15da564f1c2947c8415650567b6ae06891e6b24 GIT binary patch literal 796 zcmZuu+iufP5S)`Z@uhB?OK)78mI6tEhD+b5kRSvp!qh0S^1z#uo)%ZGjT|QupM~-O z;(-s~qY!i4q^SfCJF{ocp4svG_n)7?0371b!V>P8u&}4#zJdn|9xA9SXjs_CBb7bY zaiF6qp!MH(-U?KlbARGDLq9re_R=JX&R+7a>pE=#<73zL+?MMI6x#jvu_vH=-Pf(` zq2_fyut#**7sYA&;!FBfpn6U2O&o{PkEmBX3Zfu=C6KQ-`jl_QCsJV52_ktsz8J{F z^9La-6(=70Vc$;zb)FTq^m8y0uv%dtqqGy9#sYRHie%CX{n1GBZrvHCJ()~ovbX5s zT>V6j(j=xY<7gPpJXpPWoDAi=KuuhpKRi%tu(5$n8#b10tSDGjP*PAJHB3Fcl~-O0(6_;lvNe(mfT}sDEnwcX`HKA3OYiOZ??J zOy!Z8scdFUry0|1#`K#pEoV%(9-5uO55Z4NwzP^mMyD*qnp>cHv?Wk>+sJBKlTkP28 iL<6;}3ANb-;~%9r7bI$Ht|9fKrz=!Z_m5ZeyrNRSCEaL$@q#})sSZozpOayRBJWmI3CPXFkDvff`S(%sNG4^u?o zHg}~`Nkg|fBq*6w{G?%%VV!%QwasL6kD0M~8H|~umTqU$hJ?*GTzB@w9lIU7$ry08 zME6RNq7v4)SHdNsNkX_pcuzX5pD7qjovr z-Ki0JwzkK#jK1vHu#rBf4<|_p^`zo@a!^m3;#?rgcEV(s>XLT)T^3Im@sq9<30rH6 zF_q>jW~WVSw4?4Y4UXxiB_UGcb=nv;PB#zewr!+EK0TS!5;m+NPiadZbDUeop`e>t z<3+Wr)&Zz5n@kR*Op99gosJvhHbJCzDb8FMouo!RJ<5dkkYL51odg6Bxm$2UT+A{3sm{Ur0Qyx#H ziMl64=PF9>9Z(BgYzkJrf|nG0ho~&+77)c!*>v2v+Z0%q7sF~2j%esYHxpbWmQ;v_ zE8Ph$cnz3208h$0*4HQx1uvzx1fB1wEXSI}&Tt`_u z4wsXO6@A8@U-r`}x?EH^v?u4F>84qO*D{geutN;#l;PUr(~Y!=)a$@jLUytB;I` zevFnlSiELGDieA#YxEx%EQbpo-!RVAgl&)S$=V5niZ+y}S)Ta55o0(zdV>?iG|0MR9ND|jr;*S<&s!XwKprKMsF(1yzeZ{ zRzdGgYCD`40v%)oemyQmCKFIpyJ9+N!|vN}P-N42mvFSJDaPnFj&R4-Um_;-`r^q{ z#^6i4m7f%VjG$;(?t-E_A)$kN4?20~3~}fjC` zKCXU;7{J}!Yc2!s!G4~Ch~i#SDD3f5Ss7{X&BJqO7T(^5p*hIA`WhG7WN(`<>ab;1z0t6NcyCS0A~^eI;t!FYvi5 z5)6?;eIA>>JgRs?V>Z)&g|+fdK76+7@OZpVxKPI?J-ocA>x% z6)pHXF?D`+g|Y^C%9Whr3oxpcj3#vK{Bqj{!pTE`$Cg?R&}n9%4Ai zr`UapeC&K`9mEiMK27QolwGIGeg%gV99D3ItHeBAXAEU4i3*M?xZmMAN{+SKW{L)G z7X1%=tz8Np@USKh;6WM^HQ}W@ej0pxz4sq)qGB4icsnbnaLd9Kg!riRGOMw35@Gn) zJR+=`&C^)Bw5yy)6=_>$ur&v{XWc+&sCphXByFpl!FB=Djv3rGhui0|^HAk1YI{R< zp?aPP*{(isn=DL)<(JXLO;~RE4Z>l08V$}#AR5bIr+YPn#!IW*2G7ZKZhjt3wA$P_ zgFA8vw#(eynY;c%yN`xiBED-3vyFY#P1J3?h2Qa+z@PCahVItI!>kDu`fvj~v5Nh; zjS>ymL&Z z;2Mt7_Jg#3KYot~@CO{D2g6JCQ^rsCW3(;t3uC{tlgTGjv(D9~>> 8); + r[3] = (byte) (response.length); + } + else{ + if(response.length > Long.MAX_VALUE){ + console.out("Socket Exception", "Too long message for sending! (>64bit)"); + return false; + } + r = new byte[response.length+8]; + System.arraycopy(response,0,r,8,response.length); + r[0] = (byte) 129; + r[1] = (byte) 127; + r[2] = (byte) (response.length >>> 56); + r[3] = (byte) (response.length >>> 48); + r[4] = (byte) (response.length >>> 40); + r[5] = (byte) (response.length >>> 32); + r[6] = (byte) (response.length >>> 24); + r[7] = (byte) (response.length >>> 16); + r[8] = (byte) (response.length >>> 8); + r[9] = (byte) (response.length); + } + } + try{ + out.write(r, 0, r.length); + return true; + }catch(IOException e){ + console.out("Socket Exeption", "Client socket is closed?! Closing socket connection!"); + close(); + return false; + } + } + + public String readSocket(){ + String out = ""; + try + { + int[] MSG = new int[0]; + int OPCOUNT = 1; + int LENGTH; + int KEYFRAME = 0; + int[] KEY = new int[4]; + int OPCODE = in.read(); //читаем OPCODE byte + switch(OPCODE){ + case -1: close(); //закрываем чтение потока при -1 + return null; + case 136: close(); + return null; + case 129: + LENGTH = in.read(); //читаем второй бит с данными о размере сообщения + //TODO: which и switch OPCOUNT - необходимо убрать + while(OPCOUNT < 4) { + switch (OPCOUNT){ + case 1: switch (LENGTH){ //узнаем длину сообщения + default: KEYFRAME = 2; + break; + case 254: KEYFRAME = 4; //126-65535 + break; + case 255: KEYFRAME = 10; //65535-... + break; + } + break; + case 2: + switch (KEYFRAME) { + case 2: + MSG = new int[LENGTH - 128]; + break; + case 4: + LENGTH = (in.read() << 8) + (in.read()); + MSG = new int[LENGTH]; + break; + case 10: + LENGTH = (in.read() << 56) + + (in.read() << 48) + + (in.read() << 40) + + (in.read() << 32) + + (in.read() << 24) + + (in.read() << 16) + + (in.read() << 8) + + (in.read()); + MSG = new int[LENGTH]; + break; + } + for (int i = 0; i < 4; i++) { + KEY[i] = in.read(); + } + for (int j = 0; j < (MSG.length); j++) { + int enc = in.read(); + MSG[j] = (byte) (enc ^ KEY[j & 0x3]); + } + break; + case 3: + if(MSG.length>0){ + out = bytesToStringUTFCustom(MSG); + } + else{ + return null; + } + } + OPCOUNT++; + } + } + }catch(IOException e){ + console.out("Socket Exception", "Client socket is closed?! Closing socket connection!"); + close(); + } + console.socket(socketID, "Message: "+out); + return out; + } +// +// public Socket getSocketbyId(socketID){ +// if(socket.closed) +// return this.socket; +// } + + + +// public void sControl(){ +// try{ +// while (true) { +// String input = reader.readLine(); +// if(input == null){break;} +// Pattern main = Pattern.compile(";"); +// if(!httpAuthed) { +// if (!ctServer.checkClient(this, main.split(input))) { +// writer.println("CONNECT_DENIED"); +// break; +// } +// } +// switch (input) { +// case "EXIT": +// socket.close(); +// break; +// default: +// writer.println("Client info - " + socket.getRemoteSocketAddress().toString()); +// console.out("Socket "+socketID+" Message",input); +// } +// } +// } catch (IOException e) { +// console.out("Server Error:", e.toString()); +// } finally { +// close(); +// try { +// socket.close(); +// console.out("Server", "Socket "+socketID+" disconnected!"); +// } catch (IOException e) { +// console.out("Server","System socket closing error!"); +// }catch (NullPointerException e){ +// +// } +// +// } +// } + +} diff --git a/src/console.java b/src/console.java new file mode 100644 index 0000000..8233b49 --- /dev/null +++ b/src/console.java @@ -0,0 +1,89 @@ +import javafx.application.Application; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.time.Clock; +import java.time.Instant; +import java.util.ArrayList; +import java.util.regex.Pattern; + +/** + * Created by itsmy on 08.08.2016. + */ +public class console extends Thread{ + + private BufferedReader in; + private String line; + + public void consoleListner() throws IOException{ + in = new BufferedReader(new InputStreamReader(System.in)); + line = ""; + start(); + } + + public static void out(String parent, String msg){ + Instant instant2 = Clock.systemUTC().instant(); + String time = instant2.toString(); + System.out.println("["+time+"|"+parent+"]: "+msg); + } + + public static void socket(Integer socketId, String msg){ + Instant instant2 = Clock.systemUTC().instant(); + String time = instant2.toString(); + System.out.println("["+time+"|"+"Socket "+socketId+"]: "+msg); + } + + public static void debug(String msg){ + Instant instant2 = Clock.systemUTC().instant(); + String time = instant2.toString(); + System.out.println("["+time+"|DEBUG]: "+msg); + } + + public void run() { + while (line.equalsIgnoreCase("quit") == false) { + try{ + line = in.readLine(); + Pattern main = Pattern.compile(" "); + String[] sx = main.split(line); + switch (sx[0]){ + case "/list": + ArrayList cil = ctServer.clientInfoList; + console.out("Server","/list"); + for(int i = 0; ctServer.sessions[i]; i++){ + if(ctServer.sockets.get(Integer.valueOf(i)).socketAuthed) { + ctServer.ClientInfo ci = cil.get(i); + console.out("Socket " + i, "VKID " + ci.VKID + " and PROTOCOL " + ci.PROTOCOL); + }else{ + console.out("Socket "+ i,"Not authed!"); + } + } + break; + case "/kick": + if(sx.length < 2) { + console.out("Server","/kick - Укажите имя сокета"); + } + break; + case "/help": + console.out("Server","/kick [socketid] для отключения сокета от сервера"); + console.out("Server","/list для отображения всех клиентов"); + console.out("Server","/info [socketid] для отображения полной информации о данном клиенте"); + console.out("Server","/send [socketid] [msg] отладочная команда"); + console.out("Server","ctServer Proto Defend Development 2016"); + break; + case "/send": + if(ctServer.sessions[Integer.valueOf(sx[1])]) { + if ((ctServer.sockets.size() >= Integer.valueOf(sx[1])) && (Integer.valueOf(sx[1]) >= 0)) { + ctServer.sockets.get(Integer.valueOf(sx[1])).sendSocket(sx[2]); + } + } + break; + default: console.out("Server","Введите /help для помощи"); + } + + }catch (IOException e){ + + } + } + } +} diff --git a/src/ctServer.java b/src/ctServer.java new file mode 100644 index 0000000..f0800a5 --- /dev/null +++ b/src/ctServer.java @@ -0,0 +1,102 @@ +import java.net.*; +import java.io.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +public class ctServer { + public static Boolean[] sessions; + public static List sockets; + public static int socketID; + public static ArrayList clientInfoList; + + public static class ClientInfo{ + public static String VKID, ROLE, PROTOCOL, EVENT, TRACKID; + public static int TIME; + public static Boolean notEmpty = false; + public static void destroy(){ + VKID = null; + ROLE = null; + PROTOCOL = null; + EVENT = null; + TRACKID = null; + TIME = 0; + notEmpty = false; + } + } + + public static boolean checkClient(client c, String[] args){ + ClientInfo ci = new ClientInfo(); + ci.destroy(); + try { + for (String name : args) { + Pattern main = Pattern.compile(":"); + String[] sx = main.split(name); + switch (sx[0]) { + case "PROTOCOL": + ci.PROTOCOL = sx[1]; + break; + case "VKID": + ci.VKID = sx[1]; + break; + } + } + if (!ci.VKID.equals("")) { + if (!ci.PROTOCOL.equals("")) { + clientInfoList.add(c.socketID, ci); + c.httpAuthed = true; + console.debug("Авторизация произошла!"); + return true; + } + } + } catch (NullPointerException e){ + return false; + } + return false; + } + + public static void main(String[] args) throws IOException{ + sessions = new Boolean[1000]; + for (int i = 0; i < sessions.length; i++) { + sessions[i] = false; + } + clientInfoList = new ArrayList<>(); + sockets = new ArrayList<>(); + try{ + new console().consoleListner(); + } + catch (IOException e){ + + } + int port = 80; + console.out("Socket Port", port+""); + ServerSocket ss = new ServerSocket(port); + try { + console.out("Server", "Waiting for a client"); + while(true) { + Socket socket = ss.accept(); + try { + for(int i = 0; ctServer.sessions.length > i; i++){ + if(ctServer.sessions[i] == null){ + ctServer.socketID = i; + ctServer.sessions[i] = true; + break; + } + if(ctServer.sessions[i] == false){ + ctServer.socketID = i; + ctServer.sessions[i] = true; + break; + } + } + new client().openSocket(socket); + } catch (IOException e) { + socket.close(); + } + } + } finally { + ss.close(); + } + } + +} \ No newline at end of file