diff --git a/AccessQueuePlayground/Components/Pages/Home.razor b/AccessQueuePlayground/Components/Pages/Home.razor index b9dc7c2..813ddb8 100644 --- a/AccessQueuePlayground/Components/Pages/Home.razor +++ b/AccessQueuePlayground/Components/Pages/Home.razor @@ -7,8 +7,11 @@ AccessQueue Playground - - +

+ + + +

@if (Status != null) {

Users with access

@@ -25,6 +28,11 @@ + + + + +

Users in queue

@@ -41,6 +49,11 @@ + + + + +

Inactive users

@@ -86,4 +99,19 @@ { Manager.SetUserActive(userId, isActive); } + + public void RevokeAccess(Guid userId) + { + Manager.RevokeAccess(userId); + } + + public void RevokeAllAccess() + { + Manager.RevokeAllAccess(); + } + + public void Reset() + { + Manager.Reset(); + } } \ No newline at end of file diff --git a/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs b/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs index 77765ce..b4cf858 100644 --- a/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs +++ b/AccessQueuePlayground/Services/AccessQueueBackgroundService.cs @@ -17,9 +17,17 @@ namespace AccessQueuePlayground.Services { while (!stoppingToken.IsCancellationRequested) { - await _accessQueueManager.RecalculateStatus(); - await Task.Delay(1000, stoppingToken); // Run every second + try + { + await _accessQueueManager.RecalculateStatus(); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + await Task.Delay(100, stoppingToken); // Run every second } + Console.WriteLine("Stopping now because who tf knows why"); } } } diff --git a/AccessQueuePlayground/Services/AccessQueueManager.cs b/AccessQueuePlayground/Services/AccessQueueManager.cs index 724f8f5..15645b1 100644 --- a/AccessQueuePlayground/Services/AccessQueueManager.cs +++ b/AccessQueuePlayground/Services/AccessQueueManager.cs @@ -8,7 +8,7 @@ namespace AccessQueuePlayground.Services public class AccessQueueManager : IAccessQueueManager { private readonly IAccessService _accessService; - private readonly ConcurrentDictionary _users; + private ConcurrentDictionary _users; private AccessQueueStatus _status; public event Action? StatusUpdated; @@ -39,8 +39,7 @@ namespace AccessQueuePlayground.Services public void SetUserActive(Guid userId, bool isActive) { - var user = _users[userId]; - if (user != null) + if (_users.TryGetValue(userId, out var user)) { user.Active = isActive; } @@ -80,5 +79,27 @@ namespace AccessQueuePlayground.Services _status = newStatus; NotifyStatusUpdated(); } + + public void RevokeAccess(Guid userId) + { + var user = _users[userId]; + user.Active = false; + user.LatestResponse = null; + _accessService.RevokeAccess(userId); + } + + public void RevokeAllAccess() + { + foreach (var user in _users.Values) + { + RevokeAccess(user.Id); + } + } + + public void Reset() + { + RevokeAllAccess(); + _users = []; + } } } diff --git a/AccessQueuePlayground/Services/IAccessQueueManager.cs b/AccessQueuePlayground/Services/IAccessQueueManager.cs index db1ccb1..137e45b 100644 --- a/AccessQueuePlayground/Services/IAccessQueueManager.cs +++ b/AccessQueuePlayground/Services/IAccessQueueManager.cs @@ -9,6 +9,9 @@ namespace AccessQueuePlayground.Services public AccessQueueStatus GetStatus(); public Guid AddUser(); public void SetUserActive(Guid userId, bool isActive); + public void RevokeAccess(Guid userId); + public void RevokeAllAccess(); + public void Reset(); } } diff --git a/AccessQueueService/Data/TakeANumberAccessQueueRepo.cs b/AccessQueueService/Data/TakeANumberAccessQueueRepo.cs index 1397427..55c4c8c 100644 --- a/AccessQueueService/Data/TakeANumberAccessQueueRepo.cs +++ b/AccessQueueService/Data/TakeANumberAccessQueueRepo.cs @@ -68,11 +68,10 @@ namespace AccessQueueService.Data int filledSpots = 0; while (filledSpots < openSpots && _nowServing < _nextUnusedTicket) { - if (_accessQueue.TryGetValue(_nowServing, out var nextUser)) + if (_accessQueue.TryGetValue(_nowServing++, out var nextUser)) { _accessQueue.Remove(_nowServing); _queueNumbers.Remove(nextUser.UserId); - _nowServing++; if (nextUser.LastActive < activeCutoff) { // User is inactive, throw away their ticket diff --git a/AccessQueueService/Services/AccessService.cs b/AccessQueueService/Services/AccessService.cs index 7b23055..1562dc0 100644 --- a/AccessQueueService/Services/AccessService.cs +++ b/AccessQueueService/Services/AccessService.cs @@ -8,8 +8,6 @@ namespace AccessQueueService.Services private readonly IConfiguration _configuration; private readonly IAccessQueueRepo _accessQueueRepo; - //private readonly Dictionary _accessTickets = new(); - //private readonly Queue _accessQueue = new(); private readonly SemaphoreSlim _queueLock = new(1, 1); private readonly int EXP_SECONDS; private readonly int ACT_SECONDS;