Developer 02 cfe5df4b1d feat(IAuthClient): IsConnected, ConnectionError und ConnectionError Eigenschaften hinzugefügt.
- Umwandlung der Eigenschaft IsConnectionFailed in eine Erweiterungsmethode.
2025-02-03 16:38:22 +01:00

65 lines
1.7 KiB
C#

using DigitalData.Auth.Abstractions;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace DigitalData.Auth.Client;
public class AuthClient : IAuthClient
{
private readonly HubConnection _connection;
private readonly Lazy<Task<bool>> _lazyInitiator;
private readonly ILogger? _logger;
private readonly ClientParams _params;
public AuthClient(IOptions<ClientParams> paramsOptions, HubConnectionBuilder connectionBuilder, ILogger<AuthClient>? logger = null)
{
_connection = connectionBuilder
.WithUrl(paramsOptions.Value.Url)
.Build();
_connection.On<string, string>(nameof(ReceiveMessageAsync), ReceiveMessageAsync);
_logger = logger;
_params = paramsOptions.Value;
_lazyInitiator = new(async () =>
{
try
{
await _connection.StartAsync();
IsConnected = true;
return true;
}
catch(Exception ex)
{
ConnectionError = ex;
throw;
}
});
}
public bool IsConnected { get; private set; } = false;
public Exception? ConnectionError { get; private set; }
public async Task StartAsync() => await _lazyInitiator.Value;
public async Task<bool> TryStartAsync()
{
try
{
return await _lazyInitiator.Value;
}
catch
{
return false;
}
}
public Task ReceiveMessageAsync(string user, string message) => Task.Run(() => _params.Events.OnMessageReceived(user, message, _logger));
}