From fb264af37b98eb292696baafdd7aabcef6f9c24b Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Thu, 25 May 2023 13:24:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/HaoYueTunnel/DesignTimeBuild/.dtbcache.v2 | Bin 122707 -> 124262 bytes ...0d6e9f1c-0ad9-4cba-8288-adecc01a5487.vsidx | Bin 0 -> 36501 bytes ...19cba2f7-6349-4434-947c-5e3eb587ed49.vsidx | Bin 0 -> 35869 bytes ...1cc7a82a-ea20-4973-bcb7-542bd88566c7.vsidx | Bin 30582 -> 0 bytes ...27599ba5-70bd-4b54-8cce-a9bca9e2f1cb.vsidx | Bin 0 -> 36202 bytes ...6fa45efc-1933-4db1-8add-8bb0c9b151c9.vsidx | Bin 34440 -> 0 bytes ...9a839e95-4e9d-43b2-b563-46a2d2493710.vsidx | Bin 0 -> 35043 bytes ...eb693277-1230-48ff-85e0-dc3966eeaa35.vsidx | Bin 31965 -> 0 bytes ...eddf0a80-e211-4d6a-a120-82145c39f49f.vsidx | Bin 31074 -> 0 bytes .vs/HaoYueTunnel/v17/.futdcache.v2 | Bin 666 -> 890 bytes .vs/HaoYueTunnel/v17/.suo | Bin 84992 -> 96768 bytes .../haoyuetunnel.metadata.v5.2 | Bin 171873 -> 176737 bytes .../haoyuetunnel.projects.v5.2 | Bin 947125 -> 1378354 bytes Client-Cli/Program.cs | 27 +- ClientCore/{StaticComm.cs => AppLogic.cs} | 15 +- ClientCore/Event/DelegateClass.cs | 15 + ClientCore/Manager/AppChat.cs | 27 + ClientCore/Manager/AppLogin.cs | 6 +- ClientCore/Manager/ClientManager.cs | 12 - ClientCore/Network/NetworkHelper.cs | 1 + Protobuf/ProtobufAuth.cs | 463 +++++++++++++++++- ProtobufCore/out/ProtobufAuth.cs | 463 +++++++++++++++++- ProtobufCore/proto/protobuf_Auth.proto | 17 + Server/Program.cs | 2 +- ServerCore/Common/Helper.cs | 26 + ServerCore/Manager/ChatManager.cs | 23 + ServerCore/Manager/ClientManager.cs | 44 +- ServerCore/Manager/LoginManager.cs | 2 +- ServerCore/Manager/ServerManager.cs | 2 + ServerCore/NetWork/IOCPNetWork.cs | 3 +- 30 files changed, 1090 insertions(+), 58 deletions(-) create mode 100644 .vs/HaoYueTunnel/FileContentIndex/0d6e9f1c-0ad9-4cba-8288-adecc01a5487.vsidx create mode 100644 .vs/HaoYueTunnel/FileContentIndex/19cba2f7-6349-4434-947c-5e3eb587ed49.vsidx delete mode 100644 .vs/HaoYueTunnel/FileContentIndex/1cc7a82a-ea20-4973-bcb7-542bd88566c7.vsidx create mode 100644 .vs/HaoYueTunnel/FileContentIndex/27599ba5-70bd-4b54-8cce-a9bca9e2f1cb.vsidx delete mode 100644 .vs/HaoYueTunnel/FileContentIndex/6fa45efc-1933-4db1-8add-8bb0c9b151c9.vsidx create mode 100644 .vs/HaoYueTunnel/FileContentIndex/9a839e95-4e9d-43b2-b563-46a2d2493710.vsidx delete mode 100644 .vs/HaoYueTunnel/FileContentIndex/eb693277-1230-48ff-85e0-dc3966eeaa35.vsidx delete mode 100644 .vs/HaoYueTunnel/FileContentIndex/eddf0a80-e211-4d6a-a120-82145c39f49f.vsidx rename ClientCore/{StaticComm.cs => AppLogic.cs} (56%) create mode 100644 ClientCore/Event/DelegateClass.cs create mode 100644 ClientCore/Manager/AppChat.cs delete mode 100644 ClientCore/Manager/ClientManager.cs create mode 100644 ServerCore/Common/Helper.cs create mode 100644 ServerCore/Manager/ChatManager.cs diff --git a/.vs/HaoYueTunnel/DesignTimeBuild/.dtbcache.v2 b/.vs/HaoYueTunnel/DesignTimeBuild/.dtbcache.v2 index 7f33bff2951eab49bffb193f89316e2aaad7f9c4..4bf14306a76d4ca4d79fabc56fe4f04ab475d59b 100644 GIT binary patch literal 124262 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 Kfl%qvopP`k!ELBGqaLb-1i|a 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 B@d*F` diff --git a/.vs/HaoYueTunnel/FileContentIndex/27599ba5-70bd-4b54-8cce-a9bca9e2f1cb.vsidx b/.vs/HaoYueTunnel/FileContentIndex/27599ba5-70bd-4b54-8cce-a9bca9e2f1cb.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..9b0ee573d86f6c5c2d333f32d071b712d42d01b0 GIT binary patch literal 36202 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 bpy&KI^p*d)%HQ4WOgFshNj?ARzMlUN7RvTk literal 0 HcmV?d00001 diff --git a/.vs/HaoYueTunnel/FileContentIndex/6fa45efc-1933-4db1-8add-8bb0c9b151c9.vsidx b/.vs/HaoYueTunnel/FileContentIndex/6fa45efc-1933-4db1-8add-8bb0c9b151c9.vsidx deleted file mode 100644 index 224949332f8fe02fd8e78308787c2c9505f67b95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34440 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 T3clvy^^aQ~RpYf!uJQi^x}zt4 diff --git a/.vs/HaoYueTunnel/FileContentIndex/9a839e95-4e9d-43b2-b563-46a2d2493710.vsidx b/.vs/HaoYueTunnel/FileContentIndex/9a839e95-4e9d-43b2-b563-46a2d2493710.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..96255602909bb0d5a566f15b7649f0d807c7319d GIT binary patch literal 35043 zcmeHw3792GRc<%*u#A8+I0FJIOtP4lsm{8!bklWjby1O-ar0*7dNU*M)-@IbG>F0s zG&6!CAOeb@ERRJ6L`C2!55+-vsDKEH8&3oQzsHEE=#x+6A)+iU@ZR}P9xAiTJ3ZaA z@agxNUuXXJEOFw*i4!LxvuE-A;K-pvhu;1?deDX6xDM0(r}yEXhweylh1IdFCClnt zosQL^=T+8~o^@quIgYjFSjw|hYPqYHt1Q>Eyuk8?mX}z*vV3j%f#nY^e`4vv3NmY` ztf97sl@(@I6j{;4ij@_IR-9Q$Xr6I%o;0ewrb7Y z2kP{JdGWwP+m^B|*S0*{@@2h>728&7TbXU;wpH48$F@D&4sF}mosQk<+ubF5 zrE9Mow^vTst84b^aeHmmUR$?MbZq6>Zf3hP+Y4cAf5~ zvvS;7b)3y*M|qC&9hEwsa=fAA#g3OaUgmg(UR3w z?n-xMsk^$;U0v@UU+Hed-Oc5$a=Y$o*PVC$X;-W6V5hq??8bR_bfQ}fy2Y?tOuOZ% zYl3dI*1f8~((O?Dm2Pikb!p|;#>#PP<#=c1cyHxIXXQk1#T~A=>56MscH)&}wlWV_ z=JCo^{nbu?)md5Xc30O!a>^8LyXSeHI++ z7Ub74S0D3&V|sQ>&yNkNW07~PoFA+7@lNM>r+<89_4s=EFsFN>(?79({6yrQh`bXc zYokkl+>Mo`jTLvp^*3~}F)TMiYa{eGV!e^7jojKOryIuYEids389?Ri;m5cUGy3$k9A^mfW#qI+4<%Zpw)>s9IIvf5l8ZZ3zL z%k(?jT+TO_i_PV7bJ=XFYI7KFhRJ4VHq&Y|t2T4BnHQUd-Ylz4v$bi|Nvm_xa!y)n zCoS)!<)5_lNh>&M4NqFhNh?3OWo_B^mhEoY$(CJg*=Eaewsg9sr(1(?YnW}NT3K7F z)2AF&PNKT8TIs75SFO*K(n^)ewUn!r8!9(aZmc||JWqLAd6Dvr@_prN<%i0Tm7giU zRK8IB+6vUkV2)Z zSXD+%*45;gniw?=)y!5i3eu9>9k?qy?kfE$+*RYQ?YL`&+v_2C%5{}TB7FX6{bM-RZkKnnSMLIB?_8O-F8)xkb+{v|Ae2jNNMB zR)Jd?cU-xXfje{ES>Vo$J5Su*z}+3XyHw>np5u8=>^Z5|-SJk(-kMJ?P`D|$o+@da zo~J!8^R(^ho~O4wtvwxhI`_2k^wJnm&b*j@S6;H=CBB!8yrl3l-^*ezOS~-gG9oK4PrX8WMd%e7)lsj^ zz0!E5iE`{Z@a$j`SzaQS@Ju5zvKDNrti=* z@SWJ-T=tdm-BsUJzBlx}nELj8?fV6GPEFfR$Ja}!-1;Q4n5KnFSTD9zucomjQ)=ERwVi9;9kp$AXGwSZx|8sh=3%Ukrp<{q zB<PzSLNCOVkuq0-^H4z&(b9a%bxbnNR`>p0YLtm9nArA{23^mP*GB-2T*Q%k2E zojN-0>s0B~!(>v==|HD}PD`B{omM*C)0FkuK<7&5Mvp8#^7W|Fg-yoc|-x+ryFbV04gy6ouE)1}sBsLNcJr7n#wD_x$_#?q#v z&5|~bHV@OLuZ@f4WqfT0+6=XcwMn$ev?;Zzw3%o#)73~ZU?mCGqu`huoQQ&rFxW_u6xc1Ork8;mQh^J+DDY`B>EMv1Hv{bl zdO-6U=$xh}&}E>>ziu!X2ZMPKP&OS4LN5r@Ak2at$}Atr6^B8b@phzxG@}|EWL}U( zL6!s=kyVhpL0$xOlq>o{p@Jd{%1%&j1!WkRVPIxKwH8!mP|bpI5{#>05(Tp;m`{RJ zR|R`sKylbBhgN53Eum!6@wC$)I{9$Rp^P4?Xs9yUduW3hdaFY(8~VY}9}fKqDyxo% zy1mY(T z6{TsEW>KM{B96*_RO+Y(qkC+;l88*bd|#hc49PGDKA%2*kk zk6b@?hcWGo{uMDcJSvTYm^Yr-FJqr-%2B*|=*?Jf;UtAh?W1<0ybft5W1Uhhivy$x zc5K?aF!5;|mN5c4k7GNIJ8`@e$D25X#V(3&oZ&c@x^cD?XY{0%l*U0!v(#xEkjO-%tE7@#Dnb!`q=gndpSdaiYsaPp}CDMKX+%&`Uy{#5+l% zlB}SFP4YO&t7K#)qbwQCk|It@dL3M%7qX;WPRbxD!(=>9X4BN_q}EbucTzh~?J~7Z z+F43F{dCDr9Y1w~)QM9kPrHU*b<&eox@D)zO>wlPz$B@fr0xtSQ`&jFAoXH8>!iM& z`W>8AakilKk*9u<`X#;ErrM*uB-JL>6Rem)mIihjIB8I(fk}f?v~tqWP{z>2P@vOz zMnOqaou);arD;~CnMt!rnpf$lpN?i}q0?fJ(u-!-H6Hdr zGr%e|acYv(q^ZeMQ>JE?n!S{YO%GZnmSdol&+^&;rJnjA$u~bQYCa>}RpgI4`rr z&Jq_@JQ-$5m?cS;ER95U|rInRBE3>RLnHgeEOqQ7{tA<&X zW>ub5MOK+?tZA;YS(Tl-Dz}z$yOY~_ZkxQbly~~MbsGP!Hz zZZCJe+%53&#vA6o%C(j24jtoi-Ou$_t_LWeI)(4Lpd(1G_wq2#W0l7`kHb99@>J(p zm}frW(w6Bf=+ z;lzcL6#OZqaLU3lg|k;2^NL=tpm$x`cvVuUQK3wsCWV^eAcm>13cpkMPT}_pU(rdu zzyW=azNQqqPsdZdQqXam&zD#YdQ|AL(5BG4#bBct6ve>cG#8XbFfN8xG4%1K7`k{7 z3F&u0yA-CHq7s@S92eodh^!*AX-g=gei3aIkyk`Mjz!V1h<%(2BOoI zX^B!oQz}!|7F6=HxX2QUH04&2l|^PKCyK(t8*1SdMMzv6D$B4ic40b&aSGEfj9(by z%!ndPR5XExmMu(xX3F=@q3nDSfx}gVLw1$tvkf8-1YC$4lMEdo#VY z&>ur802JpjQU{G8mM>P8nonV9H^?9MVyPj!sl!Y44}~eqKf; zZDVCJD(ST^8_*g?p~|W_&5bSfpKEvBq*pfMfi9( zG2PNU%rW$xMOj95j9S9SJhfu*tt2oir4JBrnZ72t%D5Bb4UHEYFEe;k4UD$vg$*D7 z^oG%We1Xuu(HbXiI{46bsuOzIz=*XmIP{+~`YNOM%pf#_!UP*;Xwg9v-wuac_ zJ)lZwsI;LN(X%o|ht{eo`n0HMg_wdkGgJ2Q22&dH&zRhp!kC$yD`tI2pW9nV+CbAL?6 z=fQYBogDQh>*eHFcXCWmjtwTqqRBBLtBEQmUOe%Vi9ebQs>v{%gk}>ehX4>7L55&{%&JjxnE9Mu_&FL_o zhVFD{Hcdv;v^z~#rrBUx#M2_1n*Ma$osQ$_xFmO{^L%D4&Fs$1QM1*J*=jml9nZD~ zv#lY0MVqN`re-sDZKl;M2xmbt3+A&(&C>BK*Rzr`NzW?!W9W=Fn-(*&*e&L(@!VB& zcRcsj=Je4-+jHHY>rK29=y75r>=V1ZjkK`)o!YH^8#whe?@<30k4rG&sra@|ax*5Cimr{DR)j~%{w3ym?d@x(LNewSEy^Z2X3 z75~`zSV&J__mpeTeD^M)d-an~@4NDl7rycjf(x|(OT*KTf8yygWanlq|1^&wS76GaSj}>T9lk?CCSR2Kty7iyu^ z{?MUkzxs0@-Z?J|6v4@&NPgk7?>=*Wqi6vNy| z#7obS4|T`8HJsh|*G%nxp?v0?;_w;2=G^6L0zv!*=htp50{q5bbmI3#bmM9x{Knr~1Me&TFG9rcTj&OUo9F>SKY(t;=m!70 z=*9&E{|R)%-nD{HB81)`;QuDw zpx;9`u3Lk!_dd4rUwA%oK-_;v;`JX9;ot9yf9HeH|2@(FkAU#!_r;$!B2WKN_(14= zK-WAX!j+-FB8J|Y4NKUdn_9thK(*gqeHs!xxL2~$Gk z$A}PqmO_sSaVm9}eVPzg8`17F!Uv+i&j}5LoqrS>h@bx?G!Xh<7XCjA{)_Ox zN{IG{(TO0j4&6cMMF{yFNe(EBQ$Au5X&lB{3 zoekkHLdbg}ZzEWn^Z;&&90>h~3vLT4k+%`&fPu&Z!66~$H4^=lZD?# z$gdOrg&^8pPwg=7@0Ip#1nX(SKOcm>?-%`Bf@t~-X@4$69G@k6K>U0*J<$Ji2qFJr z;r|FB#`j}{xGn_I?j_Rx<%F>R3ZY*q_JH8OO7PW$*!Ny5@qHJj`_~H%1pNk~ zff&y(2;D~T-z56KDDpPKk6$4^#_@JSsQel|kng`ih<@HJ{Pzg`UP9P?A0aLv+W)@L zK-m2wLa;t0d?4C=L}(!NZX^Wj$?)-T7>ZL?xKGW(F5Y=rNY0b@PV**nb1Jc_aX%AKEl5x2>uLq+4lhhyld${zw2q9OZ=ZPK=KL9!Cf}-!1&x0%7k7 zV*eVkdp-z%t`&VCex4D!jbL3bd?5OJiqIE=X!pI+u8r{H`-l(G(?xzu5cZ!b?Z2Lg zexD`&KS%lpg8xH8w-I^qeBuLNC~_d;@FKw%3%-O9c3vv<%Ls9u3$e~#DS8)z=>JvH z-%k<3zn>L5K=|=?;s2J>ywEt`3L-Z-ZPmA7#AmZ^kX}1XB&p(L#_C$>L z3(^k|{eDqsAm}dWiDB5&?3G!WzeW}$CS#Cz@os2_CoAVFLD1tKmF75aP-eqSm2 zZN#`8;^Xf%PKX?cac>cV<|P^sAn0oe(eIOl-$uyK2pj*L5-$w}1Gw=`u|2aYf@$-2?w-NLG0^zq2tQQIY zwm_JAsn|Oo#CTsO`asYx7kUvw{tA)b5=8qSr}i-MDtaI;uMvAd#PfARFG9%QC~_dq z-)|;_-Cq{GLGUevn7_9Q{WhWBPKc|GX#cCkhd=KSy>|(|oA9p0|2?7qfDjiD?cPs_ zb{`P=2MOuVp^wl5@{fWL1pOyOL;qvK2ZDd2;GYT~2>!8;#!0d z{hP>d4Wgf~h@JC6=zmr8&xIHlk`d>)I}?JwE0R+Xb}knBT!?me6Fnf}^NoaX;hP9y z=Q6>|1@A=&z55W-pF`g!{QC<&08F~hg|Po1(SNY$17X(|8VJ25q0fcz^C;tG=zmM}9!`kydZOP(u!f=+iW~_2 zL}(!Fri8GY3m*vnNN6C=Gc%!qsB?Qlw-N0gL44rVB0m>G?~$YjzaAs)9xLtIh`hZ< z_=^zj&xjm|@mwc#8!<0W5q=xt$5VxWE`;9qie4KLk7o)W2)!Q=8i;6M{b}`il_x z^s^#wBka9a_(1sk^Mv64g79xkgxxoa-P;lo?>C9xzbN=igvf&%q(30&w+h`xwEv&P z2mUG{{QNc1I~PLl*G2C_5KZ1K?G_>Yc#p_|n3vxb`qm)){XMb+{Cz^0{D9DZB=|u> z_(14gDKrp2SA+&azAE(Xff(1i*k6Q@9~VC!CVJ;WjIS?xK(s$8bQ>|QE#aRF zVb3K!=zD^`pqBPP$Ol3%LdXM>W8PEIYa`?t@!{`?5Og855xNq3LWpY-qWw(d=R$lB zd6ek25$#V4zm4$cF~mnazKam+^a-NZM(AB5{6z@Sb@YJV^@OnVRM9^d!msZWJs{dY zO=uwedL|+4{h;uH(0jJXe^~fH@Si7i8^Qk(kw0JLK=l8kLbnn9y-4`C2GQ?}#SRet z{Wn7JUn=-AkpsbhxzIq2|0jk2O2JnV!p=_#{Tf1CK=6M?=<`9?f1TKQJt0c#8>M|4 zq4!I~hy7m`{Tqb-710O6|F;Sa1pPLlfoT7BLfCtU(C-rZJ%ot+ZxiAILjQLNVdr;6 z{s%(8pAgrDAng62wEuv#ZzJR%BtHE3Fd^3UjiLvH{Nq9cL4Se}|6hgvipb9g z5uYP?96;E;6YKPBzk z2>ZLjZzK3u3BQf7ceU^rA;$A4k+%`{9xePff`3~0Kk{r9W9G9HOKTp6 zvJC;+9~wcg7Vs~as#|c|eeYRCLCWqPhLww;a@oEL+v9Pt`AeX31X6x%XIabiC*daW4l-mbdK#zH?90%_R^zg4kAG!=i zFJpV))v@PUU_Dqi_~o-@jsedHNS^810Q3~}IA90zpovvWz(G9lSY&`zxO488J=k}M zhjlpwmxEWY__M>r8GF!s9@hB|VL|7MV!DX8(4qa9;-C9D#L3EwX@qf%z~f0)7zZz$ z%Xq=^(p?lG9(glpm_MH)xNoYJ8)(a`@i6y>Eao9xa(3)_T`KTuCt-@?ylD2hg5>*N zaWd2fcz|pL(o2#2ycW2I)y0iit@V3pQ!OBKaBr>dq@R4{2?*af8=6`ryi6H6h{g!a%b^>wdYTrVm)&hP|c=@aq^) z02d<;UA+auUOnjj@iuzf`%>NHe3*agL1KaEnH*5A31+Q9@jD+JzUXHf)5Y8Sn z7bu=1cBuBA$H8;CpRx52nzl%lgR_spjG8Vv&inmx=Ug`HX~cAMZ}rIGIPVL*dg^Tg z9@O&-Q#|n;Qw=vRXY;JGKWJWlJp8);@euH+!_Lah5O@YL(@p6E#sB)pA&$L|QP%YU zl6rx$6+Ad<_;%e|Y8<9*V%77@8ByzTN%l&+PF8quIUK4G)4G6y*IE^5f#KGjYmR*r2zbCNzEwfkEBMkxvWdo`5VuYM=&1IT ztt=>M2gbn>VjfR2$DZ@0&R7mMhn+{hC}2F^{kU)-4%R;&^uEdnPVxjayV`-_9}Ec$ z@Ib~qT^c3!Kov(FJRYlOi#U1*nDFO zUDll=Rt7U)7x?|;Y6WLeIAMUx++}FnI!qANF4xejmovO?ibq|M7EH=v^u~K*YY%Al z4-(dy(@Z><41RFU=Go#|@X?Gbb%oCBvmRp5s)-!fCK@EHSBlR(4j6cKuHjdc5q#9( zjA+g!b;08xvd{aWYx%-P8xJSMp^ z)N$d6BTG16IBMI-4G#NFM-45S4VVA3bIl6neV=20DGwTbGz*r?7iURRd>8q`5#m(2 zbU%xm<2m=ir{-q(+y{@6D<%sXC%Hxaz%0~jm1Eyz6JpA*mMm?ZS@%6?HfEk49?U^y ztbo>v=WudIP0F7=-It@^3Mw~wma5YXdOR~cjW8nb6=%-}yVlHL>rI$_fg9Us(W=V( zKG&1N<>4libw7Ts2sJBeU)rjUaJ4Q97-i1Uz+m`gzJ6`y*dtXGesRh-E0pJrGi$Xs-6LUWa>%`o5vNZ(sd+Gjc;lGtAp9GrON0?ewl!w5U&#A(R z$ur35!yfSTaG~Wz(v*xvrw5Kkjz0J^L2Y0^hzGZrCb>AK7zZDJxABW}tv0Yf=k=BV zX`N;qPPFCBZly9*>Tn`{i{5+cWrY>RFPUtQThvQ(-)Ej=p38dGvd=KzI_&UNV9@m< zUeqP*VHox4i#w`U1q4myKX_1L%a}Kg#u1S9>5%(q<`OEr_wc;&drzIz#FssQ+k(6d zzj!cw8ey-RLAMS&9Ci)_Ty0{XbHrHydpsCWhnix}^Tw7hgEB81u2+1hyd09&1_Tuz z+ePeJ6F>A@kAu6!imLbDCfMkh6Rs(sISkzNPK*{!`D(5GW?1OAt^zQ1Fje+>2bLsn zN_?!XH$!yf(=DltUv=7YV4Il29xsj7Y2?6Kg{f`2YXcndX0zcJ36AN36<_BI%-7p{ zvwtk=66V=5kK^E4MT>1tv;ElD)5xQ2))B1KhYp@CmSU(1g4UYhq~7Q8#9xlt=W^JZ z%kzj8=B@P(!J$LHO=09CF%OIN>e8~Gb-Whp11WlItw9XoV0|W5Jq})K+aU38=^x7X z`{iA&eu062qrrh~UU@hVOk*Bxd0)63Jg%K^MLI(45ANOI)d#u#38+gmg2*-dVA?{D z-QahKiYFAEv{nG7mXDmg$Me$NCRSav>a7h{xLzGhsb=`_;M|`|xbyn3h%S%74IepF zA9~?hvmolPIEW-ijq4vD{pybh5Y!v<{s1}lm&2h}+2pC<;1IvHIW*fb2aL^gt*d>3 zGF#!0_#k;2xsY)<>&_vlS9cRwU|77$ zIEdT=G2mriXD3Tp!0}@#9$cS!<5Lju2HDy^Ig)43LVY%40Y934(fQ4M>3}lFx&HRR z2GB3pFwTSKEPpUAG%JcHxnA*@qo&l?yGBzd;i->D zUC|H3p7=5;7+`Y4;!c}D<>gbc?2rfSmPWV@Ey=cKcAABd_ zp*Hiu(dEg5fFo2dH3*s*)SpVA*OV5G-Zb5Mz#YO-Rr=Pfwj|AP)u+&3K}GNDrPEA?3Bt zf!GGgI|(aS@PNM#*2{p0kHOTR%P}JMl=o@Y~KC36DvqxKJ3 z(mJJ~w|ZG|UJ)hl&Jfh403&K9x%t~K-hk?L2^H?64mR30+gSaE#^#%tl14o&uD1Ms z#97QC;p*M0=&;wk=N%B#uL{T^p0Zl6@wr)Bh-vfPyIwQII&=hy&U-w+K5$VzQ2zNZ z4qL|xBwUllbphbiYx-?^gMjmt`>1Duqsw7JT$=9(e9B!^MtE#>jX)m<^N$xX>@~0T zjek5TH&bI_^xy(R=<4~!5O`0n_Zgz<(>nKd&=;O**gKdJyh3@ru-E!H1$*^;a9q%~ zUP4WrF~9W$pe<*~qEcV)p|H|=%{bea=8R;{c8I?fG?UDWq!~U>Kusbp^;;@?dUp9b z_bU_zBpW@?J`5Zj2j-HqgqI($^P4GT`xDQFtWL)!V2C(pPE$8fa_TQJ+x&~?gRP)* z{>ye=3kGfZV9mqgEaq~|2WIFsXTnx=;RY|$`fRZ% zLU6a0=Zt+y@_&TAy7P8GyTWa_tAUJ_bOr=r6SR3kxT8 zZ5evpk%sroYm%!~kk6j|i{MLhQ0J+w59+YTQ_*zJapnOYNM#>gHmCYlTp&33t_I5o zhYDWBGlO3|EY7C-eHtCN_E4S=JnC~I&lYB;o>0V3acM!b9C`mO)v?;Xp8HD(9 z0D|(t>d5vGgUh&#utR63ln(>-)Us=6aqxYH1sqe(dk!(e+4=^0U{cUWbHL#F^YE`dB-sriI)k%Xv*ToGTHOHQVXIq%M9Ln5`U*S0hJbX^1I%+&o zq}KX?z0KJK^EZ=72P-vjjf#s_=PO=!4g99l!m+68jJc{BN*u-LHm2U%gNL<1g_4b)xGdSJ(Le E0eqi#VE_OC literal 0 HcmV?d00001 diff --git a/.vs/HaoYueTunnel/FileContentIndex/eb693277-1230-48ff-85e0-dc3966eeaa35.vsidx b/.vs/HaoYueTunnel/FileContentIndex/eb693277-1230-48ff-85e0-dc3966eeaa35.vsidx deleted file mode 100644 index 29180023c78cac87127679652edc5e54f2f20e8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31965 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 delta 88 zcmeyxHj9;!Z6aebCj%6iPkbmovE>K{j6XSm@s#MB3(rkfaBljV9DN%up$}9z*^S9T R6z;z4N?t&pmhf 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 delta 8648 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 delta 235 zcmaF(gzMoxE=Jcz##Tngt&B{sycyjlAJnzpE*HaO?aIh9`5=q=bkVg;f0q^`JPGbY+dG-@WWih`&SV5s?pf>?fnV5=wy z=ulqA(G2_0v{Vqhh8AHTjDe2Mq)yX}vQAC)N3g{7kEV9+d%Fyq(?9S2?(d#^?(d#+ z?s?6>B{uHQDDxl>_DCL+hj?U<*<2h#wxU zRU-3Dih8{>DLZgT9?BoxR(K25EVkX0$-iA~ZjKGO@&0Mr8#;v|gnW~6NJxm^yPATd z1`lL@wt$*MA!&Kt;fKQlhqgR?mKs}hgB3jHh%{YcB{GV~uTa*OB0JeB8F}$+%8E`% zPF7`x$*YtnThOC0G@BJ2Qy1~+k*LcSP!v7aHiNHpqUFTT@S7Pns_=VL(Tkz{+6e80 ziO2t_p2JT?=<^|DjZZU|v9mquct7mwhaAFkVl}V2gSHmSx?MJdYsP5?_Fs_C8)-{Y zcu6Mi7#*+zMYH&0#R`fHTfZW8FE$iqnV-_qLHILH?fxLSqiD|6GCf_+0QPDoC((J4 zsyp13r1jnHUxb8&=?UrePFF=r{2oAS^oW7XfRva+5E!zh-KL0upOS7ntub0N|7xca_kYFMLD;q`ce69>YWFKN~~;k;VkOI_oCEOx;p7&erQ4=$+?PD~W`r>JkpEOBUUrArEc9 zaN`>p#1%7N+y*|N5CM7)#E1w8#fCYL&LrJRum|WTvB3O*aKCw3N$n8GDKNY8rZI(tWb<=DXSM_0mxl!ia|X3EV(A3b-cTg6e7Hy z*7X*+P$ApjL?)sl)&>LKKpA=;?psW`U6bM^mVOb~whXL-h1-1s-ePR@ zX7P^*E+f4GWy`>BrXh8?yEpMm$#Ru~)4+M9+K9L4JwJ}!`-$$uTPcH{AIG1Zl+we{ z77mSnGDh22%yM}!YpquuXuE;)eAIzT416PBcA!$f%^>1HI}H3mli7jF{P;NREjMs& zy7DsG>F2}1{v88f6Il1-L>UH^)FwHQ$H4BtXgJC=@Q!dW-DTjs3+8@4_aiuFx6U8z z1M`K3i5*!TsKUTG4l)HTHt-n-u?LRoxdKP+G5E(~?_LADBEY87z=hvPM{pHnPqGeY z_QAxC_fZa$c!Z&Kqz@rkcs`W)Ni|F4IC-_4CBl5O7-xxGm&c+A_R>b2jNx(VlN*=J zVem3xZ+W{koULz{>`nkg}i*2wKM!*p#uX> delta 37 scmdlqA!O@w%Z3)l7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~Eqq&x0SGw^(reqData); + OnChatMsg(msg.NickName, msg.ChatMsg); + } + } +} diff --git a/ClientCore/Manager/AppLogin.cs b/ClientCore/Manager/AppLogin.cs index 7e582bc..268e278 100644 --- a/ClientCore/Manager/AppLogin.cs +++ b/ClientCore/Manager/AppLogin.cs @@ -4,14 +4,14 @@ namespace ClientCore { public class AppLogin { - public void Login() + public void Login(string Account) { Protobuf_Login msg = new Protobuf_Login() { LoginType = 0, - //TODO + Account = Account, }; - StaticComm.networkHelper.SendToServer((int)CommandID.CmdLogin, NetBase.Serizlize(msg)); + App.networkHelper.SendToServer((int)CommandID.CmdLogin, NetBase.Serizlize(msg)); } } } diff --git a/ClientCore/Manager/ClientManager.cs b/ClientCore/Manager/ClientManager.cs deleted file mode 100644 index 39a7354..0000000 --- a/ClientCore/Manager/ClientManager.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace ClientCore -{ - public static class ClientManager - { - public static void Init(string IP,int port) - { - StaticComm.networkHelper = new NetworkHelper(); - StaticComm.login = new AppLogin(); - StaticComm.networkHelper.Init(IP, port); - } - } -} diff --git a/ClientCore/Network/NetworkHelper.cs b/ClientCore/Network/NetworkHelper.cs index 6aaf407..f3a7898 100644 --- a/ClientCore/Network/NetworkHelper.cs +++ b/ClientCore/Network/NetworkHelper.cs @@ -59,6 +59,7 @@ namespace ClientCore switch ((CommandID)CMDID) { case CommandID.CmdLogin: break; + case CommandID.CmdChatmsg: App.chat.RecvChatMsg(data); break; } } catch (Exception ex) diff --git a/Protobuf/ProtobufAuth.cs b/Protobuf/ProtobufAuth.cs index e369d6f..2ab2650 100644 --- a/Protobuf/ProtobufAuth.cs +++ b/Protobuf/ProtobufAuth.cs @@ -30,20 +30,25 @@ namespace AxibugProtobuf { "b2J1Zi5EZXZpY2VUeXBlEg8KB0FjY291bnQYAyABKAkSEAoIUGFzc3dvcmQY", "BCABKAkifwoTUHJvdG9idWZfTG9naW5fUkVTUBINCgVUb2tlbhgBIAEoCRIV", "Cg1MYXN0TG9naW5EYXRlGAIgASgJEg8KB1JlZ0RhdGUYAyABKAkSMQoGU3Rh", - "dHVzGAQgASgOMiEuQXhpYnVnUHJvdG9idWYuTG9naW5SZXN1bHRTdGF0dXMq", - "KwoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIOCglDTURfTE9HSU4Q0Q8q", - "KwoJRXJyb3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAEq", - "PgoJTG9naW5UeXBlEg8KC0Jhc2VEZWZhdWx0EAASDgoKSGFvWXVlQXV0aBAB", - "EgcKA0JGMxADEgcKA0JGNBAEKksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlw", - "ZV9EZWZhdWx0EAASBgoCUEMQARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoD", - "UFNWEAQqTgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0", - "dXNfQmFzZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFi", - "BnByb3RvMw==")); + "dHVzGAQgASgOMiEuQXhpYnVnUHJvdG9idWYuTG9naW5SZXN1bHRTdGF0dXMi", + "IwoQUHJvdG9idWZfQ2hhdE1zZxIPCgdDaGF0TXNnGAEgASgJIkgKFVByb3Rv", + "YnVmX0NoYXRNc2dfUkVTUBIQCghOaWNrTmFtZRgBIAEoCRIPCgdDaGF0TXNn", + "GAIgASgJEgwKBERhdGUYAyABKAMqPQoJQ29tbWFuZElEEg4KCkNNRF9ERUZB", + "VUwQABIOCglDTURfTE9HSU4Q0Q8SEAoLQ01EX0NIQVRNU0cQoR8qKwoJRXJy", + "b3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAEqPgoJTG9n", + "aW5UeXBlEg8KC0Jhc2VEZWZhdWx0EAASDgoKSGFvWXVlQXV0aBABEgcKA0JG", + "MxADEgcKA0JGNBAEKksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZh", + "dWx0EAASBgoCUEMQARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQq", + "TgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFz", + "ZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3Rv", + "Mw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login), global::AxibugProtobuf.Protobuf_Login.Parser, new[]{ "LoginType", "DeviceType", "Account", "Password" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "Token", "LastLoginDate", "RegDate", "Status" }, null, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "Token", "LastLoginDate", "RegDate", "Status" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg), global::AxibugProtobuf.Protobuf_ChatMsg.Parser, new[]{ "ChatMsg" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg_RESP), global::AxibugProtobuf.Protobuf_ChatMsg_RESP.Parser, new[]{ "NickName", "ChatMsg", "Date" }, null, null, null, null) })); } #endregion @@ -59,6 +64,10 @@ namespace AxibugProtobuf { ///登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP /// [pbr::OriginalName("CMD_LOGIN")] CmdLogin = 2001, + ///

+ ///登录上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP + /// + [pbr::OriginalName("CMD_CHATMSG")] CmdChatmsg = 4001, } public enum ErrorCode { @@ -695,6 +704,440 @@ namespace AxibugProtobuf { } + /// + ///聊天 上行 + /// + public sealed partial class Protobuf_ChatMsg : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[2]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg(Protobuf_ChatMsg other) : this() { + chatMsg_ = other.chatMsg_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg Clone() { + return new Protobuf_ChatMsg(this); + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 1; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ChatMsg != other.ChatMsg) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg other) { + if (other == null) { + return; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + } + #endif + + } + + /// + ///聊天 下行 + /// + public sealed partial class Protobuf_ChatMsg_RESP : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg_RESP()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[3]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP(Protobuf_ChatMsg_RESP other) : this() { + nickName_ = other.nickName_; + chatMsg_ = other.chatMsg_; + date_ = other.date_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP Clone() { + return new Protobuf_ChatMsg_RESP(this); + } + + /// Field number for the "NickName" field. + public const int NickNameFieldNumber = 1; + private string nickName_ = ""; + /// + ///昵称 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string NickName { + get { return nickName_; } + set { + nickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 2; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Date" field. + public const int DateFieldNumber = 3; + private long date_; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long Date { + get { return date_; } + set { + date_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg_RESP); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg_RESP other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (NickName != other.NickName) return false; + if (ChatMsg != other.ChatMsg) return false; + if (Date != other.Date) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (NickName.Length != 0) hash ^= NickName.GetHashCode(); + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (Date != 0L) hash ^= Date.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (NickName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(NickName); + } + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (Date != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Date); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg_RESP other) { + if (other == null) { + return; + } + if (other.NickName.Length != 0) { + NickName = other.NickName; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + if (other.Date != 0L) { + Date = other.Date; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + #endregion } diff --git a/ProtobufCore/out/ProtobufAuth.cs b/ProtobufCore/out/ProtobufAuth.cs index e369d6f..2ab2650 100644 --- a/ProtobufCore/out/ProtobufAuth.cs +++ b/ProtobufCore/out/ProtobufAuth.cs @@ -30,20 +30,25 @@ namespace AxibugProtobuf { "b2J1Zi5EZXZpY2VUeXBlEg8KB0FjY291bnQYAyABKAkSEAoIUGFzc3dvcmQY", "BCABKAkifwoTUHJvdG9idWZfTG9naW5fUkVTUBINCgVUb2tlbhgBIAEoCRIV", "Cg1MYXN0TG9naW5EYXRlGAIgASgJEg8KB1JlZ0RhdGUYAyABKAkSMQoGU3Rh", - "dHVzGAQgASgOMiEuQXhpYnVnUHJvdG9idWYuTG9naW5SZXN1bHRTdGF0dXMq", - "KwoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIOCglDTURfTE9HSU4Q0Q8q", - "KwoJRXJyb3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAEq", - "PgoJTG9naW5UeXBlEg8KC0Jhc2VEZWZhdWx0EAASDgoKSGFvWXVlQXV0aBAB", - "EgcKA0JGMxADEgcKA0JGNBAEKksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlw", - "ZV9EZWZhdWx0EAASBgoCUEMQARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoD", - "UFNWEAQqTgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0", - "dXNfQmFzZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFi", - "BnByb3RvMw==")); + "dHVzGAQgASgOMiEuQXhpYnVnUHJvdG9idWYuTG9naW5SZXN1bHRTdGF0dXMi", + "IwoQUHJvdG9idWZfQ2hhdE1zZxIPCgdDaGF0TXNnGAEgASgJIkgKFVByb3Rv", + "YnVmX0NoYXRNc2dfUkVTUBIQCghOaWNrTmFtZRgBIAEoCRIPCgdDaGF0TXNn", + "GAIgASgJEgwKBERhdGUYAyABKAMqPQoJQ29tbWFuZElEEg4KCkNNRF9ERUZB", + "VUwQABIOCglDTURfTE9HSU4Q0Q8SEAoLQ01EX0NIQVRNU0cQoR8qKwoJRXJy", + "b3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAEqPgoJTG9n", + "aW5UeXBlEg8KC0Jhc2VEZWZhdWx0EAASDgoKSGFvWXVlQXV0aBABEgcKA0JG", + "MxADEgcKA0JGNBAEKksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZh", + "dWx0EAASBgoCUEMQARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQq", + "TgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNfQmFz", + "ZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnByb3Rv", + "Mw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login), global::AxibugProtobuf.Protobuf_Login.Parser, new[]{ "LoginType", "DeviceType", "Account", "Password" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "Token", "LastLoginDate", "RegDate", "Status" }, null, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "Token", "LastLoginDate", "RegDate", "Status" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg), global::AxibugProtobuf.Protobuf_ChatMsg.Parser, new[]{ "ChatMsg" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_ChatMsg_RESP), global::AxibugProtobuf.Protobuf_ChatMsg_RESP.Parser, new[]{ "NickName", "ChatMsg", "Date" }, null, null, null, null) })); } #endregion @@ -59,6 +64,10 @@ namespace AxibugProtobuf { ///登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP /// [pbr::OriginalName("CMD_LOGIN")] CmdLogin = 2001, + /// + ///登录上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP + /// + [pbr::OriginalName("CMD_CHATMSG")] CmdChatmsg = 4001, } public enum ErrorCode { @@ -695,6 +704,440 @@ namespace AxibugProtobuf { } + /// + ///聊天 上行 + /// + public sealed partial class Protobuf_ChatMsg : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[2]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg(Protobuf_ChatMsg other) : this() { + chatMsg_ = other.chatMsg_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg Clone() { + return new Protobuf_ChatMsg(this); + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 1; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (ChatMsg != other.ChatMsg) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (ChatMsg.Length != 0) { + output.WriteRawTag(10); + output.WriteString(ChatMsg); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg other) { + if (other == null) { + return; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + ChatMsg = input.ReadString(); + break; + } + } + } + } + #endif + + } + + /// + ///聊天 下行 + /// + public sealed partial class Protobuf_ChatMsg_RESP : pb::IMessage + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + , pb::IBufferMessage + #endif + { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Protobuf_ChatMsg_RESP()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::AxibugProtobuf.ProtobufAuthReflection.Descriptor.MessageTypes[3]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP(Protobuf_ChatMsg_RESP other) : this() { + nickName_ = other.nickName_; + chatMsg_ = other.chatMsg_; + date_ = other.date_; + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public Protobuf_ChatMsg_RESP Clone() { + return new Protobuf_ChatMsg_RESP(this); + } + + /// Field number for the "NickName" field. + public const int NickNameFieldNumber = 1; + private string nickName_ = ""; + /// + ///昵称 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string NickName { + get { return nickName_; } + set { + nickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "ChatMsg" field. + public const int ChatMsgFieldNumber = 2; + private string chatMsg_ = ""; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ChatMsg { + get { return chatMsg_; } + set { + chatMsg_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// Field number for the "Date" field. + public const int DateFieldNumber = 3; + private long date_; + /// + ///消息 + /// + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public long Date { + get { return date_; } + set { + date_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as Protobuf_ChatMsg_RESP); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(Protobuf_ChatMsg_RESP other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (NickName != other.NickName) return false; + if (ChatMsg != other.ChatMsg) return false; + if (Date != other.Date) return false; + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (NickName.Length != 0) hash ^= NickName.GetHashCode(); + if (ChatMsg.Length != 0) hash ^= ChatMsg.GetHashCode(); + if (Date != 0L) hash ^= Date.GetHashCode(); + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + output.WriteRawMessage(this); + #else + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) { + if (NickName.Length != 0) { + output.WriteRawTag(10); + output.WriteString(NickName); + } + if (ChatMsg.Length != 0) { + output.WriteRawTag(18); + output.WriteString(ChatMsg); + } + if (Date != 0L) { + output.WriteRawTag(24); + output.WriteInt64(Date); + } + if (_unknownFields != null) { + _unknownFields.WriteTo(ref output); + } + } + #endif + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (NickName.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(NickName); + } + if (ChatMsg.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(ChatMsg); + } + if (Date != 0L) { + size += 1 + pb::CodedOutputStream.ComputeInt64Size(Date); + } + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(Protobuf_ChatMsg_RESP other) { + if (other == null) { + return; + } + if (other.NickName.Length != 0) { + NickName = other.NickName; + } + if (other.ChatMsg.Length != 0) { + ChatMsg = other.ChatMsg; + } + if (other.Date != 0L) { + Date = other.Date; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + input.ReadRawMessage(this); + #else + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + #endif + } + + #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input); + break; + case 10: { + NickName = input.ReadString(); + break; + } + case 18: { + ChatMsg = input.ReadString(); + break; + } + case 24: { + Date = input.ReadInt64(); + break; + } + } + } + } + #endif + + } + #endregion } diff --git a/ProtobufCore/proto/protobuf_Auth.proto b/ProtobufCore/proto/protobuf_Auth.proto index 4ad7b40..5298c59 100644 --- a/ProtobufCore/proto/protobuf_Auth.proto +++ b/ProtobufCore/proto/protobuf_Auth.proto @@ -7,6 +7,8 @@ enum CommandID CMD_DEFAUL = 0;//缺省不使用 CMD_LOGIN = 2001; //登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP + + CMD_CHATMSG = 4001; //登录上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP } enum ErrorCode @@ -55,4 +57,19 @@ message Protobuf_Login_RESP string LastLoginDate = 2;//上次登录时间(只用于呈现的字符串,若界面需求需要) string RegDate = 3;//注册时间(只用于呈现的字符串,若界面需求需要) LoginResultStatus Status = 4;//账号状态 (预留) [1]正常[0]被禁封 +} + + +//聊天 上行 +message Protobuf_ChatMsg +{ + string ChatMsg = 1;//消息 +} + +//聊天 下行 +message Protobuf_ChatMsg_RESP +{ + string NickName = 1;//昵称 + string ChatMsg = 2;//消息 + int64 Date = 3;//消息 } \ No newline at end of file diff --git a/Server/Program.cs b/Server/Program.cs index c344a57..ee74c9a 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -10,7 +10,7 @@ while (true) switch (Command) { case "list": - Console.WriteLine("当前在线:" + ServerManager.g_ClientMgr.ClientList.Count()); + Console.WriteLine("当前在线:" + ServerManager.g_ClientMgr.GetOnlineClient()); break; default: Console.WriteLine("未知命令" + CommandStr); diff --git a/ServerCore/Common/Helper.cs b/ServerCore/Common/Helper.cs new file mode 100644 index 0000000..2cf4cfe --- /dev/null +++ b/ServerCore/Common/Helper.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ServerCore.Common +{ + public static class Helper + { + public static long GetNowTimeStamp() + { + return GetTimeStamp(DateTime.Now); + } + + /// + /// 获取时间戳 + /// + /// + public static long GetTimeStamp(DateTime dt) + { + TimeSpan ts = dt - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalSeconds); + } + } +} diff --git a/ServerCore/Manager/ChatManager.cs b/ServerCore/Manager/ChatManager.cs new file mode 100644 index 0000000..762834d --- /dev/null +++ b/ServerCore/Manager/ChatManager.cs @@ -0,0 +1,23 @@ +using AxibugProtobuf; +using ServerCore.Common; +using System.Net.Sockets; + +namespace ServerCore +{ + public class ChatManager + { + public void RecvPlayerChatMsg(Socket sk, byte[] reqData) + { + ClientInfo _c = ServerManager.g_ClientMgr.GetClientForSocket(sk); + ServerManager.g_Log.Debug("收到新的登录请求"); + Protobuf_ChatMsg msg = NetBase.DeSerizlize(reqData); + byte[] respData = NetBase.Serizlize(new Protobuf_ChatMsg_RESP() + { + ChatMsg = msg.ChatMsg, + NickName = _c.Account, + Date = Helper.GetNowTimeStamp() + }); + ServerManager.g_ClientMgr.ClientSendALL((int)CommandID.CmdChatmsg, (int)ErrorCode.ErrorOk, respData); + } + } +} \ No newline at end of file diff --git a/ServerCore/Manager/ClientManager.cs b/ServerCore/Manager/ClientManager.cs index 1ccb9d3..7a6f31c 100644 --- a/ServerCore/Manager/ClientManager.cs +++ b/ServerCore/Manager/ClientManager.cs @@ -1,4 +1,5 @@ -using System.Net.Sockets; +using AxibugProtobuf; +using System.Net.Sockets; using System.Timers; namespace ServerCore @@ -6,6 +7,7 @@ namespace ServerCore public class ClientInfo { public long UID { get; set; } + public string Account { get; set; } public Socket _socket { get; set; } public bool IsOffline { get; set; } = false; public DateTime LogOutDT { get; set; } @@ -13,14 +15,14 @@ namespace ServerCore public class ClientManager { - public List ClientList = new List(); - public Dictionary _DictSocketClient = new Dictionary(); - public Dictionary _DictUIDClient = new Dictionary(); - public long TestUIDSeed = 0; - + private List ClientList = new List(); + private Dictionary _DictSocketClient = new Dictionary(); + private Dictionary _DictUIDClient = new Dictionary(); + private long TestUIDSeed = 0; + private System.Timers.Timer _ClientCheckTimer; private long _RemoveOfflineCacheMin; - public void Init(long ticktime,long RemoveOfflineCacheMin) + public void Init(long ticktime, long RemoveOfflineCacheMin) { //换算成毫秒 _RemoveOfflineCacheMin = RemoveOfflineCacheMin * 1000; @@ -35,7 +37,7 @@ namespace ServerCore { return ++TestUIDSeed; } - + private void ClientCheckClearOffline_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { DateTime CheckDT = DateTime.Now.AddMinutes(-1 * _RemoveOfflineCacheMin); @@ -54,7 +56,7 @@ namespace ServerCore //通用处理 #region clientlist 处理 - public ClientInfo JoinNewClient(Socket _socket) + public ClientInfo JoinNewClient(Protobuf_Login data, Socket _socket) { //也许这个函数需加lock @@ -62,7 +64,7 @@ namespace ServerCore //如果连接还在 if (cinfo != null) { - cinfo.IsOffline = true; + cinfo.IsOffline = false; } else { @@ -70,7 +72,8 @@ namespace ServerCore { UID = GetNextUID(), _socket = _socket, - IsOffline = true, + Account = data.Account, + IsOffline = false, }; AddClient(cinfo); } @@ -85,7 +88,7 @@ namespace ServerCore { try { - Console.WriteLine("追加连接玩家 UID=>" + clientInfo.UID); + Console.WriteLine("追加连接玩家 UID=>" + clientInfo.UID + " | " + clientInfo.Account); lock (ClientList) { _DictUIDClient.Add(clientInfo.UID, clientInfo); @@ -98,7 +101,7 @@ namespace ServerCore ex.ToString(); } } - + /// /// 清理连接 /// @@ -107,12 +110,12 @@ namespace ServerCore { lock (ClientList) { - if(_DictUIDClient.ContainsKey(client.UID)) + if (_DictUIDClient.ContainsKey(client.UID)) _DictUIDClient.Remove(client.UID); if (_DictSocketClient.ContainsKey(client._socket)) _DictSocketClient.Remove(client._socket); - + ClientList.Remove(client); } } @@ -142,7 +145,7 @@ namespace ServerCore if (!_DictSocketClient.ContainsKey(sk)) return; - Console.WriteLine("标记玩家UID"+ _DictSocketClient[sk].UID+ "为离线"); + Console.WriteLine("标记玩家UID" + _DictSocketClient[sk].UID + "为离线"); _DictSocketClient[sk].IsOffline = true; _DictSocketClient[sk].LogOutDT = DateTime.Now; } @@ -157,6 +160,10 @@ namespace ServerCore #endregion + public void ClientSendALL(int CMDID, int ERRCODE, byte[] data) + { + ClientSend(ClientList,CMDID, ERRCODE, data); + } /// /// 给一组用户发送数据 @@ -194,5 +201,10 @@ namespace ServerCore return; ServerManager.g_SocketMgr.SendToSocket(_c._socket, CMDID, ERRCODE, data); } + + public int GetOnlineClient() + { + return ClientList.Where(w => !w.IsOffline).Count(); + } } } diff --git a/ServerCore/Manager/LoginManager.cs b/ServerCore/Manager/LoginManager.cs index da00262..2f5db16 100644 --- a/ServerCore/Manager/LoginManager.cs +++ b/ServerCore/Manager/LoginManager.cs @@ -9,7 +9,7 @@ namespace ServerCore { ServerManager.g_Log.Debug("收到新的登录请求"); Protobuf_Login msg = NetBase.DeSerizlize(reqData); - ClientInfo cinfo = ServerManager.g_ClientMgr.JoinNewClient(_socket); + ClientInfo cinfo = ServerManager.g_ClientMgr.JoinNewClient(msg,_socket); byte[] respData = NetBase.Serizlize(new Protobuf_Login_RESP() { diff --git a/ServerCore/Manager/ServerManager.cs b/ServerCore/Manager/ServerManager.cs index e2d2466..7c4bd04 100644 --- a/ServerCore/Manager/ServerManager.cs +++ b/ServerCore/Manager/ServerManager.cs @@ -7,6 +7,7 @@ namespace ServerCore public static ClientManager g_ClientMgr; public static LogManager g_Log; public static LoginManager g_Login; + public static ChatManager g_Chat; public static IOCPNetWork g_SocketMgr; public static void InitServer(int port) @@ -14,6 +15,7 @@ namespace ServerCore g_ClientMgr = new ClientManager(); g_Log = new LogManager(); g_Login = new LoginManager(); + g_Chat = new ChatManager(); g_SocketMgr = new IOCPNetWork(1024, 1024); g_SocketMgr.Init(); g_SocketMgr.Start(new IPEndPoint(IPAddress.Any.Address, port)); diff --git a/ServerCore/NetWork/IOCPNetWork.cs b/ServerCore/NetWork/IOCPNetWork.cs index 2fedb6d..f60858a 100644 --- a/ServerCore/NetWork/IOCPNetWork.cs +++ b/ServerCore/NetWork/IOCPNetWork.cs @@ -47,7 +47,8 @@ namespace ServerCore { switch ((CommandID)CMDID) { - case CommandID.CmdLogin:ServerManager.g_Login.UserLogin(sk, data); break; + case CommandID.CmdLogin: ServerManager.g_Login.UserLogin(sk, data); break; + case CommandID.CmdChatmsg: ServerManager.g_Chat.RecvPlayerChatMsg(sk, data);break; } } catch (Exception ex)