// // NosSmoothService.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using NosSmooth.Core.Client; using NosSmooth.Core.Extensions; using NosSmooth.LocalBinding; using NosSmooth.PacketSerializer.Extensions; using NosSmooth.PacketSerializer.Packets; namespace NosSmooth.Comms.Inject; /// /// Nostale client runner. /// public class NosSmoothService : BackgroundService { private readonly IServiceProvider _services; private readonly IPacketTypesRepository _packetTypesRepository; private readonly NosBindingManager _bindingManager; private readonly IHostLifetime _lifetime; private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// /// The services. /// The packet types repository. /// The binding manager. /// The lifetime. /// The logger. public NosSmoothService ( IServiceProvider services, IPacketTypesRepository packetTypesRepository, NosBindingManager bindingManager, IHostLifetime lifetime, ILogger logger ) { _services = services; _packetTypesRepository = packetTypesRepository; _bindingManager = bindingManager; _lifetime = lifetime; _logger = logger; } /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var packetResult = _packetTypesRepository.AddDefaultPackets(); if (!packetResult.IsSuccess) { _logger.LogResultError(packetResult); return; } var bindingResult = _bindingManager.Initialize(); if (!bindingResult.IsSuccess) { _logger.LogResultError(bindingResult); return; } var nostaleClient = _services.GetRequiredService(); var runResult = await nostaleClient.RunAsync(stoppingToken); if (!runResult.IsSuccess) { _logger.LogResultError(runResult); await _lifetime.StopAsync(default); } } }