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