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"
@using BlazorAnimation
@using TIAM.Core.Enums
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@using TIAM.Models.Dtos.Users
@using TIAM.Resources
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Models
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI
@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.Utility
@using AyCode.Core.Loggers
@using AyCode.Services.Loggers
@using AyCode.Services.SignalRs
@using TIAM.Core.Loggers
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Core.Helpers
@using MessagePack
@using MessagePack.Resolvers
@using AyCode.Core.Extensions;
@layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> localizer
@inject IWizardProcessor wizardProcessor
@inject ITransferDataService transferDataService
@inject ISessionService sessionService
@* @inject DevAdminSignalClient DevAdminSignalClient; *@
@inject DevAdminSignalClient devAdminSignalClient;
<PageTitle>Transfers</PageTitle>
<div class="text-center m-5">
@ -391,9 +387,28 @@
{
_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);
foreach (var transfer in TransferDataList)
@ -425,9 +440,6 @@
AppointmentsSource = AppointmentModels
};
base.OnInitialized();
}
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, SignaRClientLogItemWriter>();
//builder.Services.AddSingleton<IAcLogWriterClientBase, HttpClientLogItemWriter>();
//builder.Services.AddSingleton<DevAdminSignalClient>();
builder.Services.AddSingleton<DevAdminSignalClient>();
builder.Services.AddSingleton<SignalRService>();
builder.Services.AddSingleton<SumupService>();
builder.Services.AddScoped<AuthenticationStateProvider, CustomAuthStateProvider>();

View File

@ -43,7 +43,7 @@ builder.Services.AddScoped<AuctionDal>();
builder.Services.AddScoped<TransferDestinationDal>();
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 =>
{
@ -179,7 +179,7 @@ app.MapBlazorHub();
//app.UseResponseCompression();
app.MapHub<SignalRHub>("/TiamChatHub");
app.MapHub<LoggerSignalRHub>("/TiamLoggerHub");
//app.MapHub<DevAdminSignalRHub>("/DevAdminHub");
app.MapHub<DevAdminSignalRHub>("/DevAdminHub");
app.MapHub<GameHub>("/gamehub");
app.MapFallbackToFile("index.html");

View File

@ -1,15 +1,16 @@
using AyCode.Core.Loggers;
using Microsoft.AspNetCore.SignalR;
using System.ServiceModel.Channels;
using AyCode.Services.Server.SignalRs;
using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using AyCode.Services.SignalRs;
using Microsoft.AspNetCore.SignalR;
using TIAM.Database.DataLayers.Admins;
using MessagePack;
using MessagePack.Resolvers;
namespace TIAMWebApp.Server.Services;
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
public override async Task OnConnectedAsync()
@ -18,7 +19,7 @@ public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase>
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
public override async Task OnDisconnectedAsync(Exception? exception)
{
_logger.Error($"OnDisconnectedAsync", exception);
@ -31,18 +32,20 @@ public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable<IAcLogWriterBase>
//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}");
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 Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.DependencyInjection;
using TIAM.Entities.Transfers;
using TIAMWebApp.Shared.Application.Models.ClientSide;
using TIAMWebApp.Shared.Application.Utility;
@ -19,6 +20,8 @@ namespace TIAMWebApp.Shared.Application.Services
protected readonly HubConnection HubConnection;
protected readonly LoggerClient Logger;
public event Action<int, byte[]?> OnMessageReceived;
protected AcSignalRClientBase(string hubName, IEnumerable<IAcLogWriterClientBase> logWriters)
{
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))
.Build();
HubConnection.On<string, int, object?>("Post", Post);
_ = HubConnection.On<string, int, byte[]?>("MessageReceived", MessageReceived);
HubConnection.StartAsync().Forget();
}
@ -48,26 +51,29 @@ namespace TIAMWebApp.Shared.Application.Services
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 HubConnection.SendAsync("Get", "", SignalRTags.GetTransfersAsync);
HubConnection.SendAsync("MessageReceived", "", messageTag, message).Forget();
}
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();
await HubConnection.SendAsync("Post", SignalRTags.PostTransfersAsync, message);
return Task.CompletedTask;
}
}
}

View File

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