diff --git a/testFrontend/SafeNSound.FakeUser/MonitorService.cs b/testFrontend/SafeNSound.FakeUser/MonitorService.cs
index b1da7e6..83c9c29 100644
--- a/testFrontend/SafeNSound.FakeUser/MonitorService.cs
+++ b/testFrontend/SafeNSound.FakeUser/MonitorService.cs
@@ -94,7 +94,12 @@ public class MonitorService(ILogger<MonitorService> logger, UserStore userStore)
}
var userId = Random.Shared.GetItems(monitoredUsers, 1).First();
var budget = Random.Shared.NextDouble();
- await user.Client!.AddBudget(userId, budget);
+ await user.Client!.GetBudget(userId);
+ await user.Client!.AddBudget(userId, new() {
+ Amount = budget,
+ Reason = "Random budget assignment",
+ Venue = "FakeUser"
+ });
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
catch (Exception ex) {
diff --git a/testFrontend/SafeNSound.FakeUser/Program.cs b/testFrontend/SafeNSound.FakeUser/Program.cs
index 7c3eaff..0852e6f 100644
--- a/testFrontend/SafeNSound.FakeUser/Program.cs
+++ b/testFrontend/SafeNSound.FakeUser/Program.cs
@@ -15,7 +15,7 @@ builder.Services.AddSingleton<SafeNSoundConfiguration>();
builder.Services.AddSingleton<SafeNSoundAuthentication>();
builder.Services.AddSingleton<UserStore>();
builder.Services.AddHostedService<UserStore>(sp => sp.GetRequiredService<UserStore>());
-builder.Services.AddHostedService<RandomAlarmService>();
+builder.Services.AddHostedService<UserService>();
builder.Services.AddHostedService<MonitorService>();
// WrappedHttpClient.LogRequests = false;
diff --git a/testFrontend/SafeNSound.FakeUser/RandomAlarmService.cs b/testFrontend/SafeNSound.FakeUser/RandomAlarmService.cs
deleted file mode 100644
index a2e133f..0000000
--- a/testFrontend/SafeNSound.FakeUser/RandomAlarmService.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-namespace SafeNSound.FakeUser;
-
-public class RandomAlarmService(UserStore userStore) : IHostedService {
- private Task? _listenerTask;
- private readonly CancellationTokenSource _cts = new();
-
- public async Task StartAsync(CancellationToken cancellationToken) {
- _listenerTask = Run(_cts.Token);
- }
-
- private static readonly string[] validReasons = ["fall", "toilet"];
-
- private async Task Run(CancellationToken cancellationToken) {
- while (!cancellationToken.IsCancellationRequested) {
- try {
- var user = userStore.GetRandomUser();
- var currentAlarm = await user.Client!.GetAlarm();
- if (currentAlarm is null) {
- await user.Client!.SetAlarm(new Sdk.AlarmDto {
- Reason = Random.Shared.GetItems(validReasons, 1).First()
- });
- }
- else {
- await user.Client!.DeleteAlarm();
- }
- }
- catch (Exception ex) {
- Console.WriteLine($"Error setting/deleting alarm: {ex.Message}");
- }
-
- await Task.Delay(TimeSpan.FromMilliseconds(250), cancellationToken);
- }
- }
-
- public async Task StopAsync(CancellationToken cancellationToken) {
- await _cts.CancelAsync();
- }
-}
\ No newline at end of file
diff --git a/testFrontend/SafeNSound.FakeUser/UserService.cs b/testFrontend/SafeNSound.FakeUser/UserService.cs
new file mode 100644
index 0000000..e717458
--- /dev/null
+++ b/testFrontend/SafeNSound.FakeUser/UserService.cs
@@ -0,0 +1,59 @@
+namespace SafeNSound.FakeUser;
+
+public class UserService(ILogger<UserService> logger, UserStore userStore) : IHostedService {
+ private Task _alarmTask, _spendBudgetTask;
+ private readonly CancellationTokenSource _cts = new();
+
+ public async Task StartAsync(CancellationToken cancellationToken) {
+ _alarmTask = ManageAlarms(_cts.Token);
+ _spendBudgetTask = AssignBudget(_cts.Token);
+ }
+
+ private static readonly string[] validReasons = ["fall", "toilet"];
+
+ private async Task ManageAlarms(CancellationToken cancellationToken) {
+ while (!cancellationToken.IsCancellationRequested) {
+ try {
+ var user = userStore.GetRandomUser();
+ var currentAlarm = await user.Client!.GetAlarm();
+ if (currentAlarm is null) {
+ await user.Client!.SetAlarm(new Sdk.AlarmDto {
+ Reason = Random.Shared.GetItems(validReasons, 1).First()
+ });
+ }
+ else {
+ await user.Client!.DeleteAlarm();
+ }
+ }
+ catch (Exception ex) {
+ logger.LogError(ex, "Error setting/deleting alarm");
+ }
+
+ await Task.Delay(TimeSpan.FromMilliseconds(250), cancellationToken);
+ }
+ }
+
+ private async Task AssignBudget(CancellationToken cancellationToken) {
+ while (!cancellationToken.IsCancellationRequested) {
+ try {
+ var user = userStore.GetRandomUser();
+ var budget = await user.Client!.GetBudget();
+ await user.Client!.SpendBudget(new() {
+ Amount = Math.Min(budget.Amount, Random.Shared.NextDouble()),
+ Reason = "Random budget spending",
+ Venue = "The Store"
+ });
+ await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
+ }
+ catch (Exception ex) {
+ logger.LogError(ex, "Error spending budget");
+ }
+ }
+ }
+
+ public async Task StopAsync(CancellationToken cancellationToken) {
+ await _cts.CancelAsync();
+ await _alarmTask;
+ await _spendBudgetTask;
+ }
+}
\ No newline at end of file
|