From b0197489b16432dc1deafec8d7ad46fc335f2e41 Mon Sep 17 00:00:00 2001 From: EmirHanMamak Date: Sun, 18 Jan 2026 20:22:59 +0300 Subject: [PATCH] feat(server): add packet handler registry and auth request handler --- .../Extensions/ServiceCollectionExtensions.cs | 26 ++++++++++ .../Infrastructure/Container.cs | 3 ++ .../Playvoi.Server/NetworkServer.cs | 19 +++---- .../PacketHandlers/AuthRequestHandler.cs | 14 ++++++ .../Attributes/HandlerRegisterAttribute.cs | 14 ++++++ .../Shared/Interface/IPacketHandler.cs | 8 +++ .../Shared/Registry/HandlerRegistry.cs | 47 ++++++++++++++++++ .../bin/Release/net9.0/Playvoi.Server.dll | Bin 11264 -> 14848 bytes .../bin/Release/net9.0/Playvoi.Server.exe | Bin 145408 -> 145408 bytes .../net9.0/Playvoi.Server.AssemblyInfo.cs | 2 +- .../Playvoi.Server.AssemblyInfoInputs.cache | 2 +- ...yvoi.Server.csproj.CoreCompileInputs.cache | 2 +- .../obj/Release/net9.0/Playvoi.Server.dll | Bin 11264 -> 14848 bytes .../obj/Release/net9.0/apphost.exe | Bin 145408 -> 145408 bytes .../obj/Release/net9.0/ref/Playvoi.Server.dll | Bin 7680 -> 9216 bytes .../Release/net9.0/refint/Playvoi.Server.dll | Bin 7680 -> 9216 bytes 16 files changed, 125 insertions(+), 12 deletions(-) create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Extensions/ServiceCollectionExtensions.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Attributes/HandlerRegisterAttribute.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Interface/IPacketHandler.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Registry/HandlerRegistry.cs diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Extensions/ServiceCollectionExtensions.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Extensions/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..ab86cc2 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Extensions/ServiceCollectionExtensions.cs @@ -0,0 +1,26 @@ +using System; +using System.Linq; +using System.Reflection; +using Microsoft.Extensions.DependencyInjection; +using Playvoi.Server.Shared.Attributes; +using Playvoi.Server.Shared.Interface; + +namespace Playvoi.Server.Extensions; + +public static class ServiceCollectionExtensions +{ + public static IServiceCollection AddPacketHandlers(this IServiceCollection services) + { + var handlers = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.DefinedTypes) + .Where(x => !x.IsAbstract && !x.IsInterface && !x.IsGenericTypeDefinition) + .Where(x => typeof(IPacketHandler).IsAssignableFrom(x)) + .Select(t => (type: t, attr: t.GetCustomAttribute())).Where(x => x.attr != null); + + foreach (var (type, attr) in handlers) + { + services.AddScoped(type); + } + + return services; + } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs index c1ee365..d852096 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs @@ -1,6 +1,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Playvoi.Server.Extensions; using Playvoi.Server.Shared.Registry; namespace Playvoi.Server.Infrastructure; @@ -20,5 +21,7 @@ public static class Container services.AddLogging(c => c.AddSimpleConsole()); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); + services.AddPacketHandlers(); } } \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs index af81b43..8cbd6e9 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs @@ -9,6 +9,7 @@ using LiteNetLib; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Playvoi.Server.Shared; +using Playvoi.Server.Shared.Interface; using Playvoi.Server.Shared.Registry; namespace Playvoi.Server; @@ -51,8 +52,8 @@ public class NetworkServer : INetEventListener { var packetType = (PacketType)reader.GetByte(); var packet = ResolvePacket(packetType, reader); - // var handler = ResolveHandler(packetType); - // handler.Handle(packet, peer.Id); + var handler = ResolveHandler(packetType); + handler.Handle(packet, peer.Id); reader.Recycle(); } catch (Exception ex) @@ -60,13 +61,6 @@ public class NetworkServer : INetEventListener _logger.LogError(ex, "Error processing message of XX"); } } - - // var data = Encoding.UTF8.GetString(reader.RawData); - // Console.WriteLine($"Data received from client : {data}"); - // - // var replay = "Ehm Replay"; - // var bytes = Encoding.UTF8.GetBytes(replay); - // peer.Send(bytes, DeliveryMethod.ReliableOrdered); } public void OnPeerConnected(NetPeer peer) @@ -100,6 +94,13 @@ public class NetworkServer : INetEventListener { } + public IPacketHandler ResolveHandler(PacketType packetType) + { + var registry = _serviceProvider.GetRequiredService(); + var type = registry.Handlers[packetType]; + return (IPacketHandler)_serviceProvider.GetRequiredService(type); + } + private INetPacket ResolvePacket(PacketType packetType, NetPacketReader reader) { var registery = _serviceProvider.GetRequiredService(); diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs new file mode 100644 index 0000000..99f6031 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs @@ -0,0 +1,14 @@ +using _Network.Shared; +using _Network.Shared.Interface; +using Playvoi.Server.Shared.Attributes; +using Playvoi.Server.Shared.Interface; + +namespace Playvoi.Server.PacketHandlers; +[HandlerRegister(PacketType.AuthRequest)] +public class AuthRequestHandler : IPacketHandler +{ + public void Handle(INetPacket packet, int connectionId) + { + + } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Attributes/HandlerRegisterAttribute.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Attributes/HandlerRegisterAttribute.cs new file mode 100644 index 0000000..ae0da2f --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Attributes/HandlerRegisterAttribute.cs @@ -0,0 +1,14 @@ +using System; +using _Network.Shared; + +namespace Playvoi.Server.Shared.Attributes; +[AttributeUsage(AttributeTargets.Class)] +public class HandlerRegisterAttribute : Attribute +{ + public HandlerRegisterAttribute(PacketType type) + { + PacketType = type; + } + + public PacketType PacketType { get; set ; } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Interface/IPacketHandler.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Interface/IPacketHandler.cs new file mode 100644 index 0000000..90364d5 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Interface/IPacketHandler.cs @@ -0,0 +1,8 @@ +using _Network.Shared.Interface; + +namespace Playvoi.Server.Shared.Interface; + +public interface IPacketHandler +{ + void Handle(INetPacket packet, int connectionId); +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Registry/HandlerRegistry.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Registry/HandlerRegistry.cs new file mode 100644 index 0000000..4fbc772 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Registry/HandlerRegistry.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using _Network.Shared; +using Playvoi.Server.Shared.Attributes; +using Playvoi.Server.Shared.Interface; + +namespace Playvoi.Server.Shared.Registry; + +public class HandlerRegistry +{ + private Dictionary _handlers = new Dictionary(); + + public Dictionary Handlers + { + get + { + if (_handlers.Count == 0) + { + Initialize(); + } + + return _handlers; + } + } + + private void Initialize() + { + var handlers = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.DefinedTypes) + .Where(x => !x.IsAbstract && !x.IsInterface && !x.IsGenericTypeDefinition) + .Where(x => typeof(IPacketHandler).IsAssignableFrom(x)) + .Select(t => (type: t, attr: t.GetCustomAttribute())).Where(x => x.attr != null); + ; + foreach (var (type, attr) in handlers) + { + if (!_handlers.ContainsKey(attr.PacketType)) + { + _handlers[attr.PacketType] = type; + } + else + { + throw new Exception($"Multiple handlers for {attr.PacketType}"); + } + } + } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.dll b/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.dll index 29553e4cdb0e12299631079ab963a301cc0c2d37..f1609b58dc629304cf0597ce4eaeac6bfe33b650 100644 GIT binary patch literal 14848 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 diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.exe b/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.exe index 1d048ec3c9639ac46e449589ade45e9c93981caa..925fa5e1174e8139c8692da70941abe8fef02c8d 100644 GIT binary patch delta 99 zcmZqpz|jCiEsR^3Tul9w7*ZJwfG~-{n8B36guw{NHw4ltKx_#V1<9o`m;+@&I1wmk f3{+tOluKhs2FinU7z0^`K=~vFi|vz5nR1x`^2rhw delta 99 zcmZqpz|jCiEsR^3Tul9q8B7^07%UkQ8Ipmt0Ye&)WyX-gV9t;P6g3CSqyWh@24e;j jptuoG+z?1w0AV7Kod^_51 diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfo.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfo.cs index d016575..28e1151 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfo.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Playvoi.Server")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3589ac80fa6d7b979ad9f34d2b1288abade43732")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+be00b3542e14d49b00f7373a13e89fcb423c17b8")] [assembly: System.Reflection.AssemblyProductAttribute("Playvoi.Server")] [assembly: System.Reflection.AssemblyTitleAttribute("Playvoi.Server")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfoInputs.cache b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfoInputs.cache index 64b01b6..d8af400 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfoInputs.cache +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.AssemblyInfoInputs.cache @@ -1 +1 @@ -4255e08552961883e2b970260df1fb32d18ac55b11416091dcdcb95773630632 +54014dd7ac4359d492a4b0ddbbccc8d1396884df8feab61e3beddc83d95508b9 diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.csproj.CoreCompileInputs.cache b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.csproj.CoreCompileInputs.cache index 97db4d5..f5f40b4 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.csproj.CoreCompileInputs.cache +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -3b032047bbbb0308a07922c6422b23b81574c160df35960901446a4c6151da34 +452610c42f1fac1e20e1510ff73f6e49a68de5b7968e9eef0a9411f71e75fe52 diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.dll b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.dll index 29553e4cdb0e12299631079ab963a301cc0c2d37..f1609b58dc629304cf0597ce4eaeac6bfe33b650 100644 GIT binary patch literal 14848 zcmeHOdvqJ+mA~`QNS1BcmYsLvC{AJ&J67yCPq0HA+X;p|OzgZ$T4yYc9TiFA%t$6C zkSa@|&6aI(dnoh)B~97FDNxu`dPrN^W|uy4ww$HVo*r7D&~CGZ)0U>MWqI!JelsJ< zPAKd-{cCr}nLFQoeD~h(e)qfIr;)PlJ-3iTL@MsL-XeMgPrfz^_}4)m?9jrmh3G3~ zk1u*e+WPpS!GlRVGG>{hmY$Bp^-RXhMuv@umCHnunMlu$fk@g+7_rLA;1XALe=pHi zNujQ9eHhlA>v?LRa;cRF|0v+l!aMMc;68wxy^G)>JAR`j{O2d#g&TCf6gqGtQMLG2 ze7dM3Lf_m@#Hv~E^FEhY`p6Si0Doi~(O@b4o!XIt>q0UB{IZfhv8-`83w-tp0Pw_E zUB7{eD*~@#mTkp>3EvK&q2XSMyX4x4fW#~#WkQgBr95udwGMa5wUKC32`ZX@!1(!M z-(>R9H=;zZV{#%uDnIXW1Rnc0aVDq_pIa-HC zQ*c&Oy?g}0SDPAS<$BQo0k$22XnazUqY8SPGtdQXmD@9&HUyk@(}=8?vp|eOiRQKa zXv2bIY`61-9gtO7y&egsHoYm^v(fGPAk*YJdk&DLk?MyDxz2d=iL7fjku{oPVi5;}&NORLRIOkZsUkOh-ko_&V>73WD;aHL z37C|ZswUQQu<8Bsk#guZ+kv!baun&OIV83{5A)cATtknV=qiYqs{xKyp~upeS&c`r zsMI$#c&FKGz*w4RP82!Ud=$m6R0i5K8&v@^%!$Iw=A$)JWiWM~409Zr@KhPZSF~18g>t%E4fBQZqL&P9Bw>!p*<>*%Qmz5~$4Hw8GaK@>) zqEW1wo9%57T*}Kwi*84=Nz@iZSX}Z^tO93{sA(7^(o?f{aF;xDqWx$#%2A|cGam4a zA4o2KpbTk^O(Ld$fHo|Z(i}(ebrfSoKrvF+%W>v7IgW)@DzlztoE&G4lfRh1QW>PK zC&L^^2IaF<<`R~1a-2C%j-x)8${@YH9A{2xj?bKu}FqgNnHu&zWyZO*5M|Kf$F(q@rT(VevJJ z62&TQw)ZjCq=@xa_omVmvsbVUPRvpp?_n`-yTn4^gmzRdhb6Y?Sc=)GMOvPxydd77 zM6ZHCBXqB2CQn;|`M36e)4=7MBym!4&OPI+Vy&_E*7i1}09VTt;17_>i;vERl%Y+d{Svo> zW$fXXgm1e9Wla@RULcnFN8$PJD_QabK873p{eijkSb*)mO#OinohiEyad;Jyb7`pJ zc%Xsy$e-~CX|?bBm5sDlSe#$QlE1IG&mW>Ug#43Af1sXzTDc_z&&yeJ8lz~U?m>BZ;A50M3vC5=H9Zl!KiG-6SLg(=1EH&sDt;;#yw3%10nd-K97`svF0bkY zXSTp51Xe-wM8D2p4*e>Tdn}pLeq8=2u!REK8vJNwCo-*pj-k993eNH|wnShjDjF&n zYb0e+HO)n8Gj>r4R!1>X(C>PTsuQW+R>GTw9542pLu+uh_sc7l-T8l&R|7s3V)%-G zwIb1P<@JD10WKn6umkXsvK~;*m0bpyt=tOu&B|SX-!EtAS5_-)u)Gc^Gx5nR0r)VD z1Fn}Ceoi_D_?&dBkoh9oJLpRa=1YB4Q2rT|<@8q2c2~!%U&!I-%j~(9j>@ z8Jk3`egwPM3GAlXjpY(n`UeGew(NfOr;1D;a(ICQY7clHbFs8q4eWLo>r#3!mv_0? zcBLBFy#hNcjro7BsPu0xcC9}k`RGMQQrN?K7uR{aW;p6ZY z7h5Q>y#hNc?e(8i0`!cFT_?Y;RM7qg?srzYN0!w}dd9_m9tx^ev~aP*`&qCCqgdo( zH_P+XFfDemZN7`t8N?qt*m`9!rp}`G3hWr|46RmY(@hR9aIA8JI+woS@^11=G#C4% z=qJWEmu5Lw;E{5cTqUq$G$|y1Jw=jx5q;NJr(O=p*9yEV)%n<1n0Hg)X+&uOgXqsOnkTTc68Ed81rASGkI+(qeUd7Dd(;T66WAneF5eIA!!GZ>%DB3SZoh~vOwL|j zo>Cj=3j%X;qJi!c*bTIo#=!fEi+z)hs!QmHF1ATJih=*q#qN=AR2%7>i~Wams~V-( z1?E^-MgeT|7?JRE8C47H2D+L~s>^7039p$VF7Jo*XSta!5tyT8Ic+JCTuwV&$<_3b zx}5fwNVZU-M6!iau4EV^YN4!)eFh_1L6a`F5F=`(lP-26M$|?Rx!7YE5$|>qRp4ML z(N2F69>+E((MNC^k#Iuh-Sd=azrg1cL04!9ZIxCkEW>mM%G4s-f5av!(H8+_`iszZ zyJ)jcg&xO8F;Bh$JG+D$;6X>fL{|&>^}KPD>|^M7SV}*P9aSQR&V}3++KSMl&o0nC z3ZK>`+9KaHL8c<6h8Ukg2nC~XM*M)>?kdQo~r0gt$P*3pC9SGp!}k#tVFrMv~NK^n_@ zrT>yHt-3;5;y)pEVv`Vx)C{!Mld&mkck+)K{vr&xERxF9J@TN?uwTH0(328+>V*Fjh%jbQW;jPaS@u~uDc1SYf?|Nx)T&%War(6{hWvS4jZrN<2{?~_2Dq4B1#Bh-+;-{$yo7cEcGEE6 z6=VVq2>Mlk-KaQ^t9b$M67Yn8-xlz+fX@rqE!}|AXIy%fPWnzr-0P&o*8fGcUyy9N z*Y``&R%GTb7O+b`LSOZDi?%M>CuEkC6r0ZYx&ZI>olscjw1A{?--v)cs!h-OzOAyA z$5fV4eGHfQnEnL;muO5$2zZzF5%|_ZBlHRS35BFy`HZY$mHM#a{D1+hxS%+Xzo9;Y zig8GN6mX})(4jnBc^d6+lr#JdWMotu1vN-TZ`R{O8@n>ve*DRZei`6wJY__`5->tl z;4T8ZjDA6@q^xwO^o;bXR3|T!56IWbe=mPRzFS7XAysC^$n}yw}w2i{QskBW3ooeH_@MS8^ zIWbSA%@g`Uh-(#Qsv36<@;!{GE~Sf6EpNbi?{3^*#{C1(p2ht-nRGQW?{?`L`T?H5 zm3B~vY|hG&5-QZ8b+n z4U1c@K-Lsk)=0YsT8CD?tqq~fYg9j}`PvDh8%xMu)iSL29Ic6ki z2%4`kt*c`L2Xzbhj!eH{SjZ(-Byd+?rx7=jR|HVzX(b^(=Sq z%U~4A1aWjvCn^&mh^Q$h6_c`Z8I=8qwnh^&{WM&18&Mk72ptDB-itKD#Kt#mMe74&{;v zn!Dhr89k*_Mo3rfrU7W4(v7M#jd%v17b!c!Du&wh2Xr3~^AN>|`1l@9}vkUerZ+3W(d& z^@R3VNWHDe44ihyD6+;KsMBU;>?D9TDjJ)D{tOlC_3 z2Xzah-;D2_4PI_V4O@(Cch1h5=_08xwMCMrbu)b4jq;CqKc9(+h=m8Ho_bp;FQ7VC z-J%kAW7%npCQ)CkB4ej9GN6wb*@>N~N_LShifC`jNE?~#b_}b8M4dtqD=_#)x575jY)Yu)2)bzEGNP*=1tbvebL%f%X zhyumdddxJ=8=_-(&az;{rCe}uJqDL}UP^tL_dC0d=Oj|a-IEFhqqt2uj@j;B#ml_M z7)kPp#LQ6d;kYp-TB2HIMpH%>WR~KrrfpbLh9#QC{YIdP!uBK3fs|p4dH$eu9il>(Va4Mi{c0I!w)01J;y2u)uBhv>N~MXI+#;PT%7k#kiGJU7>_5Juql^Jd3C=) z976K&$*VvR2O7+=kao3Wccn1~FuYCApu$)*lqt5|Ll6z6#9;_Iikd#|?g$n#bVSdk zvSJ?^GgDl-oZ-3am--z4J(M$w_bJ2nj*emj>K(@{Z{?MalLOb-EHc1xilZS4zeU$@ z{kNti8#~S=jCTa~-9^0}(=l(yx>HG*aD}i6dM(Seic8Qz2TZR1PTMYNmz@82eH2fF z;;=Zb<6KCwxC6z*-MD&^`e??qv&pz!+&I_=J`a0Y;jKZZN*PvxZ+n7HrN_kaVzb!; zxBeu7@%j>(Ya}>51>0#b#~HqZ4~-ReG<#YQy=WB*S;0GmGuCe<(^wbdP>yZGE;#|l zc4d>P^OO}f3}|u2P+WE{;d~J0Y{9z=r(bB#p>iTP6Jup z$_l0ZCK~Xdqzs`3VBX!&DQ;;Z%PCRRpUd*e&7F)v9EVL%wqcjvZs7N5hpEf5^aF4&(cmlQT4ct6FyreT#@ zwowj#WYJ>`PxkR3>Clr9n1!*hJdYjH^z(yHeD%J$&u%*P)T?vj{@d>&B|?%Kk)(hR zpk@X)L)={86ELJPIsY)zeX3sy&-PbKQay$DsX-ukIVJ_5BIKVD*5yFh2t;Hld}TQQ zw5$ctM-H$=DCk$ihiWRqb>W;wQut7KANu&TYKa!qlMGS`kMQA}d ze{VHp?gsl_Jnx5{JJ{Lzvlmv&vY^yU&Vz(pJwNW3>ZL%C`#>BXiT-!UbE+k`i!0=H zk;Pc<2z!!6hvvSWm3pa)4ct)_b^I*iaz(IYWL3hgBDXBU#&1P{m{S@9M6{NIMM*`g zCEOCiTT_9#kZUl#8$~BXlK<5OFw6PLnq$7{v6}RvFzH2M(i!VyK=^}R+_;syvyx*q z;rwZ)d>_|6n4{&|ElB%?#A^K&Fi-9{|%R@LD`TTqNo%oh>?^vQse$;TFPoiu1>6*&{9F*i ztkqPAwC*cMembs(_XQ(ZX+}8dt4Rx{!3!yD)LhRCJ)A#Q#%TV=n*8zdh{COKvL^oz znh**=CcLDk0*gFchv6m5Ii`ixg^qPj8L7aV*zi6qEuI{a3#ZZGuj(oz&f>u2U@dnib!l!?3g1%lpoj1L^!+4l>*o-B1b4-D+;GslxKAx^{=)e-@NO&Nu}n3Cl56Kc z&%kR3ALzdQ=3i}m;C-*Oy!J-)PS&yc;{8K=@QGyqP(NOc;8SvnF?+uoGVkfW+It7o z9De_PH?I3LMi$YZ)*&{Q7^Z>Cx>l}UL#{Ume&>3_BfjUeU!1Y>r9YXSw;A)!VpN4| z2U?K=Hl^YH%H1L2Fon~w!CwMU8fPKPFk<`(-?`peN|B9j`~TWQ7C8|i;@@pjKb}(~ zAhMYMTfupBmYYTd#gRXF9*eVz=y?>ATMobue<$N!{R)0mNV{o(h5&nMCt7{@u4g;& zKETar^Yy6u@|&#RxtZeV#4n1)#f!(GxCA_U1Z_7?Ru=Rm#o3BaYkaceYYB0$L2&u( zWrMGaGZ~*fo$EpMK`b^2K4l^0oG;JUbhD6Y#p%@fTSdcsQl$;zTfuH|>KhX_CNLr$ zXF!w~T>Zl01kS-Gbo2MK#Zxi!H;ewBy&iCFoHW^wu_=DOlb%)-SE&$z-NFi=mc4Pd z!FFrmX1leJ=ScCH+`?0br$x{In!T7f!#Zm#iefF%R_GWN8aNVT_!R<=U=%0bEXEkY zy%bdmC8oK8jXZi(M=cQ#-vYlz^}p2=Tg zbvEo8+}yIRA;RCWB=i)DeP_djVK-d5p)yz*?9kn}?-8iT*qseID|4|OKWLi>uCtZ4=nj zQ^~k^&mGgp#u`>Q8u0Cejdyh;=DYM~WrOGk+qMzU;qBXmi-Y2RL^cw5J2Z~30Y(k` zU21Ljv_^0h^9K#4*aQB;;ZXaus7#1RZ( zH=rnzsPVQ|5FdzIU$oU|?R3DF5fx`@u~K2^R0=aSYFklkWzZ_q-#K@Ar1ihvaDV4} zp7WjWJLlZ9#Czk{J#bIK?RUSwhZ4_8Dj*LF6B;7T7FIM2Kfl!br&&acgkS~HN#}5W zN>ZFC3H%>t5-qXvdAYTWmFko8AqwIxuq5p;d(yxZ2YsbP{pmvP7VM03!1xXWQ;5Vgb+%>{p= zFp2kxfVA!zqEAj#X66Znu9mB6Gzjv~AqLl&NOndMWrAiLbma^})I=#^g?iB{M1F(v zQZmhaI2qL4CpttKK`VWTT{mG;2F2r-DWb(ffu#PAqU4f?iG0L#Ibq%>Qf2q2L`~R) z{wsjAivjGpY@Gi)fEdCQ8NWP$=mZE#WB@gnGLV^mAp`GT9sr6Xmj@;)=41D!M9X9s zYDoM&nJ5_6Raq4ESCweFu$%~p^Y<~26a4Ie$H{=Pvece>VHXz~ zb0)|VZeq`rp}}e?D+yKfV6m%lF~f@+GN42oM2{CXC{ijiqeQQSv|LxBv(cuVXQ4E> z7f=@b#ef&>3ly_a3>6}4pI%fyhye>X5uHQ(E#^?TxVO8rYgG@*K>xxXcVN#Jwk)P| z*nNnT3g@*n!JjnLS#wwcPf2VRSa{lMw1`=hkc1hw4q^F8UeG8fp)~SE&xBe@8_XBa zKb=B`Dbp^;>zYa~r@-GSJG621G3uw1+wqiBrPGcLs!Ht=3u3aFDRG~~FBPG_Q+Dx^ zBD#2APlsfZny%_Jo6m9Ubjl^rA@NPuLGscT+UPWBf=k%+Ly|^M(h=17R?s>b5}#!U zk5obf|$MK$d=7S81~*jFwB&$%r&W<@`7#Khz?677b#s3fhmZD`=*xS*@a-ptEQx za4LQ3-YDusBLeV=5k>J4oT*N741#(knau#FP>ex&gC|9+LvBPhcS@ga!7%0p5(lgcbRS+x(;xz zd?;hIl@@qZ+&bn77TnvYzed+dZj@C!ySYY(5?n6p=Sg&xxTer3Yhqh?G95~Aw|KVm zapb|tByObS@bcJNMYRT@`cqUyZxdDn` zC1+Ank?7P;VkYHD?jgEfc>|V}k{hNMwL{=m*<8kh+F_nWJ(u}qQJ>_t&=fiX-4_I*JefGm;yY-Q?2CwyCttrC%p34LZfeVZ~?`PCrHyvFb12=QyPp6-ay( z$f;S<>m@DZ3Y|rD929$v2~(l4k<&pa7;VC#$fyd)X*o_WMun2LovV~f_Af}wCP;W< z$P=))A4c!taAb5$_W2JCn2NUn>!bmv$wG3+Xi#J12Z}@w;xL*3^iie6I*APun+m?K2pVyZuUH|(fKlcO{tz=0q4X#Zy+UJ^%%Xxa`_1w zAhC^7X&T%zSr`9~4zPMvWe3<jkAW7mJdUiWbc$W!dXi0-UT4@2=PT@M_N*FvlhrYY`!LI70re>G8}=AZrdRlf z%!zGy4wyvW0Dbf=E5*&>TcrZ$-*>!%QgBtOplm7z7E%SUjMf0FDGr=QL%`Xz6F6VW z7XxQgEB#)HOMF6LOxZ1&-%30n@ub8;CQN5bY?Zj1t)}A&@X;fCz8D)i|hmI&g zT1I!$-?6Y57M25twfF!mQa<5CNBL*KV@#ke@w?C9>{IZ^VQW>S=fu)6qiOUmrLe`U zpFO}{V2-$0wU<9vReQW!zq7Q0lYg>$4;hOf|XqV+L z_`>oP7K|(@tY_Aqq7v(GMdenwxY4?=_+x8diD`XRGC^6i@)oP6)U-NEpG|7$?v8Ar zHId%-u2#!5r&w#v^gVZ(OjK=GR^v_gU7yzU@Z7G${-53yT&?iZVm?V-{wR&nx=-C7z-AfGe}1K11H9ee*kaI z1%niVglKu@7m|SNH^lW*9LGk&F=YN+HY~*9ipil@WhhsGbA87xx{o z_;*3zMu}{RJqM8hm<&nRz3|X}G1EF#UKqOuB~(<@Lp7FZYNCX?BxK?sFY<#On*fpR zA*jmTLM20RqRP2m#OP0w>7C<2lExdNf1^bYqPh{I-RbX?%7`eQ5%F(`Nw(iD*!X}y zewQbx2+C;p$G54{NW+3MQV~qMN8}_?PzMUsf^v#kicfiR&@KYvLeeo?DE2x`M5CDG z^_Z7D@x`^j?g3n_tvwYx=T}dut&6nQhC3ot+iF(U)zn4W>N=_?w^gmItg5YztcG7E2kb$U{P@9g2w-qJPo3x2aW7W~13_fD{a;Z0Qu;fpg9LeY1_w5FZIKVFq| z-kZISH=vWmlOyQhaDE#1HjI1{*4c=+YOb=V8W*-&T0#a{$;1hRH$s$pAARU><*v~wP=9P!tF&W6LT{{Z*36;}WN diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/apphost.exe b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/apphost.exe index 1d048ec3c9639ac46e449589ade45e9c93981caa..925fa5e1174e8139c8692da70941abe8fef02c8d 100644 GIT binary patch delta 99 zcmZqpz|jCiEsR^3Tul9w7*ZJwfG~-{n8B36guw{NHw4ltKx_#V1<9o`m;+@&I1wmk f3{+tOluKhs2FinU7z0^`K=~vFi|vz5nR1x`^2rhw delta 99 zcmZqpz|jCiEsR^3Tul9q8B7^07%UkQ8Ipmt0Ye&)WyX-gV9t;P6g3CSqyWh@24e;j jptuoG+z?1w0AV7Kod^_51 diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/ref/Playvoi.Server.dll b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/ref/Playvoi.Server.dll index eb204db856696730d7eaed83440d94a7589aef78..1cf3d85612001981c5258bc9b89f077c6410ab6e 100644 GIT binary patch delta 3563 zcmb7Hdu&tJ8UN1pz1KI6 zvqfvM(F7`O=>}J$V%jEHTdhS@+Zt`_#vY(`w42r~64IoNZ4|X*Ri*ABtud1H)K1%^jO{Nm!_|g`@BJQR4gJyl~DL{%7X)^E(`{$28eoC zv5)8t?NqqTpC$5x|GS@Pxf51C>I{h<-*g33ZD^IwOX2~s-1(DOBkJaLWon|ckR`XfX?!h5s` za$jm@Jh4B?QMD$Kig*1$AFYBMWO>^_*Jiw%!BdL!J$-ei5fqHLywzwc&@{9Vng{J8 zF8AWi;}&Qvvk$+R6X_K5{7cvApAs#VMGv3*xh0A6Yu%1&wiwzCZ!mMHf|*ej|Md8Xvu^ zG42(NN2Gk)SitgKF`hLl=~X>r_^4XREKoH)PB&1arEoX@kX_Ca%PWew#tvysYb^gx zmi4H#CS+MZmr-ez{dYhgpucMu)s-}&t&vmoQ#n6E&RdYmplgSWKTKS&;?0OHAPQQL z-Z31#9TTh2d9ZI8XW*itdbS$+&v`+cK_N+Mf5cd0&KQ zjbu&wCWGTv(oqqlPwQzV!?ae?Z+IW`G7FO@9Hi^0n_1lwR!sHeLEv&}E1^|OYys?) z#ke5$lCHmo4L_J26dk~K4aPUs4*EDjJ8u{h90CnAd?c$(E-RW(Ie97Dd}_? zOS4;fR%%{=#z!wo`TLLsr=X~e9hLaB%uGJ4Ap z85|}zkWL$-z;20S>K~S{`@~}CBnl@{0<;Sr$%bCeQM z?y}=lu9u5UWu6*Qqek49XL8yK%!qjJwej>4UDa-ihCAZcie>pM#zu_3y1=@XwYb*u zg>qa?CU2A-u5j5II;5-1=i3GU>IE*IG!4|+6G{dHqjb7MB_>$iWm}&IKg{?HMAdC zPsf1|NPUdH2>BEAI zHYn{9JH!*TONoo$Q(QSJ*!qm%Qhp{l!%b*L!wsYL@Jg-!*qM)*mYbs{8?uy9a#DIMJMp2#GJ-9x}jFe4pcF= zK^2t%m*XS~e596=n&nkq`pjaZU^f(=22!vG*vo^?^Us15+%Ftbj?z!Krn_R_;g5RO z?c%q58p!$($CcQ1g>Nv@FG_DqzW~NsiWLu{g|Ox(h9I8}n_7p5Bf}BrqQ4>Jk|;?b zHXL=X`RfKAX$Q&(;{dD@;%9oT6fPTR?pR5??j z--@KO(Ok3g&UtCtQ zPrO@WlJ4r}ju9lOeRTA0O@0~rtr;Y8u9_RgwDTYHaj%=wIa0Q~@k=&7jcsBAoF*@I@MYV`B9;)$jp3-OEPy9*D9jI91>=gxyM(l z3ez%eEi^8TmKR3T3QbCOSh93zuBg@{%(Q8T9@VAYz_83!A-}(t(BDxdk;Dn-4ypJo&50_2j delta 2261 zcmZ`*X>3(R6#nLJeSIzMySMwIbRne*l(w&Q0fAN)+laPUT3fZIuNxMj+7{HJ_+BGv zAO^5bkdSCxYT^Pv3>8956X1tvT!=_w8a0aiXkq|0F%e??;WyLwN-^=a^Ue9rnKNh3 z%$a*%q&{-bEBgxa2P!{9^tp@zB#2TVK!tx+`B&rkhpkEPHUj(yI)Tgfcz#M^1V|*` zM{TamHuG^{dKs{>h3*xcMsU(9+2j&ttO>Op2r1w$sJsL4bE{TsCa5?jUPm37 z!4^QoNwrt=*bKZ)w#iw-5jK~kY>s`yQnrM!raw4Sj-qK86#-0JUkb%CVCDy~hk+E! zgh^Y9W^u@xXY(-=$JvG;S|eAv+}6lTj>7NFO0o{DWbS^fVJfFYlh(9QBhZef+A!zC zSY{_rO^_-!6CW1cb8O7lDxR3fy19th$T6Qwn-TRJ^W8~XjLnDx=5|&|bWU-^9AaI~ zve|g5qM+iRU!Vfo^Ni2kV%Y6CEWD^Amd|4|;stZ>oNY!N$03$-EZ{T_^BTt3A?FR& zN{rRm6G+yK@n^&oj=`NX{whu)HOj_(@7q({tY~<>Pcily&WX?e$2OZ`Y-Eh7x_O3G z6vIC(<}a|DMI>;BXy8>Xf1+ijH}N3Rg2CbuQ2JRkuvW_xyo&;ZL<3v6qXJ!8p7nim z&db0t$6{I*HgIn@uogD+%6Hmf!OYd^XA%9lOUq@%0BSVWX>8EAS!27#kj8!@!xJ6E zi%vU@ll!oYn26=X0Lri!-S|e7@Mx}}gav$+m;*mGg-8jrTY^j?tCzS6+lcG%Eb)Hq zB{pmQqr`Q15-FlnV?^Uy8qaDxhhdx+`C=HKibA1AuG849(c;e7%s!3?UihzxTgA8V zfC6?g)p7ef$n2z|a2l6uMbv)Ie{OKk)r&IrJizJc1f0{FO-Ani{*v%yJbm6iaeCDN?y#^D|<6jmI43$X2Hr6!e{0|*c4n> z(Ih3_Vaty)3&M+BC(VoOH@wIJ_T$2fj9L!CbiAeU%5<2jqgEc=L{6eTy$0p)J&=%R zh%~Q7c$r?iKhF|ghZnNlUTy4%qtWYd`!(C4*`T{CKF<{1pcisS9Bua%CFCK^+he$i zDlp)+Tg56=F_IFBZ&~C_R+(W5nVLPaCb*)yCe&SB+83(qsp_h!stNVf^aU$=%Dc+S ztE)p@p`PA~U{$c3UwgsIQjaPIzk2@z@_KfTjLUJoucBXZWuH-U?Rb8=G2JNd&8eMC z%H3!-2C)Lwylx?0lxmcsk5VOiP=zjPtF)zu*vC6kL47&(WyEU!g(!!p>!l^gu|bqi WPAq)fh_9Xf5pr{_{xLCL8uu>=l2lj# diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/refint/Playvoi.Server.dll b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/refint/Playvoi.Server.dll index eb204db856696730d7eaed83440d94a7589aef78..1cf3d85612001981c5258bc9b89f077c6410ab6e 100644 GIT binary patch delta 3563 zcmb7Hdu&tJ8UN1pz1KI6 zvqfvM(F7`O=>}J$V%jEHTdhS@+Zt`_#vY(`w42r~64IoNZ4|X*Ri*ABtud1H)K1%^jO{Nm!_|g`@BJQR4gJyl~DL{%7X)^E(`{$28eoC zv5)8t?NqqTpC$5x|GS@Pxf51C>I{h<-*g33ZD^IwOX2~s-1(DOBkJaLWon|ckR`XfX?!h5s` za$jm@Jh4B?QMD$Kig*1$AFYBMWO>^_*Jiw%!BdL!J$-ei5fqHLywzwc&@{9Vng{J8 zF8AWi;}&Qvvk$+R6X_K5{7cvApAs#VMGv3*xh0A6Yu%1&wiwzCZ!mMHf|*ej|Md8Xvu^ zG42(NN2Gk)SitgKF`hLl=~X>r_^4XREKoH)PB&1arEoX@kX_Ca%PWew#tvysYb^gx zmi4H#CS+MZmr-ez{dYhgpucMu)s-}&t&vmoQ#n6E&RdYmplgSWKTKS&;?0OHAPQQL z-Z31#9TTh2d9ZI8XW*itdbS$+&v`+cK_N+Mf5cd0&KQ zjbu&wCWGTv(oqqlPwQzV!?ae?Z+IW`G7FO@9Hi^0n_1lwR!sHeLEv&}E1^|OYys?) z#ke5$lCHmo4L_J26dk~K4aPUs4*EDjJ8u{h90CnAd?c$(E-RW(Ie97Dd}_? zOS4;fR%%{=#z!wo`TLLsr=X~e9hLaB%uGJ4Ap z85|}zkWL$-z;20S>K~S{`@~}CBnl@{0<;Sr$%bCeQM z?y}=lu9u5UWu6*Qqek49XL8yK%!qjJwej>4UDa-ihCAZcie>pM#zu_3y1=@XwYb*u zg>qa?CU2A-u5j5II;5-1=i3GU>IE*IG!4|+6G{dHqjb7MB_>$iWm}&IKg{?HMAdC zPsf1|NPUdH2>BEAI zHYn{9JH!*TONoo$Q(QSJ*!qm%Qhp{l!%b*L!wsYL@Jg-!*qM)*mYbs{8?uy9a#DIMJMp2#GJ-9x}jFe4pcF= zK^2t%m*XS~e596=n&nkq`pjaZU^f(=22!vG*vo^?^Us15+%Ftbj?z!Krn_R_;g5RO z?c%q58p!$($CcQ1g>Nv@FG_DqzW~NsiWLu{g|Ox(h9I8}n_7p5Bf}BrqQ4>Jk|;?b zHXL=X`RfKAX$Q&(;{dD@;%9oT6fPTR?pR5??j z--@KO(Ok3g&UtCtQ zPrO@WlJ4r}ju9lOeRTA0O@0~rtr;Y8u9_RgwDTYHaj%=wIa0Q~@k=&7jcsBAoF*@I@MYV`B9;)$jp3-OEPy9*D9jI91>=gxyM(l z3ez%eEi^8TmKR3T3QbCOSh93zuBg@{%(Q8T9@VAYz_83!A-}(t(BDxdk;Dn-4ypJo&50_2j delta 2261 zcmZ`*X>3(R6#nLJeSIzMySMwIbRne*l(w&Q0fAN)+laPUT3fZIuNxMj+7{HJ_+BGv zAO^5bkdSCxYT^Pv3>8956X1tvT!=_w8a0aiXkq|0F%e??;WyLwN-^=a^Ue9rnKNh3 z%$a*%q&{-bEBgxa2P!{9^tp@zB#2TVK!tx+`B&rkhpkEPHUj(yI)Tgfcz#M^1V|*` zM{TamHuG^{dKs{>h3*xcMsU(9+2j&ttO>Op2r1w$sJsL4bE{TsCa5?jUPm37 z!4^QoNwrt=*bKZ)w#iw-5jK~kY>s`yQnrM!raw4Sj-qK86#-0JUkb%CVCDy~hk+E! zgh^Y9W^u@xXY(-=$JvG;S|eAv+}6lTj>7NFO0o{DWbS^fVJfFYlh(9QBhZef+A!zC zSY{_rO^_-!6CW1cb8O7lDxR3fy19th$T6Qwn-TRJ^W8~XjLnDx=5|&|bWU-^9AaI~ zve|g5qM+iRU!Vfo^Ni2kV%Y6CEWD^Amd|4|;stZ>oNY!N$03$-EZ{T_^BTt3A?FR& zN{rRm6G+yK@n^&oj=`NX{whu)HOj_(@7q({tY~<>Pcily&WX?e$2OZ`Y-Eh7x_O3G z6vIC(<}a|DMI>;BXy8>Xf1+ijH}N3Rg2CbuQ2JRkuvW_xyo&;ZL<3v6qXJ!8p7nim z&db0t$6{I*HgIn@uogD+%6Hmf!OYd^XA%9lOUq@%0BSVWX>8EAS!27#kj8!@!xJ6E zi%vU@ll!oYn26=X0Lri!-S|e7@Mx}}gav$+m;*mGg-8jrTY^j?tCzS6+lcG%Eb)Hq zB{pmQqr`Q15-FlnV?^Uy8qaDxhhdx+`C=HKibA1AuG849(c;e7%s!3?UihzxTgA8V zfC6?g)p7ef$n2z|a2l6uMbv)Ie{OKk)r&IrJizJc1f0{FO-Ani{*v%yJbm6iaeCDN?y#^D|<6jmI43$X2Hr6!e{0|*c4n> z(Ih3_Vaty)3&M+BC(VoOH@wIJ_T$2fj9L!CbiAeU%5<2jqgEc=L{6eTy$0p)J&=%R zh%~Q7c$r?iKhF|ghZnNlUTy4%qtWYd`!(C4*`T{CKF<{1pcisS9Bua%CFCK^+he$i zDlp)+Tg56=F_IFBZ&~C_R+(W5nVLPaCb*)yCe&SB+83(qsp_h!stNVf^aU$=%Dc+S ztE)p@p`PA~U{$c3UwgsIQjaPIzk2@z@_KfTjLUJoucBXZWuH-U?Rb8=G2JNd&8eMC z%H3!-2C)Lwylx?0lxmcsk5VOiP=zjPtF)zu*vC6kL47&(WyEU!g(!!p>!l^gu|bqi WPAq)fh_9Xf5pr{_{xLCL8uu>=l2lj#