SignalR, MessagePack, improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2024-05-23 09:03:30 +02:00
parent 24d6ea5b68
commit f261bdd748
6 changed files with 63 additions and 42 deletions

View File

@ -1,32 +1,28 @@
@page "/user/transfers" @page "/user/transfers"
@using BlazorAnimation @using BlazorAnimation
@using TIAM.Core.Enums @using TIAM.Core.Enums
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers @using TIAM.Entities.Transfers
@using TIAM.Models.Dtos.Users
@using TIAM.Resources @using TIAM.Resources
@using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces @using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI @using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@using TIAMWebApp.Shared.Application.Models.ClientSide.Messages
@using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@using AyCode.Core.Loggers
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@using AyCode.Services.SignalRs @using AyCode.Services.SignalRs
@using TIAM.Core.Loggers
@using TIAMWebApp.Shared.Application.Services @using TIAMWebApp.Shared.Application.Services
@using AyCode.Core.Helpers @using MessagePack
@using MessagePack.Resolvers
@using AyCode.Core.Extensions;
@layout AdminLayout @layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer @inject IStringLocalizer<TIAMResources> localizer
@inject IWizardProcessor wizardProcessor @inject IWizardProcessor wizardProcessor
@inject ITransferDataService transferDataService @inject ITransferDataService transferDataService
@inject ISessionService sessionService @inject ISessionService sessionService
@* @inject DevAdminSignalClient DevAdminSignalClient; *@ @inject DevAdminSignalClient devAdminSignalClient;
<PageTitle>Transfers</PageTitle> <PageTitle>Transfers</PageTitle>
<div class="text-center m-5"> <div class="text-center m-5">
@ -391,9 +387,28 @@
{ {
_logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray()); _logger = new LoggerClient<ManageTransfers>(LogWriters.ToArray());
//await DevAdminSignalClient.Get("", SignalRTags.GetTransfersAsync); devAdminSignalClient.OnMessageReceived += (messageTag, message) =>
{
if (messageTag == SignalRTags.PostTransfersAsync)
{
//InitializeDataSources(MessagePackSerializer.Deserialize<List<Transfer>>(message, ContractlessStandardResolver.Options));
TransferDataList = await transferDataService.GetTransfersAsync(); var json = message?.MessagePackTo<string>(ContractlessStandardResolver.Options);
InitializeDataSources(json?.JsonTo<List<Transfer>>() ?? []);
StateHasChanged();
}
};
await devAdminSignalClient.Send("", SignalRTags.GetTransfersAsync, null);
//InitializeDataSources(await transferDataService.GetTransfersAsync());
base.OnInitialized();
}
private void InitializeDataSources(List<Transfer> transferDataList)
{
TransferDataList = transferDataList;
AppointmentModels = new List<AppointmentModel>(TransferDataList.Count); AppointmentModels = new List<AppointmentModel>(TransferDataList.Count);
foreach (var transfer in TransferDataList) foreach (var transfer in TransferDataList)
@ -425,9 +440,6 @@
AppointmentsSource = AppointmentModels AppointmentsSource = AppointmentModels
}; };
base.OnInitialized();
} }
void ColumnChooserButton_Click() void ColumnChooserButton_Click()

View File

@ -44,7 +44,7 @@ builder.Services.AddSingleton(x => new ResourceManager("TIAMWebApp.Client.Resour
builder.Services.AddSingleton<IAcLogWriterClientBase, BrowserConsoleLogWriter>(); builder.Services.AddSingleton<IAcLogWriterClientBase, BrowserConsoleLogWriter>();
builder.Services.AddSingleton<IAcLogWriterClientBase, SignaRClientLogItemWriter>(); builder.Services.AddSingleton<IAcLogWriterClientBase, SignaRClientLogItemWriter>();
//builder.Services.AddSingleton<IAcLogWriterClientBase, HttpClientLogItemWriter>(); //builder.Services.AddSingleton<IAcLogWriterClientBase, HttpClientLogItemWriter>();
//builder.Services.AddSingleton<DevAdminSignalClient>(); builder.Services.AddSingleton<DevAdminSignalClient>();
builder.Services.AddSingleton<SignalRService>(); builder.Services.AddSingleton<SignalRService>();
builder.Services.AddSingleton<SumupService>(); builder.Services.AddSingleton<SumupService>();
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>(); builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();

View File

@ -43,7 +43,7 @@ builder.Services.AddScoped<AuctionDal>();
builder.Services.AddScoped<TransferDestinationDal>(); builder.Services.AddScoped<TransferDestinationDal>();
builder.Services.AddSingleton<AuthService>(); builder.Services.AddSingleton<AuthService>();
builder.Services.AddSignalR().AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)); builder.Services.AddSignalR();//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData));
builder.Services.AddCors(options => builder.Services.AddCors(options =>
{ {
@ -179,7 +179,7 @@ app.MapBlazorHub();
//app.UseResponseCompression(); //app.UseResponseCompression();
app.MapHub<SignalRHub>("/TiamChatHub"); app.MapHub<SignalRHub>("/TiamChatHub");
app.MapHub<LoggerSignalRHub>("/TiamLoggerHub"); app.MapHub<LoggerSignalRHub>("/TiamLoggerHub");
//app.MapHub<DevAdminSignalRHub>("/DevAdminHub"); app.MapHub<DevAdminSignalRHub>("/DevAdminHub");
app.MapHub<GameHub>("/gamehub"); app.MapHub<GameHub>("/gamehub");
app.MapFallbackToFile("index.html"); app.MapFallbackToFile("index.html");

View File

@ -1,15 +1,16 @@
using AyCode.Core.Loggers; using AyCode.Core.Extensions;
using Microsoft.AspNetCore.SignalR; using AyCode.Core.Loggers;
using System.ServiceModel.Channels;
using AyCode.Services.Server.SignalRs;
using AyCode.Services.SignalRs; using AyCode.Services.SignalRs;
using Microsoft.AspNetCore.SignalR;
using TIAM.Database.DataLayers.Admins; using TIAM.Database.DataLayers.Admins;
using MessagePack;
using MessagePack.Resolvers;
namespace TIAMWebApp.Server.Services; namespace TIAMWebApp.Server.Services;
public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase> logWriters) : Hub<ISignalRHubServer>, ISignalRHubServer public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase> logWriters) : Hub<ISignalRHubServer>, ISignalRHubServer
{ {
private TIAM.Core.Loggers.Logger<DevAdminSignalRHub> _logger = new(logWriters.ToArray()); private readonly TIAM.Core.Loggers.Logger<DevAdminSignalRHub> _logger = new(logWriters.ToArray());
// https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-3.1#strongly-typed-hubs // https://docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-3.1#strongly-typed-hubs
public override async Task OnConnectedAsync() public override async Task OnConnectedAsync()
@ -18,7 +19,7 @@ public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase>
await base.OnConnectedAsync(); await base.OnConnectedAsync();
} }
public override async Task OnDisconnectedAsync(Exception exception) public override async Task OnDisconnectedAsync(Exception? exception)
{ {
_logger.Error($"OnDisconnectedAsync", exception); _logger.Error($"OnDisconnectedAsync", exception);
@ -31,18 +32,20 @@ public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase>
//await Clients.Group(groupId).Post("", messageTag, message); //await Clients.Group(groupId).Post("", messageTag, message);
} }
public async Task Get(string user, int messageTag) public async Task Send(string user, int messageTag, object? message)
{
_logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
//await Clients.Caller.MessageReceived("", messageTag, MessagePackSerializer.Serialize(message, ContractlessStandardResolver.Options));
await Clients.Caller.MessageReceived("", messageTag, message?.ToMessagePack(ContractlessStandardResolver.Options));
}
public async Task MessageReceived(string user, int messageTag, byte[]? message)
{ {
_logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}"); _logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
if (messageTag == SignalRTags.GetTransfersAsync) if (messageTag == SignalRTags.GetTransfersAsync)
await Post("", SignalRTags.PostTransfersAsync, await adminDal.GetTransfersJsonAsync()); await Send("", SignalRTags.PostTransfersAsync, await adminDal.GetTransfersJsonAsync());
} }
public async Task Post(string user, int messageTag, object? message)
{
_logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
await Clients.Caller.Post("", messageTag, message);
}
} }

View File

@ -7,6 +7,7 @@ using AyCode.Services.SignalRs;
using MessagePack; using MessagePack;
using Microsoft.AspNetCore.SignalR.Client; using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using TIAM.Entities.Transfers;
using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Models.ClientSide;
using TIAMWebApp.Shared.Application.Utility; using TIAMWebApp.Shared.Application.Utility;
@ -19,6 +20,8 @@ namespace TIAMWebApp.Shared.Application.Services
protected readonly HubConnection HubConnection; protected readonly HubConnection HubConnection;
protected readonly LoggerClient Logger; protected readonly LoggerClient Logger;
public event Action<int, byte[]?> OnMessageReceived;
protected AcSignalRClientBase(string hubName, IEnumerable<IAcLogWriterClientBase> logWriters) protected AcSignalRClientBase(string hubName, IEnumerable<IAcLogWriterClientBase> logWriters)
{ {
Logger = new LoggerClient(GetType().Name, logWriters.ToArray()); Logger = new LoggerClient(GetType().Name, logWriters.ToArray());
@ -28,7 +31,7 @@ namespace TIAMWebApp.Shared.Application.Services
//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)) //.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData))
.Build(); .Build();
HubConnection.On<string, int, object?>("Post", Post); _ = HubConnection.On<string, int, byte[]?>("MessageReceived", MessageReceived);
HubConnection.StartAsync().Forget(); HubConnection.StartAsync().Forget();
} }
@ -48,26 +51,29 @@ namespace TIAMWebApp.Shared.Application.Services
await HubConnection.DisposeAsync(); await HubConnection.DisposeAsync();
} }
public virtual async Task Get(string user, int messageTag) public virtual async Task Send(string user, int messageTag, object? message)
{ {
Logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}"); Logger.Info($"Send; {nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
await StartConnection(); await StartConnection();
HubConnection.SendAsync("MessageReceived", "", messageTag, message).Forget();
await HubConnection.SendAsync("Get", "", SignalRTags.GetTransfersAsync);
} }
public virtual async Task Post(string user, int messageTag, object? message) public virtual Task MessageReceived(string user, int messageTag, byte[]? message)
{ {
Logger.Info($"{nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}"); Logger.Info($"MessageReceived; {nameof(user)}: {user}; {nameof(messageTag)}: {messageTag}");
if (messageTag == SignalRTags.PostTransfersAsync) try
{ {
return; OnMessageReceived(messageTag, message);
}
catch(Exception ex)
{
Logger.Error($"MessageReceived error; {ex.Message}", ex);
throw;
} }
await StartConnection(); return Task.CompletedTask;
await HubConnection.SendAsync("Post", SignalRTags.PostTransfersAsync, message);
} }
} }
} }

View File

@ -16,7 +16,7 @@ namespace TIAMWebApp.Shared.Application.Utility
{ {
private readonly HubConnection _hubConnection = new HubConnectionBuilder() private readonly HubConnection _hubConnection = new HubConnectionBuilder()
.WithUrl($"{Setting.BaseUrl}/TiamLoggerHub") .WithUrl($"{Setting.BaseUrl}/TiamLoggerHub")
.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData)) //.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData))
.Build(); .Build();
public SignaRClientLogItemWriter() : base(AppType.Web, LogLevel.Detail) public SignaRClientLogItemWriter() : base(AppType.Web, LogLevel.Detail)