From e7703970b18467faa340642a873fe57df256dfa8 Mon Sep 17 00:00:00 2001 From: EmirHanMamak Date: Sun, 18 Jan 2026 23:15:57 +0300 Subject: [PATCH] feat(data): add in-memory user repository implementation --- .../Data/Interface/IRepository.cs | 13 +++ .../Data/Interface/IUserRepository.cs | 9 +++ .../Playvoi.Server/Data/Model/User.cs | 9 +++ .../Data/Repository/InMemoryUserRepository.cs | 75 ++++++++++++++++++ .../Playvoi.Server/Games/ServerConnection.cs | 13 +++ .../Playvoi.Server/Games/UsersManager.cs | 48 +++++++++++ .../Infrastructure/Container.cs | 3 + .../PacketHandlers/AuthRequestHandler.cs | 19 +++++ .../Packets/ClientServer/NetAuthRequest.cs | 2 +- .../bin/Release/net9.0/Playvoi.Server.dll | Bin 14848 -> 15360 bytes .../bin/Release/net9.0/Playvoi.Server.exe | Bin 145408 -> 145408 bytes .../net9.0/Playvoi.Server.AssemblyInfo.cs | 2 +- .../Playvoi.Server.AssemblyInfoInputs.cache | 2 +- .../obj/Release/net9.0/Playvoi.Server.dll | Bin 14848 -> 15360 bytes .../obj/Release/net9.0/apphost.exe | Bin 145408 -> 145408 bytes .../obj/Release/net9.0/ref/Playvoi.Server.dll | Bin 9216 -> 9216 bytes .../Release/net9.0/refint/Playvoi.Server.dll | Bin 9216 -> 9216 bytes 17 files changed, 192 insertions(+), 3 deletions(-) create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IRepository.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IUserRepository.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Model/User.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Repository/InMemoryUserRepository.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/ServerConnection.cs create mode 100644 Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IRepository.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IRepository.cs new file mode 100644 index 0000000..dadb0c5 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IRepository.cs @@ -0,0 +1,13 @@ +using System.Linq; + +namespace Playvoi.Server.Data.Interface; + +public interface IRepository where T : class +{ + void Add(T entity); + void Delete(string id); + T Get(string id); + void Update(T entity); + IQueryable GetQuery(); + ushort GetTotalCount(); +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IUserRepository.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IUserRepository.cs new file mode 100644 index 0000000..4a040a4 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Interface/IUserRepository.cs @@ -0,0 +1,9 @@ +using Playvoi.Server.Data.Model; + +namespace Playvoi.Server.Data.Interface; + +public interface IUserRepository : IRepository +{ + public void SetOnline(string id); + public void SetOffline(string id); +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Model/User.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Model/User.cs new file mode 100644 index 0000000..887d921 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Model/User.cs @@ -0,0 +1,9 @@ +namespace Playvoi.Server.Data.Model; + +public class User +{ + public string Id { get; set; } + public string Password { get; set; } + public ushort Score { get; set; } + public bool IsOnline { get; set; } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Repository/InMemoryUserRepository.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Repository/InMemoryUserRepository.cs new file mode 100644 index 0000000..2d234c9 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Data/Repository/InMemoryUserRepository.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using System.Linq; +using Playvoi.Server.Data.Interface; +using Playvoi.Server.Data.Model; + +namespace Playvoi.Server.Data.Repository; + +public class InMemoryUserRepository : IUserRepository +{ + private readonly List _entities; + + public InMemoryUserRepository() + { + _entities = new List() + { + new User() + { + Id = "ehm", + Password = "test", + IsOnline = true, + Score = 100 + }, + new User() + { + Id = "hme", + Password = "test123", + IsOnline = false, + Score = 230 + } + }; + } + + // Ogrenmek için ileride Database ile değişimi yapilacak. + public void Add(User entity) + { + _entities.Add(entity); + } + + public void Delete(string id) + { + var entity = _entities.FirstOrDefault(x => x.Id == id); + _entities.Remove(entity); + } + + public User Get(string id) + { + return _entities.FirstOrDefault(x => x.Id == id); + } + + public void Update(User entity) + { + var dbIndex = _entities.FindIndex(e => e.Id == entity.Id); + _entities[dbIndex] = entity; + } + + public IQueryable GetQuery() + { + return _entities.AsQueryable(); + } + + public ushort GetTotalCount() + { + return (ushort)_entities.Count(x => x.IsOnline); + } + + public void SetOnline(string id) + { + _entities.FirstOrDefault(e => e.Id == id).IsOnline = true; + } + + public void SetOffline(string id) + { + _entities.FirstOrDefault(e => e.Id == id).IsOnline = false; + } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/ServerConnection.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/ServerConnection.cs new file mode 100644 index 0000000..0bf0526 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/ServerConnection.cs @@ -0,0 +1,13 @@ +using System; +using LiteNetLib; +using Playvoi.Server.Data.Model; + +namespace Playvoi.Server.Games; + +public class ServerConnection +{ + public int ConnectionId { get; set; } + public User User { get; set; } + public NetPeer Peer { get; set; } + public Guid? GameId { get; set; } +} \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs new file mode 100644 index 0000000..f4c9873 --- /dev/null +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Games/UsersManager.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using Playvoi.Server.Data.Interface; +using Playvoi.Server.Data.Model; + +namespace Playvoi.Server.Games; + +public class UsersManager +{ + private Dictionary _connections; + private readonly IUserRepository _userRepository; + + public UsersManager(IUserRepository userRepository) + { + _userRepository = userRepository; + } + public bool LoginOrRegister(int connectionId, string username, string password) + { + var dbUser = _userRepository.Get(username); + if (username != null) + { + //Login + if (dbUser.Password != password) + { + return false; + } + } + // Register + if (dbUser == null) + { + var newUser = new User() + { + Id = username, + Password = password, + IsOnline = true, + Score = 0 + }; + _userRepository.Add(newUser); + dbUser = newUser; + } + // Login and set online + if (_connections.ContainsKey(connectionId)) + { + dbUser.IsOnline = true; + _connections[connectionId].User = dbUser; + } + return true; + } +} \ 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 d852096..24884a8 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Infrastructure/Container.cs @@ -1,6 +1,8 @@ using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Playvoi.Server.Data.Interface; +using Playvoi.Server.Data.Repository; using Playvoi.Server.Extensions; using Playvoi.Server.Shared.Registry; @@ -22,6 +24,7 @@ public static class Container services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddPacketHandlers(); } } \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs index 99f6031..8cd3711 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/PacketHandlers/AuthRequestHandler.cs @@ -1,5 +1,8 @@ using _Network.Shared; using _Network.Shared.Interface; +using _Network.Shared.Packets.ClientServer; +using Microsoft.Extensions.Logging; +using Playvoi.Server.Games; using Playvoi.Server.Shared.Attributes; using Playvoi.Server.Shared.Interface; @@ -7,8 +10,24 @@ namespace Playvoi.Server.PacketHandlers; [HandlerRegister(PacketType.AuthRequest)] public class AuthRequestHandler : IPacketHandler { + private readonly ILogger _logger; + private readonly UsersManager _userManager; + + public AuthRequestHandler(ILogger logger, UsersManager userManager) + { + _logger = logger; + _userManager = userManager; + } public void Handle(INetPacket packet, int connectionId) { + var message = (NetAuthRequest)packet; + _logger.LogInformation($"Received login request for user with pass: {message.Username}:{message.Password}"); + // log + + // login or register + var loginSuccess = _userManager.LoginOrRegister(connectionId, message.Username, message.Password); + // if success -> send back N_OAuth + // else send back Net_OAuthFail meessage } } \ No newline at end of file diff --git a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Packets/ClientServer/NetAuthRequest.cs b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Packets/ClientServer/NetAuthRequest.cs index d9bb865..a30875f 100644 --- a/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Packets/ClientServer/NetAuthRequest.cs +++ b/Playvoi.Server/Playvoi.Server/Playvoi.Server/Shared/Packets/ClientServer/NetAuthRequest.cs @@ -3,7 +3,7 @@ using LiteNetLib.Utils; namespace _Network.Shared.Packets.ClientServer { - public class NetAuthRequest : INetPacket + public struct NetAuthRequest : INetPacket { public PacketType Type => PacketType.AuthRequest; public string Username { get; set; } 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 f1609b58dc629304cf0597ce4eaeac6bfe33b650..ba11caca4a5a1ce9ae474d0aabb12ac70140b873 100644 GIT binary patch literal 15360 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 Wi~mk86nXyX#aa%Qzg++CJn%o*vlS8m delta 7000 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 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 28e1151..65e30e2 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+be00b3542e14d49b00f7373a13e89fcb423c17b8")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b0197489b16432dc1deafec8d7ad46fc335f2e41")] [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 d8af400..f86a794 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 @@ -54014dd7ac4359d492a4b0ddbbccc8d1396884df8feab61e3beddc83d95508b9 +57beb62731dfeffdc95d0f7c3f52acf0b72edd970c67dadd581310b517f12af2 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 f1609b58dc629304cf0597ce4eaeac6bfe33b650..ba11caca4a5a1ce9ae474d0aabb12ac70140b873 100644 GIT binary patch literal 15360 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 Wi~mk86nXyX#aa%Qzg++CJn%o*vlS8m delta 7000 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 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 1cf3d85612001981c5258bc9b89f077c6410ab6e..002a5feefb06aa4f396b4fffab6cf08ad07fd987 100644 GIT binary patch delta 2810 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 AQ~&?~ 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 1cf3d85612001981c5258bc9b89f077c6410ab6e..002a5feefb06aa4f396b4fffab6cf08ad07fd987 100644 GIT binary patch delta 2810 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 AQ~&?~