feat(data): add in-memory user repository implementation
This commit is contained in:
parent
b0197489b1
commit
e7703970b1
17 changed files with 192 additions and 3 deletions
|
|
@ -0,0 +1,13 @@
|
|||
using System.Linq;
|
||||
|
||||
namespace Playvoi.Server.Data.Interface;
|
||||
|
||||
public interface IRepository<T> where T : class
|
||||
{
|
||||
void Add(T entity);
|
||||
void Delete(string id);
|
||||
T Get(string id);
|
||||
void Update(T entity);
|
||||
IQueryable<T> GetQuery();
|
||||
ushort GetTotalCount();
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
using Playvoi.Server.Data.Model;
|
||||
|
||||
namespace Playvoi.Server.Data.Interface;
|
||||
|
||||
public interface IUserRepository : IRepository<User>
|
||||
{
|
||||
public void SetOnline(string id);
|
||||
public void SetOffline(string id);
|
||||
}
|
||||
|
|
@ -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; }
|
||||
}
|
||||
|
|
@ -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<User> _entities;
|
||||
|
||||
public InMemoryUserRepository()
|
||||
{
|
||||
_entities = new List<User>()
|
||||
{
|
||||
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<User> 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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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; }
|
||||
}
|
||||
|
|
@ -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<int, ServerConnection> _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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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<NetworkServer>();
|
||||
services.AddSingleton<PacketRegistry>();
|
||||
services.AddSingleton<HandlerRegistry>();
|
||||
services.AddSingleton<IUserRepository, InMemoryUserRepository>();
|
||||
services.AddPacketHandlers();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<AuthRequestHandler> _logger;
|
||||
private readonly UsersManager _userManager;
|
||||
|
||||
public AuthRequestHandler(ILogger<AuthRequestHandler> 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
|
||||
}
|
||||
}
|
||||
|
|
@ -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; }
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -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")]
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
54014dd7ac4359d492a4b0ddbbccc8d1396884df8feab61e3beddc83d95508b9
|
||||
57beb62731dfeffdc95d0f7c3f52acf0b72edd970c67dadd581310b517f12af2
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in a new issue