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 System;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Playvoi.Server.Data.Interface;
|
||||||
|
using Playvoi.Server.Data.Repository;
|
||||||
using Playvoi.Server.Extensions;
|
using Playvoi.Server.Extensions;
|
||||||
using Playvoi.Server.Shared.Registry;
|
using Playvoi.Server.Shared.Registry;
|
||||||
|
|
||||||
|
|
@ -22,6 +24,7 @@ public static class Container
|
||||||
services.AddSingleton<NetworkServer>();
|
services.AddSingleton<NetworkServer>();
|
||||||
services.AddSingleton<PacketRegistry>();
|
services.AddSingleton<PacketRegistry>();
|
||||||
services.AddSingleton<HandlerRegistry>();
|
services.AddSingleton<HandlerRegistry>();
|
||||||
|
services.AddSingleton<IUserRepository, InMemoryUserRepository>();
|
||||||
services.AddPacketHandlers();
|
services.AddPacketHandlers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
using _Network.Shared;
|
using _Network.Shared;
|
||||||
using _Network.Shared.Interface;
|
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.Attributes;
|
||||||
using Playvoi.Server.Shared.Interface;
|
using Playvoi.Server.Shared.Interface;
|
||||||
|
|
||||||
|
|
@ -7,8 +10,24 @@ namespace Playvoi.Server.PacketHandlers;
|
||||||
[HandlerRegister(PacketType.AuthRequest)]
|
[HandlerRegister(PacketType.AuthRequest)]
|
||||||
public class AuthRequestHandler : IPacketHandler
|
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)
|
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
|
namespace _Network.Shared.Packets.ClientServer
|
||||||
{
|
{
|
||||||
public class NetAuthRequest : INetPacket
|
public struct NetAuthRequest : INetPacket
|
||||||
{
|
{
|
||||||
public PacketType Type => PacketType.AuthRequest;
|
public PacketType Type => PacketType.AuthRequest;
|
||||||
public string Username { get; set; }
|
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.AssemblyCompanyAttribute("Playvoi.Server")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[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.AssemblyProductAttribute("Playvoi.Server")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Playvoi.Server")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Playvoi.Server")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[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