using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Logging; namespace MRBot.PassiveTasks; internal interface IPassiveTaskList : IEnumerable { public void AddTask(IPassiveTask task); public void RemoveTask(IPassiveTask task); } internal sealed class PassiveTaskList : IPassiveTaskList { private readonly ILogger _logger; private readonly ConcurrentDictionary _tasks; public PassiveTaskList(ILogger logger) { _logger = logger; _tasks = new ConcurrentDictionary(); } public void AddTask(IPassiveTask task) { _logger.LogInformation($"Adding task {Enum.GetName(typeof(TaskType), task.Type)}"); _tasks[task.Type] = task; } public void RemoveTask(IPassiveTask task) { _logger.LogInformation($"Removing task {Enum.GetName(typeof(TaskType), task.Type)}"); _tasks.TryRemove(task.Type, out _); } public IEnumerator GetEnumerator() { return _tasks.Values.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } }