diff --git a/DigitalData.Auth.Abstractions/IAuthClient.cs b/DigitalData.Auth.Abstractions/IAuthClient.cs index a6aca07..db492b6 100644 --- a/DigitalData.Auth.Abstractions/IAuthClient.cs +++ b/DigitalData.Auth.Abstractions/IAuthClient.cs @@ -3,6 +3,4 @@ public interface IAuthClient { Task ReceiveMessage(string user, string message); - - Task GetMessage(); } \ No newline at end of file diff --git a/DigitalData.Auth.Client/AuthClient.cs b/DigitalData.Auth.Client/AuthClient.cs new file mode 100644 index 0000000..d17a72b --- /dev/null +++ b/DigitalData.Auth.Client/AuthClient.cs @@ -0,0 +1,32 @@ +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 ILogger? _logger; + + private readonly ClientParams _params; + + public AuthClient(IOptions paramsOptions, HubConnectionBuilder connectionBuilder, ILogger? logger = null) + { + _connection = connectionBuilder + .WithUrl(paramsOptions.Value.Url) + .Build(); + + _connection.On(nameof(ReceiveMessage), ReceiveMessage); + + _logger = logger; + + _params = paramsOptions.Value; + } + + public async Task StartAsync() => await _connection.StartAsync(); + + public Task ReceiveMessage(string user, string message) => _params.Events.OnMessageReceived(user, message, _logger); +} \ No newline at end of file diff --git a/DigitalData.Auth.Client/ClientEvents.cs b/DigitalData.Auth.Client/ClientEvents.cs new file mode 100644 index 0000000..77d2830 --- /dev/null +++ b/DigitalData.Auth.Client/ClientEvents.cs @@ -0,0 +1,12 @@ +using Microsoft.Extensions.Logging; + +namespace DigitalData.Auth.Client +{ + public class ClientEvents + { + public Func OnMessageReceived { get; set; } = (user, message, logger) + => Task.Run( + () => logger?.LogInformation("{user}: {message}", user, message) + ); + } +} \ No newline at end of file diff --git a/DigitalData.Auth.Client/ClientParams.cs b/DigitalData.Auth.Client/ClientParams.cs new file mode 100644 index 0000000..dec5d23 --- /dev/null +++ b/DigitalData.Auth.Client/ClientParams.cs @@ -0,0 +1,8 @@ +namespace DigitalData.Auth.Client; + +public class ClientParams +{ + public required string Url { get; init; } + + public readonly ClientEvents Events = new(); +} \ No newline at end of file diff --git a/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj b/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj index 9995872..79f75ca 100644 --- a/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj +++ b/DigitalData.Auth.Client/DigitalData.Auth.Client.csproj @@ -9,4 +9,8 @@ + + + +