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 f1609b5..ba11cac 100644 Binary files a/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.dll and b/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.dll differ 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 925fa5e..bd87207 100644 Binary files a/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.exe and b/Playvoi.Server/Playvoi.Server/Playvoi.Server/bin/Release/net9.0/Playvoi.Server.exe differ 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 f1609b5..ba11cac 100644 Binary files a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.dll and b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/Playvoi.Server.dll differ 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 925fa5e..bd87207 100644 Binary files a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/apphost.exe and b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/apphost.exe differ 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 1cf3d85..002a5fe 100644 Binary files a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/ref/Playvoi.Server.dll and b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/ref/Playvoi.Server.dll differ 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 1cf3d85..002a5fe 100644 Binary files a/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/refint/Playvoi.Server.dll and b/Playvoi.Server/Playvoi.Server/Playvoi.Server/obj/Release/net9.0/refint/Playvoi.Server.dll differ