Files
caliverse_server/ServerCommon/Contents/ReservationEnterToServer/ReservationUserManager.cs
2025-05-01 07:20:41 +09:00

49 lines
1.4 KiB
C#

using System.Collections.Concurrent;
using ServerCore;
using ServerBase;
namespace ServerCommon;
public class ReservationUserManager
{
private ServerLogicBase? m_server_logic { get; set; }
private ConcurrentDictionary<string, DateTime> m_reserved_user_ids { get; set; } = new();
public int Count => m_reserved_user_ids.Count;
public void onInit(ServerLogicBase serverLogic) => m_server_logic = serverLogic;
public bool AddReserved(string userGuid)
{
if (checkReserved(userGuid))
{
return true;
}
NullReferenceCheckHelper.throwIfNull(m_server_logic, () => $"m_server_logic is null !!!");
var config = m_server_logic.getServerConfig();
return m_reserved_user_ids.TryAdd(userGuid, DateTime.UtcNow.AddMilliseconds(config.GameConfig.ReservationWaitTimeMSec));
}
public bool checkReserved(string userGuid) => m_reserved_user_ids.ContainsKey(userGuid);
public bool deleteReserved(string userGuid) => m_reserved_user_ids.Remove(userGuid, out _);
public async Task checkLimitReservedUsers()
{
await Task.CompletedTask;
var delete_list = (from user in m_reserved_user_ids
where user.Value <= DateTime.UtcNow select user.Key).ToList();
foreach (var del in delete_list)
{
deleteReserved(del);
}
}
}