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(); } }