From 4a0770deb109cced03b85562bbe0977f71c9b3b5 Mon Sep 17 00:00:00 2001 From: SHM Date: Tue, 22 Apr 2025 11:42:59 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=84=B1=ED=98=84=EB=AA=A8]=20Select=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80,=20ReadUncommitted=20level=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/DLL/SystemX.Core.dll | Bin 32768 -> 32768 bytes .../DBPatch/sqlScripts/dacpac/HubX.DB.dacpac | Bin 3048 -> 3048 bytes .../HubX/HubX.Library/Http/Packet/Packet.cs | 36 +++++- .../Socket/Packet/PacketHandler.cs | 107 +++++++++++++++++- .../HubX.Library/Socket/Packet/Protocol.cs | 16 ++- .../Socket/Packet/ServerPacketManager.cs | 6 + .../Controllers/UniqueKeyController.cs | 12 ++ .../HubX.Server/Services/UniqueKeyService.cs | 45 +++++++- .../SystemX.Core/DB/DBTransaction.cs | 5 +- .../SystemX.Core/SystemX.Core/DB/EFCore.cs | 64 ----------- .../SystemX.Core/SystemX.Core.csproj | 2 + 11 files changed, 214 insertions(+), 79 deletions(-) delete mode 100644 Projects/SystemX.Core/SystemX.Core/DB/EFCore.cs diff --git a/Projects/DLL/SystemX.Core.dll b/Projects/DLL/SystemX.Core.dll index 6dd3b485c10b90c6b4ef1ec55fff7f99563b5d15..63303a1cac35705a5f9c1578987ffc7573c2f5a5 100644 GIT binary patch delta 13751 zcmb7r34B!5_5Zo|y?O7=OeV7@kgz1ILlVLkAPAKJK>w6O$8+Bu&zVjAy>3j&*nrV>6|i0&~q6i0LR6Xk$^e9GjM36W!ew-_ zE30gxQdV7ZnyPmu=@h8GnOmKLOr;ZO-s4PH>CtE1FIsGaL|IwBz}wIg!oKH02;Vg*QnhIyoX_XNNG;&POfBRho?663LoElQ=kvsNPyX7B#_eO8|dqQyddR^8=L^=@QM@(Pe-`Af;>(J?3w5fRcErb1u$ zZhphE6H79|K-V;~7ba~auSA9XE_GL-NOgw?t?P?Wn297LD-cv+ig{hnN+Y?H{ku%A znOw$Pp0Bho)h!3983}esC56Z^98x~lK}WBJ8H{{Z*#N}DAtqNs2B~5=k+f@0Idzf@)%S!{*Y^O<_LY+5 zPI~CF`Ub9*Xh3}}rmhjE9#fk-ix1Z(#WpUvTFlw!ESn7r(@AmTR62+7Fa7Gi2fSjzI(_%)=unDWl`gAi#@|7GX6C{6@-*RTb z!|66@XI879*$EyR%8z;~SDiX_%8FX06t=KU@lJ<{*{xF}hg3p5Ly>Rl;?5gv&L$$a zA}Z0u4lqmmL6p3n8C{QwW+vB&;y7lyZ6$7C=KT^Omux2V~d3i_q1hI zU+T)I{hK^-o8U6 zpCj>x%_RKb%rO#cQT9J^JQy)r@(^QTaw;p{&-NwTMAQ@Zl-W7~9ah_Mzf)%0i5oKA zA|+>c`yUfyxb2+oEeF-xeYt7M+z~0BhusLYdtLeZd7*icCOYsl6Qc~Yth)y zexu#ta7XpdtdTo@JWk0C5Cyy#0hyDzI_6g3gO{^3H0q&<)jgJ<=nKP$wR~_K$9ra5 zbVM&~FX*U@*lDxLOy0%K5AtIxyek$vpPPv#rRk273)zqW*f=@C&4zR<8$8xgdxD2X zP3oSXU&ld2JrU3Hi!*cLy)w7Qtl+s4D8@582HRr&(^$mJL)DRS8l{q-i^2^OqyY#$DNsg``01ei694#tu@@_ax-UGIy0gpW+E2{EFCM-oMzVM=msuY;t?z{9ZzTL!rM>a zt&grB$Ti#A`zg0~KY(Xn;sI{(ES=xlVAzuy2J`k7J!ml~Ek3TeMb<_=x`E4(}Ug8 z7OWF-T7&J>7OeAc!8&che$DRFZnVx1N9%C3K3eWzALx`oI!n`X% zq$3hrax16K7x5(?V!|8oCbog-KTdaU3(K3rbqqON(mHHj#1-NOj?dBctc!Ye1D7pv zOt20a^d`1*OuC*Yk^gu>)UUg@xKlwUK-iynm<^7{PnX+?M=}RGpL5YcbQ|j%bFmT* za4XQIx^xEoVTzkc?8Mk1u(aBzL*i$UC3gUL`t3y7e~e5&u8--5#pzCl5t*8TZjqQw zF?3YasPR~4LqYy%;p7P>>`Cl`lWc(Payzk`#U*_364|tVBNcQ)*R7KBx{ETO78K6z z&f7}9T+iAbCkh9ebRR|rYZYDkU+|FaQaR40$HBJ5^Ejf!&q1g50I;b%fg*vaX4N&b zbZ=%(VPTquy8aie!Vp`jCxzb&%*)gD%+);wNInffx>%v>p8@vnZ}nMzO_Y|_JO|N%n7~Z28B0ieMSw^hVnpLL$N=4V9VKrs6CAGns!B7NnntMG6}M+_yIp!9?KQ zAZ#Y0sGQsfeE_$C{V22B0e4<|QwO-<_4g8ph=COxya712IWc89ZrOSPily9iamfDTeWErm0O?uB zi6ChS+lfQ${&?|!v@v~l;`PikT`xToX~)$173_Uhr(wKYcy7G`z9nARKDXY40Kvb7 zqQl&JJ9A05&WqlGuyU?}d7Ynl7qslIyqsin9Vg3)8^Ch()KZ?d$p@KzACyC;Zz$p2p0bHjP=K>wgRU!D$>RaIYa| z#9Ut8K1#R{b9b}z*z7Qmdq<#ScZn(hVORTI2S(Q)1-C9Qv!#0&Aj z%a{XA24#{xYJPMW!_adzQB@bb_QRs;Ieo?Q#aCTg$Hp566WzkHnbWDuM0t}&Jx3GcB`lxD%1MZZpazxP}8CtppjMY9F-1cwOz zTyU|MwJW9a;y`V{qC-ND^0Mo>(b|BI&JK)peDr<%@*ke!v)mzw$7!C;u9Q;yuq5>TpFD_*Rtq7ar6suaSu6>2n`7A z(-u8uv!hpuF%|d(-AII(?kTt{$B9_0meN ztD3^yXmg+`+=G4{>6>TK3hCv?CL4uf<-r2lV3h~^&=b)D^y~_%4fLQTv1QRd^!so@ zw1mE(gJutUAjH}u(3aDk=uA0%1nfagur$y4=l?!L&Za@<$vVf|lHxTpz_k?BZ@X8b(jW_T~2Df0IYXp3gRa}U}VFF>FXhw)!Fhxi*w{?iE5N>gV)o8A*=9FNA%pd+DA{AZA1 ze&X*#ALnv~577^c_DD+KhwC$`Dl)+-puLjJOVG?%njd)(L5zyk2J&cU@btt#%*`)tq7k6eikfga>k=RuPksoRpge%v$au_tLv-CE%tgs7T>mWR zgKdbGQ;#s~0;2m@V1OQvSE3Qoz2$H6GuKJD`<-ud#$%-w3U_&kxh_UYv_bf8di5C$1c6vb!}z7( zD9!XOf;$A)1BcNlT@1WMaEIV}V3_U*_6Ft!`vJ##`U6iQ)nU5JQ1V`d zwD?>ZoCKTubI!Ff{@wiNf%zzBAn+^n zZ@X|CI=vNo*Vfd(Sai-Y;|RElEcah&<0#ls!n&pg?Ql7I**^3aLPZPKm1 zTDd<=N~Hd8c5J3)Fa%Z$MDHnwu>>;$)~%8yUDpIG|uTv4`#VVp$Xu2xSTX! zK+k7&*Xe4!ls}l|nsf-`| zy<2sqzh$`z+QaXA`*GYiIius%xCb~{Zc01^E}Z4gLonT`bC$ap!E~n{S#FqBO+{3a z<;GbdDoWE3mz6#h)2OWSFOh00rs^!$5($BulI6HhJ!oc@<39DEOS0TO`emahEy{9R z^tnz?O1hl1(2G_I_lkPZnC|qV^x-Ufmr?5^C{e;ayn+56OyUjJWmzr~zZ%@F!ntE# zMjKs@{t~^;DWfi>T(61lkKO7Fq-k01E^~u3h)xLS)*C{fws9W(0_R};;d7HS!M|Ho zP$J9C6mD{sD~#RiRM0J1u2i^#E=O14qE$gv{lyEtXFLSU6lsPx(F#9O_jLXGIvc}(HJs^xZHN=z*R8kc4-_f63$KjI9e*)N!1ng z#?cbIibDG*)r)o+*sH)I7|BI7trX5Rt)^L$0N1jbE)>qq(|B4WoLg@^EfsDJ?gXzp z<7rI?-9%a^oa=KUHI77c>1^{8>3U|f%}=6r!nvlCs7n>=+~y~NQaDT*$NCv(=P*vn z357KM755rNx8X*w=t7}up>;os-j|yYbBb7w`%gy~&%&MiQ8@8f-HsZkpDW>J&cuDm z)warAKmXsDmL71m)`oHJ;m;I~#6lqhr(Z`oH_Q^1#am-+`P(>K{x}p0nRJ%)>3gxc z7#Y&!(pO3=kBi*J8zp}?1~LAM*pVVviCv)HN?9TV+JanaFfNBS*EwTn;VQAyJi zsAbR=bjGAV;m)Y2)h0}va6{aLo8cykrvYB#<0K69;8$Iyi-A7e244$>a7$$zBREm; zJi*z5HG+$Q9$E#AV^uKj1meyEED%W%dDUw;ufjk@{bU97!^Fq_QzN3qz!2R_g~1`z zS)VdS&|2!BQ%xJ-VgeOwf8KQJr~5}|0b86oG)PxOYiWdDZ_j~baQreFquIkmy~w!+ z_Kza92k1uZ_#^bH&`;Cjx;$yVke~wy9_-ge%brrfA$KxQqEL08oDXU&B z)+0qSJhBEhBmB3hZ)lHmpSo9<=WYRgX?V9%>T_&fN^Q(hv{fH;6t3!TIQvvD?0<)V z+j8DhWg;mPNm*J%6%xxRQB>f{8PFAS=c|xgU)klY}FjmO1(IEJZ{#*1`qd}@Q z(4(QB88^^`m=`vK{4ap+8h_dNUhlWwMKfRI{toye625}^;i}d^r;Hb1$xR+re~Wz$ z?Pr=p44N#NA1p8rC}pI-(JLf@4T9g$Zeyysjw(X6=0>{SeAy_YE6h63|BQMKrCv1F znqi|NbeB0sv3895r;K+lWt(OU8JYJPmAx ze2iz0vf>jU=VypP1~1D!$`_sLIZA8d7emfZ3?qzX#zGHXSaM$vN?&*3ndD}uc@n)L zVI7pPcFDuVQTngI4$oGl!%x75A2i;OaNm${4@Z8*`22)<4DGl;Jpx$Fh4Y6NBP44ii7f9Omc$XFVTEKR%Rx zIC#5t!g45wJ_3g5GhmFq0>(w&iM|8fg}w(CQ46pa8F<`CkOQ1e0X&x6PZ8iwibL{@ zSiV4=?A}yIzqI?(d7;E^riZn~z&CwWp87OI zV}zL}>PEpWg8Kyzcz9?|2z^p$WwE5l%Ft9_k@XXJr~-YfuS)1KqHPk~Dp+i@{TRU} z!L9af^gG{nVERqp0TG=9^MS9}5mUh?!L5SZf&1(e&J}QUQY2%%Y*{1NGR@D&lBz0X^WXi zwB2;O{+dnwY&u)8d+a;V1ArRM8VJDzYP>JSJ3KV*0o@5<;q{*cSBUTwc2_UtT@fJO z&H**vA>bs#ev3b)!R0szx(B6$V0z--%$F?uwGiHeMnU%hYW!po2b}9Pw08rCNG>7+4Xh_qK&;%ZF#P_3k=Mkn|s2!o7gO1P>pkwqr^-H68 z5loz3f+9`_LGPuWYQ1_=eWd=WJi0=U)R*W3`W@ZfSZ=H~_81qLOUw_=FU=xPU(dCk zwC7IGXP&=#EUVHQW8GriX_<}uq|otGj{M=jwokLQ8qXU1Y=K7?{-K6H&s&G^sNx#p z!A3s6v?fTs(<`r&C%}%fx2%Kzm#i7THn5Y9cFooU{5w&*4DD01^{hOioo-mr77SP5 zPqTGUVm;k%GoFh&I25})=^Y-M+CIOv_WnSCpZK|biKe~BPs+1y$41_=+_(Q>SVr)T z;$V;A8^@PFx%3P9T_Bh(<5I>jS6CjyJmJ#Bd>V#ONB3?$BXdl)x_j-1@q}~ z;pb=hg>-4=qceL?eSwPf+gLuiRA5ZUcc@xz4psNyyUU!Z{~MPHP%kG6|yyW5z?!9;ph_8{L`vVDtPI_6?3b{;^(|NAu>nC zEb~uaRkvc{mF3knD{7j@k6rD_{N?Pf&3``oux@^FQc8jA=KJx&B{eG+C$Fkmk~w4Y zd7UQKC0%~$0M@rf%U`HS=p0EF8ab z#loxV7AKo8JMWJ=^Wzy^GPlq8d-K|vgW}CEUVgp`{r+1gHaGS4lqYU}px~3cC$(gH zEg7sfHD9m<|9ip&CmwFxts;$0Ui=ctWR&cIc#;Zr!=Lh~$OLZ@#UqXDAvSFlskX#M zv#Q!>t9WFF?nd2|(@NN)hrl(AD#MBl)Rv_!$LDJ|=bF3fwEZoEHI9d6tjsR6k)-1u;~ac86kR~(6x)o_Z49S%L*crQZd zU{KRHP;2g3sGIWnv@45LJ4Gtev=-GoMFfYoPqXuC;dTl>EV73oOBX2>sfpW`gN%s- zlpN56NKKRsX%~`6)0A-I2FQ^YL;?w?`CcY+vJJDW!AMMmQ&$o zI!eK898nDKw9E&~iql(p45JiP*?1z2$2cI#Ap4KhXf5N+Hii{dI*Ok&ICl<*wl(Wn z1tfv3&hSSjx%naG$tL0$!p`kRktU2RN*LT=%r9rP^t0qxmDshh=mSAP^FuS2G_9mE5&U{*T@!1J~NTJEA zIm}f!XnE9EIe2`FtOAK6G@BMk;Q;5W@UGTGN6S1s++~@ct{8!J@ZO5Ksw^|?>ZcR) zYZp}33?5NiQ#rhH_`pHK7YrLVV%X4{g@cFJ)>bSSS~+w`VwzJd1Ley zGp1*%S6(_eD@?Zv+4t%PDsKAdz-4Rqmb`uAx2WIx32X*cw4pdppW4*?*Oi^swxZRl zIrqB1>#6hc2M-IVl4@u$-m=xAtfb-c9f)^t!=b}Z+t3W7q0lXa)o@tVQUx?aVK2`0GEFup_- zE7(>#?p8}GwBk={CHyMIE>Nsi#kN+gr40ymsa9>JKdY@j8~)#O-U|dj{{Fwu=Qm`| zJ=;C^+;h*}-WxhPbVrB2vWvS?HqA2K| zyNKrI%XDRafy%1u^EWBC7`ptKiLa&rJvNP~`a&X=A9ur~?(_BAfk{J&tSs1Ja;Wv< zG_A~LJwmsXu_#DX!J;pnBpQ=%u?MP({CdFQ-COL1%B@8k1w_fVOHeIrWzUD1++-rt z(z#Q)$mHs{Si?MrvNjBRMD_xxmZz#UO@)mF+nDd!n8P+s@oZFcVdTbfk;#qaVhxL6 zDg;xmM`h8waQOwgZ5~%mL$0&18YU_a%O6py+N2gVl;l5$dNYcsAepV>GslBu8h(7t?5uLu)h!pHh=nTSWM9iBw=f8kl?qf)GEhE5 zw`X9ye3&+Jf}E?{CZexG_@3tXg|8R@#X)_FKH~Kw-xwM0LW*(o%=m~Wl_;Kr&N+S* z!x)JLa4B~&07e3X6Gjv-<-*Ke#zi3aB`z|#gl!|*VXZ2~~=5I9YU5T#r; zz8G8>UxFgH6adDTabe^x=fccg!9^x_B^PU016Ctqm5J<^0bn&%ZO{Z5Ma+}bwj9i` zb>mcYZe&%_s2fiQ(rYb3gxaoxXk-UVT83W@oUBL%1mHs?!byH*=};Mtd9`(G=wTc|t@ojSR0KxS}> zG|ZWg1;-0!nzSw)8O?D`JI9Sv#n~htU1Vne2k$=Dbt~HmZ%G%56>W)0^73sIdhLxX zdX~SXV5DnMe;zyBt1)b5VWh%Awy`_Ld@)hvr7Z#wpu1sb5O<<53`Lg;lmz+4kx=h7 zv5e@7R`A$u6dfqCHvvR_J-gRTnMo5`ZlgX~&z5-c!i5AWnjf+3`7rSro%wxs7G!y3 zs3;YvU487>F)L+ZwX(2EWwD$gFNYL&uuJ8{35rao!Cu;o0TZ5E&KQ+l%NCHONG`MG zW+rrd1>?7f;1DuBXl2*sA54sP5i6uy6~kU@9-8Psm)a{m{@l;-d1?3O$XDUQ5O%?6 zxfRyEDWWT`*X`_4q%azEwC@m9pdF4?6gfurHee}J&lV?>X3KhZ4g3u#s}3J3aE#tU zOuQ1FSYhh%JK#5w3M2!SL7l~>gqeOQVpj%(=+D=av6LYzu4 zOLwBg>VdVeeRRIVNxL#g-+(4|J07H9%N<+|a*=EVQP``oioLA8;qZp?o4%4aemqVs zd9Y$3jDTcfT&KMXSspz^=?kdC#EMTb}L zg4uEx0N3!{2(BTe zyn2VetlMk3x51VMDD(~X3Hfa8P0r)vU37fBcjXIG5@&Tm{;!#lGdZty>9J!(ZP?tc z9Glf`Xg8eWOweujFv{bo+wNtQ(^JdNo8#g3(W?9FgFne zS(P?+v7)hNMX=(FwGtfN&Id?L@C*h*g<9@|?G}t_IEtm>0hCn@*f_#+u+(<0hOJ?# z@Q#?;F|%{#O)#el6~1t+~AqI zsIS3fAUElx76WLpKw5lUaf>WX1@sy&dou{4(wV*%1KBP_5~ER+8=rr?sMwvrrivsK zhftS8k_sk+MPmcC-}N$pHCADNSGg|$gU-p$e&@Kewqy4>TYTJE`!mkk$DRFv&AXnr z_UC(Rv$tVtwXqNsXA#Z{G|yh}jQ|rsr^P35(>dvg_}20;hc4`dvzr+SIic(pAXU@# zfa7k3awD04DDn0+KaZoupde~NA+t&od#Fo1nuSLlj!VGnzy$!D_giNxCqs^w7t zPQ3p>SyeBI$2F07r*XlFH#z_6fFWPbNOGZzB1VmEsFA~I5&I`Yb~eCHiCpeh$w2n| zQ1YEU!4GC1XEvsmLQsf;bnDk?ASZ!UKDKRP{<483sx-fPV99AnFLdPx(Du7B7AL4D zK=x*e*q`in;JI!9EG9cpWRaFu+kZ0mhxwNVmblE+?N71@@wRe1h5jL6VWDnks_jPr zExP~^CKl-SrvOJ*S)*F7OVP@_XPz5r)VvJaI3B z?5TW9$v_t)6VCk%pnoF{5&*-cl4drA$}M{!kKq{bbCmuvz@68j++Hqt-aQS(F`Pg) z&8;0gM0>%EhwrnE6j?BE(*Ou--5>f9y8Vx!ZZFEGhmP`QK@Vu%e!>e+BkfrJWU#WuJQL_C+j!h#~1Q8^+0|$U>efT=r&$_Du)Wb;BAn=Lq<@Kd}Yf&PDEZ z#?v0For#t=0Q&heko|cJyj0K$X8#NX{_r;B`4h~&4c2jgg7BwA{P~W|P8K3v*St+G zJ5<)sA@~!_z5{vgFKj`#bCKiZ(`y*@QgGLBJ*`M2aE{v=)N2MzQ*+Kczp~Y2)&cHU74CUU17>UY-H;s%1STiG3R;B<%xOiWdb+C^E$+HR^r-!63X02hO+NL%b(YuuM^C^pMSpWE2o_g ze}~^l^kbBzm`}s!tZHpuaYY;9(=(pvcII6;hpwC@Px@&1Sr^X2nUZb*y))lAY_$7j zP*9?U_+E}LPWCvV5WSBtPDJ!$e6e`&Q2_^Hxd)Ps65~r4cZ%a1z?XI5gw#cwF_v+y z!QuZ-SoEmCOoZ_>LYopPDuFSJ-g85RQHwqePl{XACa_xIIRc*-xHiPnZ;FYjvD%nL zuM0je#O97UwXrY_j-6|V>FLZ9nJ|4R+MKdzv`9a)H$mr0G-=WNIM-cYz_q5>j4utk zT&zhkyovs#<1{L>*tTe2d{R74nRu&Z(GD^6YcX*zy^yr%r$ILHEHRuD3!nqd_~JFTN`dgx<@6rCY7V2O1WR9m z)S)}j8He5k97bi(G}OujC)J^*n_Bq>D2-@aWUX{x+r~pd_2vGUJoh3LY$UZ>k+@#Ev|J9EDxjg znO)8(8fi0309y3E1b-(SwOpDIVbvuWhBg|jp?ed7Xblybf#@jO8s`dcpdS|fN&@>g zm>x*iOBmbHz+^I<#b~|CK+$;pa;oR!GlI-xpoFmn?z zq8StcqZ7g=98hK;mkm$}`V(?=2A=N6f ziiLVN@=#<3o|g_1>Ph?0(HWR=Lxrkx6HE@qgFQC-X?%Tb29?qmg!)y1M@<&0TBu=k zI(0&GO>BLvfkxs1F;h2znt>zn*<`@&=h2ZFusC0+^+MIrC1jK(=n!Ht12(=SvUymm zK~AG4A(Ntd4lO0i`kg*a&+FJ9A0M38v03013C5R486FWhPc!~KfzJwj46ugg=^DWA z34B)IV}MDzpkOlKf%xfw7Y5D%>~#_OBy9r{CzXndzioPaz zugSP+F+VMwHi577)0_sQipHeo0Cr{O1D;jT1h~-Qx>o|$kQ-rqf#_Udx=fr}&D)snR=w3g>AkCh4(}cxKKKeo`ioUvrrq0HzwWQnb-(sqPy8HxOdQF~8hwu;g1p3vSGnFi`kq1K`KwJJ^@ z_|$(##ux<@9L4q46>mr&)RYkFZmNzBvJ2>!J{2zrbf-@piPhLx zYO*~4(5D&3RNT)Sc%KDziqVM6)i;Flnkc5tLUmH3zSu6N@A;IKSqSPePm>BWm)iqq z^cc3X&K{Du+Ag6}d}>Uh6;!Q9iQ9vy5fs{AXWyqAusY54RX6DbsLOn6NqUBceW9cy=JL$Ca4s5H3eQJyOls$n~ z;z3+r#V^q6<5U3q#JwJ6FN>T}OWq+07D}$@IEV-t?X9DME9S z`Hnt8v6WMg%Z9pEfTkQLr$hBLdQZ%B65hLDr)oHb#p|ds9X3vIH*d75XE7b;KlOnO5C=V_ivZwV!Fa)W2l z--Yxlo<*MuwH8N<5ACz4ppKjHWV5MQD9`9@ib~)-qq8Y4l&9H9#lDOkZKOx0u@z6V z5tzaz%y3}@^Iy?*QHEDU6A4XNF@ev+;|)bu2N}AMdLKpKMzubi`D}urXW>=gebQ>N zZ~|)Vm#q02jtf>_wFDN^nmU~6~6A49k zi3PFg`bPUVa74oH!546@)^q`?8FU?bW716yo9NSVXd^OZBaW9Faj4vgqbhGnNx%SJ zCNo|J7{+ASkVxR%%dlSHEP?J9rC1=aNnkTzfK~%$Fhv+{1yuASz=6UkrI6ZyO)m+E z24psr$t+kPoMylT-A9Mw6KDV)=GW0}bau1>?rliS#QEWOnK?8@zv#@TF|IBST}I>d zerGY&=}p1QAoy+iN~+gvVwUc(uS12a3tZYm_hR+0(^C=;&~q^K9l)2P3BYH~M*vkp z19j2<_>+K}1zwS0e0h}N5x^#0YyFs-^OO78HvunCZc|Eaz)Ggn z6H%OI^&wkfn|jOs8TPKm^mBl_qrX#?!l@KarEn&SD-&r>#MV;;ZxEd+IJ{PY!^gcT za;ltyncPpUX?Elw@Smh#H~ytxwvM8i z$K(G5{5^udhNk1}cQc;+9fT$~c|hHhPMCYtzcsr!%w*1}g2~{d;q)4b-^~J#(r%;0 zypujIxXJt$-DSRRRML%R-u#wJ-$KJmy<}`Plg7sd+s!(~;yU#$8T&Hu2N*$Pw>e9F zT=0xpFVcFER?>y>{bnV7H+9gsPhV<$U~ZNM9+L(}NCS_F{Sl%$LNs^CknNCL#8%~g zWHtnL$hm)qjP4T{i1WbVi^UEZ;~jFn=mP(ez!U1b>BZplrDTl3Q}hY-sM8!cK<8$z z1D~%TD zbh_wI7yVh_=Oc?0oBVs42DmP)l|h`S;kQf;kB*NXHu@aIQ1DUQLzV(ww#Zw3GR zk=?@IEBw8}KP>nWv1#fJG%`}Axo(+WOMeXy*UMe>V7TTUOw;0{h!+XoBzTjkE)l## z_?^%{5L_#qO~UCCyh}767JRqP(rh zC@F(IRR()%8XU|r;gktygmCJGQ!kt*!J7o{5WLfeY+;k&T|Q*a9>!g3k5o7;f+Id; zF`3+aslaIh7YXbTxJlq{flr$os5)|3a0*B*fzt%m2R6{h;Re9!$Rgo138zDFcefOW z1s)0TK#(Qqr9Sr5R`F5&D3XGeIqaP|nNKFD^O1a=DS z3T_}B*(3N77ep-b2H?lxGMiQF1$GMT5_m-58-NFb^&!?-6k5(k1@8=Ppn;J+f*%p6 z!s2?Eb?OCg64)iM43iYu7U_o5^^ploGzqIy;3g65iLj4H00%}W%9CwTlq>9Jm_KE5 znfr-K>e>2Qy-n}Z0i)PB&zNH@Hm)_+8IK!(Hr_Xm8AHu-^9=J`^AG0W!0!VlR>UBV zvSA!#BRIxJ0Smmh2c{V!>W$cdRf!njX6*p3Ocw&46=eK!&G>)}<1R~2p^GghwmS?x z)xCNk@a71sUMKKpsUg6B4VeFQ@<4YGJWzOk!F~+IQCVT34FNBMFA9$mBEW~^i7p?s z@GBlXUM&DV3Q*H%9I6!-WBg8u#$b8HjR6q18Z6)ZNG=0>EPkb^;93#zY8<~6j@<)* zkEasg6I>MhqwB$d)8K%{NxTg33^eM{c9?Z&2Mnh012S%6ml%H5+P_zC_=skLVBdRO6e*L&i%+yLr3WYX$?81NDK8f%^iF23*rh zTBX(n)+N?=tVb=ggD(>OKlQl#;qUn8MQbCjB7F7ed#^+EJF6Kt8BY%v9{IdxEtYC0 z*R8=t0$rQe6Sjpg9=v#}^eq37l4VYJEq)a0Vm`)=DxHM_> z+4wCNBjvPC7?t!ZjVIbj9;Or6n_t5{FM($aToO%^(!}oP=`Hu`T}|uq@0>RBl07s{ zzf4!*rPX9(4!(8jA)Fp};=9jWpb~*Ov@+1CPE{M!cHqAWY*Se)O{c1-z}u!)STCpt zt!?Tl@E*i7k}Rg?YD|IEn3}7*FFUEitNr(M%sQJ)K#GtQjel7I2c((YfJxnCP|Vd1`6IhCI} z`~2>0v(HrB);aeZ-FwgP(ZRV5XH0Kdu`2(-oYKRIbcKkWtxO}|Y*zGRIf5&LFGs%vv z%IWCDA|Pmrg4MWIC5GTvL&|9kl~Ts(_?k-LG^U)Hmgr~}&9otSLdTuev7j}CoMvaW zPA(flcB$4WN~Bacs4~ucJ%olRsCr0H>Vx4KIz6Qf%bBPxOIvn0d_teA&Q(Lm@(RBi z`PGnOtUEXV(AC$ehJ0oPUJrJky`omRcPTsBai23Y+3}#$1oXjVM_00Ai_?S?kMx7Z zFp3`8+_hxKUFaG+gPP%Lt-0fgAu1f!9uM6tRZiz^s1_(C7!2ZP2QWTUs4W7!gx3XL zbE#5JQzmHHh^QDq$qqF-O)=jCkHf+H8poXn;4Vg@ev?3*#z8^bPEm512!V9m$AMtv zC8vpll3%&9=*t^T%jq~^l^V*nZ3}Hf%!Si=S0D`H70mMF)rOV4I+;+0w1|P~I1q=u zppY1CzX=H~2g8eXiVA#xQb>Tg`J*e#+y{9SQ6m%Sf}1fk%uw zg;yvXJsZm^LI>5YDy3o)!aieIIpakM74QRcko|*~on5fq7o~$7B@8ZF40(eE%sC#g zgMGF*9tSZdPUjXpDbsyD?%V=f$k~+gdyUfby06zN+1FdiLGFP4gQ*MM-7 zUW+{OXg<+8EB~d|Az8TKXFig*n%g`AJ5I-&%4rC)d;d}aNT%fPZyh~utJ1(%vsR}F zk!T!^F6oFj_4>Nh3C;8KAGcn5QDr2d;K{X^0?ume$ea|bZTwQ!Sq(HwUNQ?8yRh`r z6PeX`9Afbdb}G5Rd^8b{>Hw!jb^iXgI!u`TZ3|U(e&VW~+3LkLb<3)oYA>I(bZOn? zOP7srTD+{fZsNE}P}z#yc)mY${oKabxU&4Tzc;<(eeMN|Icmb)-A}k9mzLbf5mv8`NThb zCfh!D&kg6Evg?JaU;p&tng50QeV^Dpz)Clk73yPmcmL!10jfLxl~43})wGyu@W5^v zP7+O2i{EBU!h6}J;9L&43}=caXt1=7CgPki37jRM$3eFa7*i9W!&n_n%3qY*t|oOS LZ~U9uSRMR--XPxu diff --git a/Projects/HubX/DBPatch/sqlScripts/dacpac/HubX.DB.dacpac b/Projects/HubX/DBPatch/sqlScripts/dacpac/HubX.DB.dacpac index 0d0791935801faba146beca0792a9c55dbf50944..f1582a0fe0c7683a082fdfdd2cfbd38a6994cf73 100644 GIT binary patch delta 651 zcmV;60(AZ87w8uZP)h>@6aWAK2msbxu?+D90@hr!{{({p0@hrUga+sc)?Aia|7D>6 zlXM3^f1Th5m_P)K2nkYEO=qN}-8*0sD}Xb$sV4okF8WFRg_;S_rpl};Hu&Cq?m0f! z_OBm5qx+Ypw!Sf`xM*V=IncIPTZodk``GSuH4E(fe_HeJR2ve2A;JJ++jO<8=!q6bx@S*P zoS4*{sn@Vce7$H&TnF}F1jfLS&qS*!Z`JzcB&25LifWov)bK{&W^TZ3v}CjynvHCK z_^eC*Gi_LG_c%Mjw-vmFVW(Q08`kPxh2*I6efX3(2qyhUi?1`E$~ z!a4F?=zW0U0>WNoUpS!FZFw6L64!u6OkXx2%s$Gl(7i*+!*o)5d!4NiwQ@GE$H>`I zbu^3T`py~*iIG3}e`jS~tvku$mUUWEe^c|+?P^|pV&|>%tqXe$3_LPPW-G5OzfKd}t`F7v(~Y?K{Xaa3J1-G(t>eUUu2K_g05 zJLV?ZNjeXf*!7ng%$BRb&B7FuWuC6X6q&_5&r$B?OH6`%MY0r!S&-%g=fpREEP1-h z&21Ta4^pnVqlcdAqIL8IJ7ENF#LY7SrgtLw4Nyx11QY-O00;oqT$9@g+yd5Iler2t l0@hrU@CrBr)?AY+3p)tbT$Wn@WuX6)Z3{30)?AaH3rX64I#~b! delta 651 zcmV;60(AZ87w8uZP)h>@6aWAK2mr}Tu?+D90?A9W{{({p0?A90ga+sc$xD`6J$-YD zlXM3^e;x3H5Fi3ZgaoOorV}Y?_l|KAD}Xb$sV4okF8WFRg_;CtQ)N~a8+`9Q_Z**V z``3@3@#AYKpcTr`P|TxeUYp`zr?KCxT9b3*$ueg7_A5c(|no;Q{OG%B$VTAyYB zD0*NuQEttt6iV#0OGORTOQo1JZ9z#WSTo55C2SI3ubNWNh20l}A<*Y@(P+XOwR}AZsad%onxs2ocw=xk*W=b&GE(==2DU$Z z);0f`)GV<(oSowP3f{u7QzgzdYjmeV@@=byRCbEq*ax^HCu!Xol)JthBX>j8 z(JWr72dg(ELDSy<2P6pwjq?MeN7dHjZ5RU97s(SF)S_gS zYi^>QW?FS2EnA+rdI0u^2{$9`BW{5-=^9%hA)3x8_ buffer) + { + var recvData = Encoding.UTF8.GetString(buffer); + + //json으로 요청인지 확인 + bool isJsonRequest = true; + + //convert to object + var jsonObject = recvData.ToObject(); + //json 요청 아닐때 변환 + if (jsonObject == null) + { + var recvDataList = recvData.Split(","); + jsonObject = new C2S_INSERT_UniqueKey + { + Identity = recvDataList[0] + }; + isJsonRequest = false; + } + + string result = string.Empty; + //insert DB + if (jsonObject != null) + { + Request_SelectUniqueKey request = new Request_SelectUniqueKey(); + request.Identity = jsonObject.Identity; + + SystemX.Core.Communication.Http http = new(); + var res = await http.PostJsonAsync("https://127.0.0.1:9000/UniqueKey/SelectUniqueKey", request); + result = res.ToJson(); + + //json 요청이 아니면 변환 + if (isJsonRequest == false) + { + if (res != null) + result = $"{res.Identity},{res.Data1},{res.Data2},{res.Data3},{res.Data4},{res.Data5}"; + } + } + + ClientSession clientSession = session as ClientSession; + Client client = clientSession.Client; + if (client == null) + return; + + client.Session.Send(Encoding.UTF8.GetBytes(result), EnumMessageId.S2C_SELECT_UniqueKey); + } + + public static async void C2S_UPDATE_UniqueKeyHandler(PacketSession session, ArraySegment buffer) + { + var recvData = Encoding.UTF8.GetString(buffer); + + //json으로 요청인지 확인 + bool isJsonRequest = true; + + //convert to object + var jsonObject = recvData.ToObject(); + //json 요청 아닐때 변환 + if (jsonObject == null) + { + var recvDataList = recvData.Split(","); + jsonObject = new C2S_INSERT_UniqueKey + { + Identity = recvDataList[0], + Data1 = recvDataList[1], + Data2 = recvDataList[2], + Data3 = recvDataList[3], + Data4 = recvDataList[4], + Data5 = recvDataList[5], + }; + isJsonRequest = false; + } + + string result = string.Empty; + //insert DB + if (jsonObject != null) + { + Request_InsertUniqueKey request = new Request_InsertUniqueKey(); + request.Identity = jsonObject.Identity; + request.Data1 = jsonObject.Data1; + request.Data2 = jsonObject.Data2; + request.Data3 = jsonObject.Data3; + request.Data4 = jsonObject.Data4; + request.Data5 = jsonObject.Data5; + + SystemX.Core.Communication.Http http = new(); + var res = await http.PostJsonAsync("https://127.0.0.1:9000/UniqueKey/InsertUniqueKey", request); + result = res.ToJson(); + + //json 요청이 아니면 변환 + if (isJsonRequest == false) + { + if (res != null) + result = $"{res.Identity},{res.Result}"; + } + } + + ClientSession clientSession = session as ClientSession; + Client client = clientSession.Client; + if (client == null) + return; + + client.Session.Send(Encoding.UTF8.GetBytes(result), EnumMessageId.S2C_INSERT_UniqueKey); + } } } diff --git a/Projects/HubX/HubX.Library/Socket/Packet/Protocol.cs b/Projects/HubX/HubX.Library/Socket/Packet/Protocol.cs index 4c5b696..e346ba3 100644 --- a/Projects/HubX/HubX.Library/Socket/Packet/Protocol.cs +++ b/Projects/HubX/HubX.Library/Socket/Packet/Protocol.cs @@ -14,14 +14,7 @@ namespace HubX.Library.Socket.Packet { // public EnumMessageId MessageId { get; set; } } - - public class S2C : IMessage - { - // public EnumMessageId MessageId { get; set; } - - public EnumMessageResult Result { get; set; } - } - + public sealed class C2S_INSERT_UniqueKey : C2S { public string Identity { get; set; } @@ -33,7 +26,12 @@ namespace HubX.Library.Socket.Packet public string Data5 { get; set; } } - public sealed class S2C_INSERT_UniqueKey : S2C + public sealed class C2S_SELECT_UniqueKey : C2S + { + public string Identity { get; set; } + } + + public sealed class C2S_UPDATE_UniqueKey : C2S { public string Identity { get; set; } diff --git a/Projects/HubX/HubX.Library/Socket/Packet/ServerPacketManager.cs b/Projects/HubX/HubX.Library/Socket/Packet/ServerPacketManager.cs index 6617da8..18df5d5 100644 --- a/Projects/HubX/HubX.Library/Socket/Packet/ServerPacketManager.cs +++ b/Projects/HubX/HubX.Library/Socket/Packet/ServerPacketManager.cs @@ -28,6 +28,12 @@ namespace HubX.Library.Socket.Packet { _onRecv.Add((ushort)EnumMessageId.C2S_INSERT_UniqueKey, MakePacket); _handler.Add((ushort)EnumMessageId.C2S_INSERT_UniqueKey, PacketHandler.C2S_INSERT_UniqueKeyHandler); + + _onRecv.Add((ushort)EnumMessageId.C2S_SELECT_UniqueKey, MakePacket); + _handler.Add((ushort)EnumMessageId.C2S_SELECT_UniqueKey, PacketHandler.C2S_SELECT_UniqueKeyHandler); + + _onRecv.Add((ushort)EnumMessageId.C2S_UPDATE_UniqueKey, MakePacket); + _handler.Add((ushort)EnumMessageId.C2S_UPDATE_UniqueKey, PacketHandler.C2S_UPDATE_UniqueKeyHandler); } public void OnRecvPacket(PacketSession session, ArraySegment buffer) diff --git a/Projects/HubX/HubX.Server/Controllers/UniqueKeyController.cs b/Projects/HubX/HubX.Server/Controllers/UniqueKeyController.cs index fc88648..f9804af 100644 --- a/Projects/HubX/HubX.Server/Controllers/UniqueKeyController.cs +++ b/Projects/HubX/HubX.Server/Controllers/UniqueKeyController.cs @@ -27,5 +27,17 @@ namespace HubX.Server.Controllers return Results.Ok(res); } + + [HttpPost] + public async Task SelectUniqueKey(Request_SelectUniqueKey request) + { + var guid = Guid.NewGuid(); + Log4net.WriteLine($"[Requeust]({guid}) UniqueKey/SelectUniqueKey::{request.ToJson()}", LogType.CONTROLLER); + + Response_SelectUniqueKy res = await _uniqueKeyService.Request_SelectUniqueKey(request); + Log4net.WriteLine($"[Response]({guid}) UniqueKey/SelectUniqueKey::{res.ToJson()}", LogType.CONTROLLER); + + return Results.Ok(res); + } } } diff --git a/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs b/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs index 54e2002..9b6847b 100644 --- a/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs +++ b/Projects/HubX/HubX.Server/Services/UniqueKeyService.cs @@ -1,6 +1,9 @@ using DB.HubXDB; using HubX.Library.Enums; using HubX.Library.Http.Packet; +using Microsoft.EntityFrameworkCore; +using Microsoft.Identity.Client.Extensions.Msal; +using System.Data; using SystemX.Core.DB; namespace HubX.Server.Services @@ -39,10 +42,10 @@ namespace HubX.Server.Services if (context != null) { using (var transaction = await context.CreateTransactionAsync()) - { + { await context.AddAsync(storage); transactionResult = await context.CloseTransactionAsync(transaction); - } + } } //db error @@ -59,5 +62,43 @@ namespace HubX.Server.Services return response; } + + public async Task Request_SelectUniqueKey(Request_SelectUniqueKey request) + { + Response_SelectUniqueKy response = new Response_SelectUniqueKy(); + + if (request != null) + { + response.Identity = request.Identity; + + var context = _efCoreService.GetDBContext(); + if (context != null) + { + try + { + using (var transaction = await context.CreateTransactionAsync(IsolationLevel.ReadUncommitted)) + { + var data = context.TStorages.AsNoTracking().First(x=>x.CIdentity == request.Identity); + await context.CloseTransactionAsync(transaction); + if(data != null) + { + response.Data1 = data.CData1; + response.Data2 = data.CData2; + response.Data3 = data.CData3; + response.Data4 = data.CData4; + response.Data5 = data.CData5; + } + } + } + catch (Exception e) + { + Log4net.WriteLine($"Select Unique Key Transaction Error", LogType.Error); + Log4net.WriteLine(e); + } + } + } + + return response; + } } } diff --git a/Projects/SystemX.Core/SystemX.Core/DB/DBTransaction.cs b/Projects/SystemX.Core/SystemX.Core/DB/DBTransaction.cs index 90ef9b7..d2c32a6 100644 --- a/Projects/SystemX.Core/SystemX.Core/DB/DBTransaction.cs +++ b/Projects/SystemX.Core/SystemX.Core/DB/DBTransaction.cs @@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; +using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -74,9 +75,9 @@ namespace SystemX.Core.DB #endregion #region Transaction Async - public static async Task CreateTransactionAsync(this DbContext dbContext) + public static async Task CreateTransactionAsync(this DbContext dbContext, IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) { - return await dbContext.Database.BeginTransactionAsync(); + return await dbContext.Database.BeginTransactionAsync(isolationLevel); } public static async Task CloseTransactionAsync(this DbContext dbContext, IDbContextTransaction transaction) diff --git a/Projects/SystemX.Core/SystemX.Core/DB/EFCore.cs b/Projects/SystemX.Core/SystemX.Core/DB/EFCore.cs deleted file mode 100644 index 5045be6..0000000 --- a/Projects/SystemX.Core/SystemX.Core/DB/EFCore.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using SystemX.Core.Config.Model; - -namespace SystemX.Core.DB -{ - public class EFCore - { - private readonly Dictionary DicDbContext = new Dictionary(); - - public EFCore() - : base() - { - } - - #region Initialize DBContext - private void InitializeDB() where TDBContext : DbContext, new() - { - //if (dbList is not null) - //{ - // foreach (var db in dbList) - // { - // if (typeof(VpkiAccountDbContext).Name == db.DBContext) - // { - // CreateDBContext(db); - // } - // else if (typeof(VpkiDataDbContext).Name == db.DBContext) - // { - // CreateDBContext(db); - // } - // } - //} - } - - private void CreateDBContext(DataBase? dbConfig) where TDBContext : DbContext, new() - { - //var connectionString = dbConfig?.ConvertToConnectionString(); - - //var dbContext = new TDBContext(); - //dbContext.Database.SetConnectionString($"{connectionString}"); - - //if (dbContext is not null) - // DicDbContext.Add($"{dbConfig?.DBContext}_{dbConfig?.DBID}", dbContext); - } - #endregion - - public TDBContext? GetDBContext(int dbID = 1) where TDBContext : DbContext - { - TDBContext? dBContext = default; - - var dbContextType = typeof(TDBContext); - if (DicDbContext.TryGetValue($"{dbContextType.Name}_{dbID}", out var context) == true) - { - dBContext = context as TDBContext; - } - - return dBContext; - } - } -} diff --git a/Projects/SystemX.Core/SystemX.Core/SystemX.Core.csproj b/Projects/SystemX.Core/SystemX.Core/SystemX.Core.csproj index c96a53d..78d6509 100644 --- a/Projects/SystemX.Core/SystemX.Core/SystemX.Core.csproj +++ b/Projects/SystemX.Core/SystemX.Core/SystemX.Core.csproj @@ -17,7 +17,9 @@ + +