From ac32108750c8754b109445f1fe96113d9a33ca81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9C=E6=96=B9?= <3979434@qq.com> Date: Sat, 16 Apr 2022 12:29:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libs/cim-server-sdk-netty-4.2.0.jar | Bin 92647 -> 93928 bytes .../cim/coder/json/TextMessageDecoder.java | 10 ++- .../cim/coder/json/TextMessageEncoder.java | 2 +- .../cim/coder/json/TransmitBody.java | 6 +- .../cim/coder/protobuf/AppMessageDecoder.java | 5 +- .../cim/coder/protobuf/AppMessageEncoder.java | 2 +- .../cim/coder/protobuf/WebMessageDecoder.java | 6 +- .../cim/coder/protobuf/WebMessageEncoder.java | 2 +- .../farsunset/cim/constant/CIMConstant.java | 6 -- .../com/farsunset/cim/constant/DataType.java | 63 ++++++++++++++++++ .../java/com/farsunset/cim/model/Message.java | 6 +- .../java/com/farsunset/cim/model/Ping.java | 9 +-- .../com/farsunset/cim/model/ReplyBody.java | 7 +- .../farsunset/cim/model/Transportable.java | 4 +- 14 files changed, 96 insertions(+), 32 deletions(-) create mode 100644 cim-server-sdk/src/main/java/com/farsunset/cim/constant/DataType.java diff --git a/cim-boot-server/libs/cim-server-sdk-netty-4.2.0.jar b/cim-boot-server/libs/cim-server-sdk-netty-4.2.0.jar index c82ad8771e70fba9fce18cb651c6cf7c22dc4a73..00168ec9bd586598899ad71368f76f8f27ea441e 100644 GIT binary patch delta 16935 zcmZv^1z1$y*EY=15=wV>x3nPL-QC?OJyJt=jC7ZjbR*p*-4asLB`7NI48QvOeBWF! zH+!vntsQ5dwa>NBUL4FJ9Bv?>sVcz1qrgBvkrqj4w6GBtN!+Pr|>y;2~(? z;>7+R8^XI~g0NF40c=oE1Mos23cv$}j{trs#KX~~Y%xFkpGux6G$}nCh$)7!C{T_q ztl(dUG~j%70CLI34mff&crh)z9sX8(ivs%9P4@e$wS1Y%{hr()tx1BHW!qolvsUJf0v}I_xyR>Fg^hyJ zml~T+g#{XaPKks*`UchN(g`n~mX7u;GTL=EY6m1O5zv`OC zzu~YBuiI(AnE25h1T;;N!87lOK#LjONeZg6aonh|QP{-kC!T$PxjRZ>>eL;k4LhuP&JueU#3&c&Jcn znQF$I>!zKy2kB(J_+)saeuMKn1H8P#2N&DSabN|(zK*@*pdc^7kYJ)F zXS5RTU7}7>4+c=-{o(N2Xa+t`XT-KBi?@^kO%Cm>AR~|Rq~DhBoeDQXspniPR@%NH zI4}DZC3T&>>3lEm_30QdkEwcUruw|-T-G@5nhwxc9>Mtn=~b+UWLN^i4c)zSpEgTsd-V@&u74i(lJ0~7g0p1w$YqSZ1oMgUJSp%6h)Vqj^Us4spP;3*pKkSE zrSRxD7J1BE$R}Yu%gR907_teS4`|=NsM9E#nFbHw$yv%pN-;_!$VLU<8^GF) zWnpRE9hD=!`$jZ@aaHu|NF`D9=iHjRflH8zazS#0@uffT>T3A+^9mBRfNpMh6-=xX z5Y4kvl*Q9KR6M*YdJK#zoex>{EV`24#pag^i4D^ARh#NRhJVn0-Z)d4wueWx%D6nb z*Nr_-Tb{t-K?jKs0=LmBjBGK8yNJ*ch&;7$ILcsu5BNh-{x5rP)^Jwf%I3s({!7%~*E ziu;a}vzAQ4$>D=Fp|=9ol%U?`E5+^8{8-20EelhwF;|4BHGk zB6Rj_I3Ql|?mCV=Xy5esRlW5%|K->Cblw~3Ip*1B-YK0`-W*>-H3zivJ(wkA4jMs$ z*+~9@d$5X~dfjfIH_ZR`y`hs?^eJHcV$FHNYz`TGNT5jBllcve7kje71W>d!OZkgt z;g1U~`}qz(l_dfwpU^s}?+KZLWuEjN>7!5aN8}wE0+g?qLj%Pk_rfQ!XVLXj^s+1e z0o7VnoDo4$YvA3Jm-8WsC*&E0Cwz)hwbuJ{c91Al0tw7iDPpiBKs#rfzk`#8g9^47 z&Z{}L4X27|Tyh4gNLkdr{6ac;MHB``%CzOxfqOgMA;H!h+71os-%K--SV}(uzZrHn zWbEhixyY@*iA=TK<*xtwe!TVqX52^fZKyk$o~Gl3z&rM>=Xh7T@a%~VjuxXsM#Ogn z(&B^++f9}jOhA*5@2j~#D1o>gx}V3*l+t$AkchhzNHpthm@+t>M!g8}7jNrwQ1q2hL8}8+(iv98&SKCMY?< zrmKr`U-Gg$I>zEP_f~< z0gBLeAF+UMtygOn_#D^SXG;}VeN+d8$!6((V(tu1<$9uzVt1rY6JI8mt3+LJ19x2z z#UmbqOp`m4#O&-6Wmn*+rWdL|J<^)nRcym+MuIVS3+2<>2 zojj%~&Nn&KF_y(6R`vW{v6}^L79WcEZ{@Rb1Z;qu(r-BBC_<2PhhN5)ZC&!i>gFX0 z#0KSvoRDlRaVA-_6GWb zL{`+vMuLH9!-9dKhfGW2l+iDkz-MoW7jS>)vN%|N_l>frN2h%qDd#94Ng~UTrV(m| zL?WYXIKCVfHe1KjOiwmh&P`3P{B}0IM3rH~c6>4ItOP?owYsFS(No};+^bhz=aW7( z4$qW#Jbr$A*f?i9@BZ}h@y$^njQ?dV0Tu@ijyZC#Z9mKe0SnIHVN7A&+BUEUS4pln z`cNf$Poq!|x33I0JE{Ox8Ydy@_a#Ga>z%Q;X!a)29F#p3k@k#?JkB7rz*S^0#miYMFeLdXLdI;;oP0 zb5^dzJ7>HgBe5{WMk6gsKWYWOKbm?kE$0w^H%y?P-lPTc*$-r%Ap-|&YL%%?k<2e2`ru1vNqhO=Uue0BNUw)*S1#f>X z9??RT0*wT1%x{>PFNty}_{q>F)xX#z&xkgkm6_U^Y9Dlc3^Tz`A*Q>NVXngQ;LlA^( zIl+t&0DZ{g(P7(f{mPQ0!+$nZhWqo~En?)ZM66nXh-@p#70 z(YhCJ+?X=vC$<3~R-lrisjVp9g>TsI!9BvBS1ebsyh`+L5G4t!Gf+PJp4KX&T!c~H zM$J>*CQ^E}-f*~SVW)VXP0zQCImE0rn$wWBQkm^a4LB2M-g^DjBZt!K6yGw?R)_HzHI=q4*~y`l&dvnUC7kVj#EEE~ z2e@8Z@LV*`E>QD2Mo{(kj5T#4y9&?FsI#LaL76nfq84wqs8-aVkdk0(AVgE zRqQ%y&&r7WF54+^Hw07}+AFVC0^T9dJ@A?nSX@z?)qmV)-WE*TU@r7CLax3lFmHXx zG?armtw}TXYQkL89^EG;X1FW%{L!Pi&!82I-u=9z76i-)`RMu+7kHo>qO7O&?1OWS z?zlb|bsiBD_-ja}2WysX3qBJ!!ejpWlZtL0{>2olBcG6VeKX|3yYH;4JA1=R8ctL30Er z7$$U>m#YXA*gU>_uq4M%V9x1~sR;!AJ_;xjk51KUh96-vuS?Rg`t zKSi0{`gYMHGCQrWAB#=#l%t99M};dp@2-eF;4Es+Q8M5Yb(|Wxpj@(f?aNCtDi?&; zm~H&}wChC33EOYkg%vyX2aX0Nk8LAAOZC9faI;|odB=SRWH5?SZ=PeH`@IfBkW77J zA4y^_Ye|9xM@6Y3Wqv`Ds!t^&YyJKiCMI5iPl%_Fu1r9YV5F>%>z$OO0f!E1M)=cWO(nq*P36vsFZlfl)#K;{6hV2#5(m$=hOo`(RGPO3t)WmIB)2`6UuKnvgqa^2{e@(jSh|a9>d)U8@$#W$ zrJX2pp_|{(#|(RvGQ<)VCPSV*A{$Ql61K=%TFs$H5@-|F5XZo z*+7qi^KT#p4&>%hsAm=}R)uiMtc#mHkG{Bp)XBfj2l(CmY5uf5af) zc9|DF#SR2b3CGlKw>`rB?}KonCf9V^jvZt%7lSP3w9v&IEMNve2bSnOdXQKVJ~}3M zY;-u}<>*~~>g$i?A49u&b7pwoZH6JYY3T>DZs{l|^%4w4>8|BG;8rY|z$K`dYB#mTU* zS`+ERgc-jus`(3s+FVrW`YI1zGa0L17Dj_{94{1?xT5DukAZsefwrD`uvUt_?PkN@ z0{Xv|#hDK(QvTGy;nDLznU(H6a6)j}9gf46uCZN4ZRVcWVEUNwNsHq+x$4Y%n}xpE_y=y8 z(Bom&wd|@?YbD@aJ|{EV>QD}BFELv1gY5DSd4n*5!7!>aBcDsF@!&T_QJoL+ZCIx` z9@wP^gs7#jjW~XNYU@D{RrcMkDe+M3{3W+%C+%hGTv?~xX29I1pOYX*%i{NZ5gpPFm*8~R-ib(>Q-yD z=wm>V!q(jca%t6-AeOOC7dp-~lYUNIvfwl#{eBfNXT*Z*FI}jZ1D)(P027T&wi(t++@ivF8o)3U#p#P&O|yh|=FJG(>6i#YD(aq@m~G zJ%aJB&q%#VRh#iju6gk`%b`^heBg9A-plThko|pebQu_(jIU@IcKqff#zqY~&L%$7in1h6~8^VoM*o>UV!^cPT8gJXZjQNqHOho;|i$0>`;k+MEx+2jM>K>L}*(Q#zpYol@KBR}aehmN>)z#nE5GE+!&>y+(bYflhAJ0!*R~g4 zUjT>-+Ozf{f8d}JHT*!1L}eggKdSfsm_%QBA+{K9TQkS~eQ5x-^zqxs22Y&_F8xIc z%hBGpls>26aHU=mQoY25Td_=>SXx-ScsPMfya~ z@U=cfqXh3xLn!M&GGa0B+X+bQ!b~jEqL3Ft3SRfSb2^OBsdMh^I4#7ja#?%LHMil- znGxHL+o&Z44lC5$sE#XOFrshg!Kv^nR4OQMQogBEEnbM?jVM&iu~lFgTa02um6{xQ zIoB03zNGHMij5?U9`|Uo5ouFLI$Z~(%CqTVcdhS2e!;#S^fQ&wkFa(dw=-PlIQiB& zl?A=>9=4l+Cg$T+;Xqz|^2=M^8q<0akxkaNZ5I689eC{AeHhG|dSJMNBl$L=cI}0B zcg6)vjI0m0jO!iIZ=;_mfU?Lf9^Nglpz*0K`D`hAAn(?x+Nx)UrzMFunLXvu)ndbCatv(_WipB9?cHDpSZ`K8v3}Cohut zX5V;F>6{WMxO%-^n;huScz_L*|F&W~4PIlLo^J~w#j^9jIKtS43mRlU7t$S`aOtc4 z6#toH_H&(R(6sF1NbP+d!BL(b@CVS0_%Y4pk}nAF_j9DjEsmcyMmO|DhX(vB`>xq_ zpD}sVzJ5MbQ!|_vO)bQ02nD(GFNLmi9GLMncLvw^aR08XAvB;O_wwdN!r1Rd7vo80Ku|MUyOsV3`_I}858a___;t|Cxt&^E-DmhtycKSd$6pPR3%s9p4(YSd2;5Vz?& z0hZU>lnf>)zH4lsaddYZk*5vJdwrPSr7U?!1uOn-<^@f_nmd}vKmGe_12WC6Kx`he zxAlk$egOcmr3n8d1nN3{pq#RIjPc??q?hL6?8A^4zzU_bq%KmUMwI3rQyd5Vl>6PM zkQTYigzq~kQ{vvyWXelzn1*y)+I^7Qq5OD#ZsG!nr6TXuT3_P86hlAbD?~7nxqwM= z&x+haDgE-b0CdFRWKDHAz=s)jS&rH8ZtkKQRNTqS{-}p+0mM|mG#q+EL^l3C3Z#YZ zK-6txtFJhrq*CoTp~A+hBx+5dtZ%%y%mdf^Yop4-F>6tIt4(?p$9l|rZm4;E@)L*4 zzWaIt=lrnK5*{{M)2B@>&`c_LAB|ORZ4dRkWAp>F^;kj5w_=-&srN@~?k0k0QLI9y ztw!p{NWOeqeZUVVRc4s+Ci5+QZw7^5z;gGO8F{hYx;I(MN~JX0v>Haf>R;tD0t*dk zx&>Lb+eJKR^@~ z8T9D;w*IMT%#Vj#+#ShAyg8LutZDL<$AF1@SM<&w}K({0ak5M9n& zP^9lAX!Cu8>TtrnT>rFSP%kLnL=2;dU@j?S(Dgj@T3rUe-K)5lmR6y^G#;&)peD!a z5(^=ATUzV+r%QyI;}3P!y`Q%G=92nd(B7~wlKKO&eAg&Hs&;E>|6rjF72SI$)&oZ> zQvM6w2ra$0)wF{K7k``tlr$%xmphG{M*F!zHmp;>!Ud!dA@^&lf`xa5ubf!gU**)) znL<&A;Kit^Z_@0gAMR2)FS74~=ape#AXYIGLnVq7cKr;sXTJPY$^I(lE4}_J^#|_H zc!mI=65^l-DC<)St)Kl1TM_*h$w9@k1V-j@jaLp8?o6>doo=7PqU|VN6_ufCv|NTU z8r9O+7>$pX`Ks8_!KP{T_wDoz^`%%Qb3LHZog<~>MZBE@_tpV*!1KQOh25mTI7U1I z&7G`c3x&ou^Hp-(nQ(``v$28-uL1~Lk>vt_%G2*FZ)7bF(@7(>y&6kPWp{@gxoxel z8ePaw5LoRmp2gjMy`U2*QDZmmv4KYnv#b=W#tKsC@XOqFQEli>SiMx$vE6zpj)pLg ztNI!DEAeuK_UnG)uq6|!SzM-kH}W4o8>TuN4m=B{N?)tA1Uqok#m@W8r~-trey$R3G1zkk1BNw)hqRp>qu&bh?&Byz0BBf`1<|Zm>0&LQv{yHo zMFz81LN`U$Dn*UXY1UCIi;sMnkFQDnmGN#;0MpE=S$2qLV*UITvCNq{QUxfJyi)O4 z+H!Rl1&fOjU&h%LR)-E*Bt0xl9(w@#c8I99fhPP!3innYYG+;xkExOBkVKB>+4@I) zgJmP#atDwi9R`Gtpr*aRYB8#a#R_8I{#FpW*hFg+o3gt{G92BmC&7NH%pxH&{U$MR z=9c`=kcSuf!^$5K2F4cy8uDHN_1?@$0#w7i(|={W|`^v`7RLh<4f_1{o78b90UWW{A7ho zq?GGX9eu6Dcae3S@49q?Yw|I~xzP{?F{<~?kDeh&h&7t>hbeJLIY{=7Qt9DKQLe+7aQ^G^0SvpVXO)IXyfXM!x$Mjr;40(y=HQHLh(uhTr@NV>G2s? z@n!2)oGth{svfjTYjuoGaAYPkce?WnJH5{@Pbo7Uh`dNYbCSdq1SV~`d95*LXecfj zw@&XCY4~sO!o6Ms0w+pQsn;)r?&f~r>g9#R_bISxa7Z)uVSFXzzAtwXY%Y77O*WA! z(R>CrQvccahymjff-m;zqbElL&jhZek`YKt>BDTmMP*x(2b*GYjY2-NH&v?FSWU0L zQk_3*LyBw5+sYjxNgUz)9WmkJEi>GNEj5IM3Lg>`1|Ri74WN(yppuXD;KK40hLJl* zg%93zg%24!gOA#vf{)%HbK&*-=%tJH5I)V$s20smR_o1PZnP|X1t}1*b<9P@@+@Mj z@kxWqQMw*Zk^!n<@0AfKi+#0#$y-9>l5EpvX1}Hmw0m{*gDLUGop75;q$h$&q;Hr> zq&EW1AD?k{1Gv7M8kGM1EnCmhd_eTHW`QW%&lot0ou#aHursVlP_EAv<2_rB^oAEdVgA>&%k9@muxh89x z0{4xP{TjZWtb}K`-0TL|G)~Tq8D`POnjZ6p!3 zY&@I&-0v{%q^!q|rL)b}V2w{pWh+MzxsK+=K$Qo=Bi6Dp4GFQDNzU1|`IaP@!e+@Q zDJW=In~J~*{ABtCW_FfKNeOnmgUdZqc;PkbLJCQ1%Yl_fDvT&pKIZTW#gp<3BWDrp zd}fPLOFs@E&q9jQ0N1Mx9G{By*Mb=;B+=-WWwq7{HQGD&L#Ja&E>dTP->ww4>bv@A z$rMON=`2GH$&^H?DHTn RIn*`R&^k7CcA}7W61X=O59Xb!65|s~`5-EB$dJ3`5HAdbWIhTIF-{Su+M}^J*b9xo|dhyca_H@k=VEM&4M} z8acNMQ;45dWOJCOE#}~BG6$^f70t(e9e*K=*%9)?_R_UYv+4$WeR-?xe&*-ChDgAPBL`6_M8Oj+#ps9&uqdAGFGk@kep~!hD+BPF;vC~JsmB6*B9SP6DnR4TH zknP{yoM&=Q4im5D$r&n+$mp11w$>XTY6MCRYQ;vY8ry;|m=(7JmG}*Ryz^bsaSAG- zu2`i#+P zwl!AOJ=9?8N7e6#{>+{v_tmKWQUe#;qc9tRzFL3hfZOdfxK6MFl6eWnf@E+|{7 z7%`OK%7TD8NI1$v(3|4D1 zJ{CFswiFe6OnE&UkIKn-uda&t<*@l2Zxiul5be|;WJ8O9p4DcIB;IJp4O3W3^|+`n+Jvle);RClHh!z|ACWS*jRwecvVkEg{z4=N_E zb$QNtd^9ZcR+jYdI#$)eSG&Zi7--V(LZ&_Gs~ywl;`#MIz0=p{5}=ZKzyT@RDk9V! zZ06ciP>0^-gMYrIf;->fwSNmFmU&Hi#m__-Gwx zY3gt$JIrtC;9Q-yV4ic4=shq_y4pGcU-r(Z1`~iL z_n27fDz*jtw_m!XBXG36j8HH|LppPj81eW>VPlKJqq8opNsXjUH93khj)|&Y7M|aF zn{=W2IC!>wEl~uo57P8ke7{_my=BuTY~8HIC2RAxWF{U-Tf(-6hp;p2aZtmvUjxRo z93edqaW89zGLG~Ocm2sCP*0{LCsE?oGQY#-oC)n#w~t7xCH0M^PkEl%W3);*?dmKF z>5+vtmke_jlh$zLvErvBrA#vf4EjBz;IV_wdHTcEK^gLJGg>TMpA3rOqAsqY&DXN^ z^NnK&5_2!@>c=0r*fz-Ef^lmT#(r0OzdXb#DUPVI1;yc53Ls-80YlPR8D-t29%U2pVLYNJ_Zr!xF%A*q8BR=EzshzewchkUd04lU-PR2_Ly} zL$LAe`*p}@QEqpKou&GC`EAog@J4YwlK-JWbr|5Jq*hI}N906j{3uZ(P5&of)55%R z<5YjYE2`G@gmSuLhGCB$n6 z#rr>Y21w`Qmmc;%Y`?Hl^P7jw={{W+XLA`gs|VsZ-HeHXlu3q*khkHx&Q;9e6Buh% zaD|!uSp5M!m9limm1#SvUA*E|RGsv$k*-}~ey|A`?Js2HlYk1i2Vr z!@LW26BhnOcT4J2-r_|reD*U6kCHz=z2#2r;0Wh>%_gl`PKqE=qAH}t(Wo$T$yV4e z!TbV?lG42*7(=b&lSB<$>t}-{3C2_A_6<2M_NL$Ii_M~Sp~Ck1)l5I7imce)M?2o6 z6xE~eHtxiIGAY83JQ#ZX<9J%4CI!J}#~>UG%rWvGL7oukqyvfWL3EDwi5pb*QWl?n zgtTuv8N@Wx;wZpII$`KDFwWxBXUXYytW2)tFnrew>Xq=1FUxyi{-NOKXMH^B9aWex)IgpXlK(0@v-#N6W7o9xsZ50zFrITp<;pW#_8aC6H*{3=JQQ@V^nsf>nP#bjcp1GywWJgO|zRg6H*$Ugt^c( zN6)JSD#p;n?IB9SXtlJRG#9xf7wv=3hvf`S2?SgljdFJPw%+=2e1t@SF_Vt|r*0pu zYt!?9&t&%Z4}bTx8(gua(#CYyKWzMvT4=LFGL?0Y`1vbCrf#nVX(ip_ zMNa&=Qk8|o@C!O;vpLCUqFJOqEQ``DU_oXK1 zO(0owtLsb)lwHZYUJ_o?BIcI)&b9E`jE*r0aE{3gc`})~j;P8|*8(yG*LzF{*xS z-ezKP`%;I=vI_4r;4*$w>QtTnv^$Zhs)=~Nh?KA>in*PJ(vNWLQ#m5i>-7UJH~a_W zT!+@|J!Q2cn*)vi`{-)s%!!1>Y^*&eRj{1h{#J8>64xCMb|;5#8e>PB{DPr zmh#POonjO0M$R|dPh+M(AMBhm{pNY6)(^ZRo88D*bk@YBUDDd~Pfl^x7LEZsDrm}Q z+Y@%d+=2siJ6oJoxraT{cVzP-`tlj9^bl|z|T4z=Zk06P7CC(9aJ9tr;k2r z`rBX?Ivi0bT~p_%?2Nyj-a8R|>3{^m(d8g1J*MBY?Z))w)nnbgi}T0$Yu-9it` z9i*=%oFMOBQ>1Cm^($n-X&!5qEc%@v7-m|3pt_NWTyc<^}rD^GGU!+QP3rf(02v@j$)?*bq5mK&|FU-$$ z6j%JOZx&7sO;!$wF0nVHrCBw!fSUalL}d8L&g4;9giG!x*&up&*g)-B-t~a=i~dJ{ zC2LRBMZ2KY5la>!JsMdvWmB_zSDsZ44Q1F+W%EWI$oThbR7vycrDDwp9U1YabGZwo zRIPKsG0)A`_l(JsJ7DC%=ofHU{-SB_sn^3-VM%Fz*8h@6Sc!^8iBFrsL8oqh&&+Sy z9o3I+`NcPZ?~dyyA1p8N6d%YINBF&1de!k{hq-;U`#l76hf#@)=P$907cZjYbuNi2 z%XYmwDS;pCOQ)x%+CZn$<~bX6g*Cg7C%Rpy?Abb`F2T*DjW?IM@lMOibca6VK+a9DQBS~}j>ZYS{T!p)6-Lsc3yFXpBcF$eD3Yxj34w`kt6TN=- z?zyQl21or84_3}MIch6fno)&`RL1X8roXE5IADQFwARn@87dbCaK#>SDi$l9d;{J7K*G4~wx1OHn*`#Ax4u=dpo=H}% zoz7d6!jT%-Edk?{mu;ssVLf5!Zz>M#ykB*4Q763{Jdl7LuhqzQ5)S*ZP_lcvG1nkr zx)-~2iQ_;B`=a`nw7jvUSHq{erMeVY+{P14AdDLkyP0{74ZF%v_h~X|Fq+atd{s(% zc>1$@b{Y4?4uuxqsAm(;_zXR2T_X|oYfO8Xd4#Rh@z#fLX|UNdFPfI*$iEk6-|j_U zr_`Hdr^5&Wez0!N)g(=o`&-Tcw z$U>*zAZ}i3{)EE`#;Z-L zMCWd~BRbC#B3r>&Xz=wI>X8-B%hbsLcVNwdhX>r(PvRfXN`ck7p}gH7z9LeC?`&~} zsGOcfaDmIC_?K)n{K@-~v99G9Qk>!yFZ0!;oQj@RW?)ym#BPXPCRJS3_xpfo@F8Ab z;LffD$swc3dkp==Vcmw4_Y=A384CzDXxu(QSIJXlAVV7;MI!so0#;MylA zktts=ICdiI58-6d94q9UXWDD#WU0B$?TBp;_1Z0eOnGa?)D_3XdZ%$Fh5OA66Y<>+ zoZ_rlyMH7lX{m+G;S6WmP@HFJ?#&_4)NkC@OURph)cDAhv1#L{gBs(Zw%tuRj?Z?* zswPTvL{WeQ4&hgvP&C%uP-d0JCApQI>KDEaKdDu6SUH=ct$Us=QiRKEd-qYYu{e>b z-(txd)bidHWCEPOtjcTKv%hTbTa}v+@~lUn4MNJLaj<_x_@7k?4U!`ALfkhW3-TQ5 z3=Sp)$N|YywYqUw$f>Ai@Wz--n50ti&}iPi;JFPhJMvy-OW&{-!oBEy+zNe^Frgrl z2>2#b@urzr7DqPNa)0V1$73qnUkH*2B?`xp;D|%|?(1v#IeS?tPB`jl1~QpT_y)6y zaL(FAR5KRPWh!MOWDzkmLmt5PMPxn3L6A5|w*toG42g-g3K*BqDo>|dT-oP#r0YLq zWmf5WfxffO32?}-SM!~;CxYxq3Fx+4r6;|LHEdI37xbMB=8rpB7M;#DGRwp9xjJK9 z^y1A>857VO`kV|j;~YIUx4i3^)~hTO+-T;&7^E1I3nOjoHA^HqOlC)@{5xz(@e_48 z89-^q>KX!$Jxq!5RL^lLaJE^!l)JerQ8J}>2}%eH|DXk^xeILtvKNhJHlw8D%E!DR$1d91*R)}dS)f8+WFFLFy8?K4e;a0IIDiMc)H}99FRlwQo4Or_u~&MX(O?S zcmu&)3pp90akI{ux)8A7nFUR(j-a*}os!{VoVSs?0ny6jX%#tlY)i4S4Eq_!#AfF( zVX3nzp2WFS#uRf81{-R|<*HPS|F3*rcVh*`A#CvPo1fz~YMBoXNGdTry3{(DKND729rXfnHc`tU@W~q5* zCL8h(WDJ5bBzIW2cQo($f6)u~rO^S)Rmuw?Nfw>um{P^H<8|{kq9P|GVb<2=&35O8%=DyB2+kt&U73? zxahkA_7XEwfd8dMK+bBkw2=VDp-Db1ATmHUG|Q)jh8pmcE!1*K3wQ?2c5Jz41+>6H z|ES{x*h5ctw2<-v^q?7xEk3URG3c<77GMMg05cT16aWGcY;jTmXu=^w)3p#J)fK>_ z$^dQPN2(7V<3yklQ>04@GT}+`NC!Hp^mrcPlkcXgr1_wbIG8&mooNd>3``ge=<)ptCKR?oQYHj3*7)W^A%zD0E2kNq&{E=|Da z61JD4N&;h`>|o0Cs5M zQ5~QJMTjq1C_>!GKyh0GpbSM$O@J8`Q#AobP`uUz=tEIO3!n?d3N3&h6ydc2+E6sq z1{gxIT^nEwMIs%5@&7kZ6da`kU=jQ?N%X%l`v1?VgB;X(`V z^m@)m2;bg8QtzxF@fDhW_s^#|_$}LC)EBw{QfPD7bO9u=y&NfG--*CICXjJ>s|&z+ z^0D#bGW8e_24+ST2IloY4j@<@Y|8yFJ!OmIIe5wtfc96lKRmT-A(T7FFZUlN74lG% zl*Aw$u&N#a`!9AU>J~cz3{0yc3=Hp|Y=ytsh$*a=SYTOG02Z{Zqk53GvRM9)4jW9Q z55R`%*!7|Pu>MB}cGCZA7Gy!?A^}kOQ~y%BeM!M61^_gu5rF|ji3EI7su}=zo|>^6hV0xp!IxS=bkz?dT<O>ci z!(t+6Ffep~FnR8tn6YL6XgVdh+zirN+n*2_4fyLn_55*i?hk9--zl6AtStZcM*i_52gaUpA z0HA{>EC6Uv=1=e3Ai>}nBp9&&QJpC2pXPs6_upF}7#RLP_?YPb^8b4=MEF$6f4hqR z*9aH;Pa}NrZ_B@1_TSFL|25*k|JR7_zn=X2$OzfZ__Jl_r2p~>!LlzP-G^2Jy<})s z01`MI%D>c*{{VmjmbC&fJzaLka4If2$YqyD{lC+ch8q0V1`<$ft^QhARv=Db`{@4_ zB7upm0hCbpBGwR14AWnlO-=wNxW?wMJ0=&ZN#}xU*uaW502~NC-3B64;r*9Q2#(bK zd$vA^4l1ES`qh8|1H<*lsCNiK`LCavynR})@(LXW<|pa@W#Nf~x1g*@$b|VHbC?(Z z7BFBQAB$ALuWccbAMz9cS@lR@XH>umb^vm4wk>3|Aj0=hA*w1=$OHaq3t)mZcq;IN uP3-_Lo|*uCR&awj^@jYu{?|ElT`<#t+Q~mxfKh-cB!YqA(1gr7nEwYs$RWG{ delta 15735 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 { protected void encode(ChannelHandlerContext ctx, Transportable data, List out) throws JsonProcessingException { TransmitBody protocol = new TransmitBody(); - protocol.setType(data.getType()); + protocol.setType(data.getType().getValue()); protocol.setContent(getBody(data)); TextWebSocketFrame frame = new TextWebSocketFrame(OBJECT_MAPPER.writeValueAsString(protocol)); diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/json/TransmitBody.java b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/json/TransmitBody.java index 22c884a..2901cea 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/json/TransmitBody.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/json/TransmitBody.java @@ -26,15 +26,15 @@ package com.farsunset.cim.coder.json; */ class TransmitBody { - private int type; + private byte type; private String content; - public int getType() { + public byte getType() { return type; } - public void setType(int type) { + public void setType(byte type) { this.type = type; } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageDecoder.java b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageDecoder.java index 9d14087..8b2241a 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageDecoder.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageDecoder.java @@ -23,6 +23,7 @@ package com.farsunset.cim.coder.protobuf; import com.farsunset.cim.constant.CIMConstant; import com.farsunset.cim.constant.ChannelAttr; +import com.farsunset.cim.constant.DataType; import com.farsunset.cim.exception.ReadInvalidTypeException; import com.farsunset.cim.model.Pong; import com.farsunset.cim.model.SentBody; @@ -77,11 +78,11 @@ public class AppMessageDecoder extends ByteToMessageDecoder { private Object mappingMessageObject(byte[] data, byte type) throws com.google.protobuf.InvalidProtocolBufferException { - if (CIMConstant.DATA_TYPE_PONG == type) { + if (DataType.PONG.getValue() == type) { return Pong.getInstance(); } - if (CIMConstant.DATA_TYPE_SENT == type) { + if (DataType.SENT.getValue() == type) { SentBodyProto.Model bodyProto = SentBodyProto.Model.parseFrom(data); SentBody body = new SentBody(); diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageEncoder.java b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageEncoder.java index c6fe8f4..b5d2519 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageEncoder.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/AppMessageEncoder.java @@ -35,7 +35,7 @@ public class AppMessageEncoder extends MessageToByteEncoder { @Override protected void encode(final ChannelHandlerContext ctx, final Transportable data, ByteBuf out){ byte[] body = data.getBody(); - byte[] header = createHeader(data.getType(), body.length); + byte[] header = createHeader(data.getType().getValue(), body.length); out.writeBytes(header); out.writeBytes(body); } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/WebMessageDecoder.java b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/WebMessageDecoder.java index 6b0fc6f..cb9ae01 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/WebMessageDecoder.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/coder/protobuf/WebMessageDecoder.java @@ -21,8 +21,8 @@ */ package com.farsunset.cim.coder.protobuf; -import com.farsunset.cim.constant.CIMConstant; import com.farsunset.cim.constant.ChannelAttr; +import com.farsunset.cim.constant.DataType; import com.farsunset.cim.exception.ReadInvalidTypeException; import com.farsunset.cim.model.Pong; import com.farsunset.cim.model.SentBody; @@ -48,12 +48,12 @@ public class WebMessageDecoder extends MessageToMessageDecoder { byte[] body = data.getBody(); ByteBufAllocator allocator = ctx.channel().config().getAllocator(); ByteBuf buffer = allocator.buffer(body.length + 1); - buffer.writeByte(data.getType()); + buffer.writeByte(data.getType().getValue()); buffer.writeBytes(body); out.add(new BinaryWebSocketFrame(buffer)); } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java b/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java index ecb271b..a382c95 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/constant/CIMConstant.java @@ -31,12 +31,6 @@ public interface CIMConstant { */ byte DATA_HEADER_LENGTH = 3; - byte DATA_TYPE_PONG = 0; - byte DATA_TYPE_PING = 1; - byte DATA_TYPE_MESSAGE = 2; - byte DATA_TYPE_SENT = 3; - byte DATA_TYPE_REPLY = 4; - String CLIENT_CONNECT_CLOSED = "client_closed"; } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/constant/DataType.java b/cim-server-sdk/src/main/java/com/farsunset/cim/constant/DataType.java new file mode 100644 index 0000000..ae799f9 --- /dev/null +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/constant/DataType.java @@ -0,0 +1,63 @@ +/* + * Copyright 2013-2019 Xia Jun(3979434@qq.com). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *************************************************************************************** + * * + * Website : http://www.farsunset.com * + * * + *************************************************************************************** + */ +package com.farsunset.cim.constant; + +/** + * 数据类型 + */ +public enum DataType { + + /** + * 客户端发送的的心跳响应 + */ + PONG (0), + + /** + * 服务端端发送的心跳响应 + */ + PING (1), + + /** + * 服务端端发送的消息体 + */ + MESSAGE (2), + + /** + * 客户端发送的请求体 + */ + SENT (3), + + /** + * 服务端端发送的响应体 + */ + REPLY (4); + + private final byte value; + + DataType(int value) { + this.value = (byte) value; + } + + public byte getValue() { + return value; + } +} diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/model/Message.java b/cim-server-sdk/src/main/java/com/farsunset/cim/model/Message.java index 31bf07d..d686e35 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/model/Message.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/model/Message.java @@ -21,7 +21,7 @@ */ package com.farsunset.cim.model; -import com.farsunset.cim.constant.CIMConstant; +import com.farsunset.cim.constant.DataType; import com.farsunset.cim.model.proto.MessageProto; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -221,7 +221,7 @@ public class Message implements Serializable, Transportable,Cloneable { @JsonIgnore @Override - public byte getType() { - return CIMConstant.DATA_TYPE_MESSAGE; + public DataType getType() { + return DataType.MESSAGE; } } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/model/Ping.java b/cim-server-sdk/src/main/java/com/farsunset/cim/model/Ping.java index 975fe6d..09025ab 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/model/Ping.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/model/Ping.java @@ -21,7 +21,8 @@ */ package com.farsunset.cim.model; -import com.farsunset.cim.constant.CIMConstant; +import com.farsunset.cim.constant.DataType; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.io.Serializable; @@ -51,9 +52,9 @@ public class Ping implements Serializable, Transportable { return DATA.getBytes(); } + @JsonIgnore @Override - public byte getType() { - return CIMConstant.DATA_TYPE_PING; + public DataType getType() { + return DataType.PING; } - } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java b/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java index 1c0601f..cc8a6f5 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/model/ReplyBody.java @@ -21,7 +21,7 @@ */ package com.farsunset.cim.model; -import com.farsunset.cim.constant.CIMConstant; +import com.farsunset.cim.constant.DataType; import com.farsunset.cim.model.proto.ReplyBodyProto; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -145,8 +145,7 @@ public class ReplyBody implements Serializable, Transportable { @JsonIgnore @Override - public byte getType() { - return CIMConstant.DATA_TYPE_REPLY; + public DataType getType() { + return DataType.REPLY; } - } diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/model/Transportable.java b/cim-server-sdk/src/main/java/com/farsunset/cim/model/Transportable.java index 2debc9b..d39e249 100644 --- a/cim-server-sdk/src/main/java/com/farsunset/cim/model/Transportable.java +++ b/cim-server-sdk/src/main/java/com/farsunset/cim/model/Transportable.java @@ -21,6 +21,8 @@ */ package com.farsunset.cim.model; +import com.farsunset.cim.constant.DataType; + /** * 需要向另一端发送的结构体 */ @@ -35,5 +37,5 @@ public interface Transportable { * 消息类型 * @return */ - byte getType(); + DataType getType(); }