using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace RainOpsMini.Services { public class BanSyncService : BackgroundService { private readonly BanService _banService; private readonly BanSyncState _syncState; private readonly ILogger _logger; public BanSyncService(BanService banService, BanSyncState syncState, ILogger logger) { _banService = banService; _syncState = syncState; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("BanSyncService is starting."); while (!stoppingToken.IsCancellationRequested) { try { _logger.LogInformation("Syncing bans to Bans.cfg..."); await _banService.SyncToConfigFileAsync(); _syncState.LastSyncTime = DateTime.Now; _syncState.NextSyncTime = DateTime.Now.Add(_syncState.Interval); _logger.LogInformation($"Ban sync completed. Next sync at: {_syncState.NextSyncTime}"); } catch (Exception ex) { _logger.LogError(ex, "Error occurred while syncing bans."); } await Task.Delay(_syncState.Interval, stoppingToken); } } } }