From 4b9d76f1eada29c4e64b75638e6da06f68547ba2 Mon Sep 17 00:00:00 2001 From: EmirHanMamak Date: Mon, 19 Jan 2026 11:39:46 +0300 Subject: [PATCH] feat(auth): add login or register user logic --- .../Playvoi.Server/Games/UsersManager.cs | 29 ++++++++++++++++++ .../Infrastructure/Container.cs | 2 ++ .../Playvoi.Server/NetworkServer.cs | 15 +++++---- .../bin/Release/net9.0/Playvoi.Server.dll | Bin 15360 -> 19456 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 15360 -> 19456 bytes .../obj/Release/net9.0/apphost.exe | Bin 145408 -> 145408 bytes .../obj/Release/net9.0/ref/Playvoi.Server.dll | Bin 9216 -> 11776 bytes .../Release/net9.0/refint/Playvoi.Server.dll | Bin 9216 -> 11776 bytes 12 files changed, 43 insertions(+), 9 deletions(-) diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs index f4c9873..dfc4bf1 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using LiteNetLib; using Playvoi.Server.Data.Interface; using Playvoi.Server.Data.Model; @@ -11,8 +12,36 @@ public class UsersManager public UsersManager(IUserRepository userRepository) { + _connections = new Dictionary(); _userRepository = userRepository; } + + public void AddConnection(NetPeer peer) + { + _connections.Add(peer.Id, new ServerConnection() + { + Peer = peer, + }); + } + public void Disconnect(int peerId) + { + var connection = GetConnection(peerId); + if (connection.User != null) + { + var userId = connection.User.Id; + _userRepository.SetOffline(userId); + + //Matchmaker Unregister + //gamemanger close game + } + _connections.Remove(peerId); + } + + public ServerConnection GetConnection(int peerId) + { + return _connections[peerId]; + } + public bool LoginOrRegister(int connectionId, string username, string password) { var dbUser = _userRepository.Get(username); diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs index 24884a8..e769d9c 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.Logging; using Playvoi.Server.Data.Interface; using Playvoi.Server.Data.Repository; using Playvoi.Server.Extensions; +using Playvoi.Server.Games; using Playvoi.Server.Shared.Registry; namespace Playvoi.Server.Infrastructure; @@ -24,6 +25,7 @@ public static class Container services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddPacketHandlers(); } diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs index 8cbd6e9..f220846 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/NetworkServer.cs @@ -8,6 +8,7 @@ using _Network.Shared.Interface; using LiteNetLib; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Playvoi.Server.Games; using Playvoi.Server.Shared; using Playvoi.Server.Shared.Interface; using Playvoi.Server.Shared.Registry; @@ -19,7 +20,7 @@ public class NetworkServer : INetEventListener private readonly ILogger _logger; private readonly IServiceProvider _serviceProvider; private NetManager _netManager; - private Dictionary _connections; + private UsersManager _usersManager; public NetworkServer(ILogger logger, IServiceProvider serviceProvider) { @@ -29,12 +30,12 @@ public class NetworkServer : INetEventListener public void Start() { - _connections = new Dictionary(); _netManager = new NetManager(this) { DisconnectTimeout = 10000 }; _netManager.Start(9050); + _usersManager = _serviceProvider.GetRequiredService(); Console.WriteLine("Server listening on port 9050"); } @@ -65,14 +66,16 @@ public class NetworkServer : INetEventListener public void OnPeerConnected(NetPeer peer) { - Console.WriteLine($"Client connected:{peer.Id}:{peer.Address}:{peer.Port}"); - _connections.Add(peer.Id, peer); + _logger.LogInformation($"{peer?.Id} connect to {peer.Address}"); + _usersManager.AddConnection(peer); } public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) { - Console.WriteLine($"Client disconnected:{peer.Id}:{peer.Address}:{peer.Port}"); - _connections.Remove(peer.Id); + var connection = _usersManager.GetConnection(peer.Id); + _netManager.DisconnectPeer(peer); + _usersManager.Disconnect(peer.Id); + _logger.LogInformation($"{connection?.User?.Id} disconnect from {peer.Address}"); } public void OnConnectionRequest(ConnectionRequest request) 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 ba11caca4a5a1ce9ae474d0aabb12ac70140b873..7ca8b54cad6e1a5e1f9defed0e66e0ae5242f253 100644 GIT binary patch literal 19456 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 delta 7136 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 delta 99 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 delta 7136 zcmb_gdw5mVm0x?G$36GloBPTG2qfGP5-xd>7YPKAN1_nr5kv$O9YP3gEXkGJV8saM zGWeWYl{uqBTCJkR0jIWF3biU)Tc^J3tA3w!T0}(roYrx)MaRm}`K^8KO@i%wGk?rU z&f0su_gZ`H$GPdq z+tR(eUatwATt}@v2BxPQz z5J*`(GKFZ{c&7WAKFBbBNhwis0*K}PFmYv~2;GV%k6Dl`W(?NH*Xnes@=8%Th;-`HEp4y_j3lg?dU6uFM@w_$pbv`v{yFRiQB@`;Gs8Bk zOf!iv?B7(7z)(0#mCZB`9)v`{t%DE>sN_B;K@M{Eyg0OE6(|*78bHDD0PY{<27x=n=KjA1 zkgSIPay5YFkqnF*lg+@(qX$qEle3=(UmW-1xxBv4qD+hb?TAjer5 z=6Eu>=*=7D49PcBvy>rbB`^b(+w;yggqbi?C?O1pIf;PlnC-K;5^`c%zYy6{(5xg1 z$V_0xRmL=xhg2J+t}&D6qN%|i7{C~+@r z)HqTzjYqNwa%E}eBy!-%JY&`|xgF$0$bG;!SCqLYeeF(*2N z6H#q1=0>9AnAblIF~o=~)l~I^K89x|ux;4hy1}+$SDcr^c3_wBA~F-pnW9!mD{S&3 zw_^+NhC3EZ660;;fnCTtX=Wu>pj$2znCD6~m|bo#f!vfqw!8xCUZYQ746{DEMzD!^ zma(zGFv=raBh2w?1PghT%rbKZ3wcGtEUy5t&_)TFU}t5RRC8r&En^kh;C!@sXS9l%R1N#!IvMTb zGO(Rt!WD9m3(T`s1y}6Sb5)aSV0}#7i2fukaXAFaVH^w9OmpW4}fu58B|qi2A} zQM08BHYL}yFdl69V%5a^{C+HI`jcoNtQn}&V!X&9L4`1tget|+Mub=$-s%bKNgcpU z#9~or0mh@0F+L^C28iZcY!JC2+q^zt(u)e7@8kX+V_hJZz8_%jQR5SzNp-%rEtA%n z42u+OQSf&PK5M*fIVSB^Ci)CE(HrW6=nWRbBYK}@(^2i5Ae7<2rhWD~L7TqiXLySp zmLd92dchZ?r~E9L3rYd?h+=7Dj|l_r^D`{f!m^ND{Sa)%A!$;(&DJhpu0#3Zuq>t@ zh6Y2$G$v3Jvgwc>mL~ZO7L_n((ptg&WeC)7UjI)3sHs5 z3a@K@Rx$Z7M2tPaGT%UkD(G1)={IRw;MN?IK7))&VbBZd6S%CQe}jV>deeW%s;6hs zFQgtolO784pywf&CMs~?hUfE)npUA^JVF;?Gn#`w{y_g!-z4XwuaRFwNDu$oJ{J|C z(H<1!KZGtt0r^ld0@zFTVS5g+fWqz$Zx7Ewe~iK&Qdp1*mEINh7U<=WQ>2)VDTDt4 zv{+$V?Z4!s2ONIKE-~g%m`WA)%iyvgV`Ze3M5quY&sg~=ET5`LgWfiTH3!aX zNAbqut~sJtNYfoMO`p6#yEy%#Tngw5Gc2%{YJxtL7XrQkSVHyoO2GI0mw{4jcLMIo z=?45=P9NZ@07IX)R7q~tny~tIXa%^NUJrPX{tGf5an z73p2DtLS~z{}_G0GV%AyM1eAKtupaAOmxI~>UJS#r{Mlth21cAML=LDxK3dw{SWD1 zXp(O9c-A_-4ZPbjSg#&&fbPzq^R+h2>b)6ksTKjYUtuT3tv=FqdL@JH_W1?x75w}n zhh3QTL7XvmZ|Wxf*~92mNML7~TcUWhSYaIsJ1MU6#dOD_UuDp1Wsx4Fizcz?NwH6s z>N)hQ43-6;+=hhbhypFpzQv+^$TRD{#T!#>eddJ#Ff9ttyC^kD#T><_OHv7Z203l$8$L2-4TICv?=O1A^eN8+OzLt)N zKifCb2V$AQXW@##5MYrN0eoEEL*qm=^dR6Dp+ley`q|~>@-e_0eLth9I2?Ko@ZUpk zAX{s#57nUmNS}*GH7Rxx@1jl~onU2ohc#6Qc{nf)pXVzA3x!{%!b`;DOh0O*MOCIh z5IP_lRev_k3It^vJrF9Fizyt;gtdNJj8cdTzKCbk0Ye@at>j zMasfjM>QLip-svVlo7$rh*eODTot-s9ufa!{j;1Zm9l)*e^3r6t@-kO-?Oq^R`}ln zTrWS9o#MrSrqzkdL#?t-+@Uel{S3EQA#J(*%*fXkL-#T26u$|SYMs(qrdMbNj)-#s zgR~GZLhafV>Y_Ze24(d*)^{$Q0UVDjSq*Lh<$#qm4X}ZF0cX(;z*f2y@B;ca;0i^* z6tI=P1`BCQDaieM6=jctKc$od(oYrgw1USJY!%gNQ>+YU3+gU{KQj@q!+$)ZX)1p9DVrs9Ix5zu> zlM<_^x=hMxxQ8W>|K4P(eYVYRhDboiOA)$o_amvk#Fe35*ac&idTTY2?g zQ7*+!{$<_sl;g7pI8P1mY+6#G>_eSMY-qN2$l~^F$KG}MY}$BbFoax(k@X1PC~7%| z`|K2Ip@leJm(v4yAIAGKXh-q>7k0T`v4y@Rw$d-rek7LDIdU_l^5qt~LGFj*ehBS{ z@QyZYt(f87SFzJwSb3NG`^s@{W7T!;OI525R8$|9uBbh7z*i@Qy|jCvqr1DG zuIzT#*6)r2ZR;H9T-Dz*0OHsCdk#!#h=~KM8@t4TH>NKU?zHAgx2Jhg?)1bf0UPVjkAxLKyDp zmhp}+Kh`6ySg#eABDN-$en*-XxYEKR5h2^B$F@d;vAozeT)tylW1U)@3^O9AsF*Zc zObC!JV(E`#+d@SX44;UmcNj2aS!S&eLWx*LoMP$E4I6TwL)-E}AeVB50WZ06(#=@< zn~M8Q9g@AU5=#&15TD@3*xWZ~C7f|SJwKMdTjWR6dt@xVHm1*9h0|#M%4Z$QrXorvVwuC3{3vGjj>A zK>DIVBwI!?f%B9SlFI*i7UnTM6y1^YV9KNfZG}fQ|3KR6NguFN646gb@1k_|Fpj5dk_=@_d}*(cvITfvh~d*(&aXf@j-A zweSF-U5qKO<^oB0^FE|PdJWFp_8%7_jMg>`uP^aP=h5){H^a(Fau*Zl7#*4Ng}Y;K$} zbA4S?V?+IhuDT7~og2HmW^8Eg+|byxv8$nB`o{Y1#yYoo!Ag8YJoxtVKag0`!6yx_ z4b->{FaM&JdHB45Vh z#M2ofY^V0+TPyp%e*c~Y7d*Ergx{mHPlEgLT_pvwu)}?{_2L8Z^Y;li)Rq$K4*YG~ z>vGw8{Pa-9FirDVGTV-5e4H delta 99 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 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 002a5feefb06aa4f396b4fffab6cf08ad07fd987..7baf9b30d41487b804aaefff2146d35ce8fe9bdd 100644 GIT binary patch literal 11776 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