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;