diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index 296eb943..f8a2d038 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -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 LogWriters @inject IStringLocalizer localizer @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService @inject ISessionService sessionService -@* @inject DevAdminSignalClient DevAdminSignalClient; *@ +@inject DevAdminSignalClient devAdminSignalClient; Transfers
@@ -391,9 +387,28 @@ { _logger = new LoggerClient(LogWriters.ToArray()); - //await DevAdminSignalClient.Get("", SignalRTags.GetTransfersAsync); + devAdminSignalClient.OnMessageReceived += (messageTag, message) => + { + if (messageTag == SignalRTags.PostTransfersAsync) + { + //InitializeDataSources(MessagePackSerializer.Deserialize>(message, ContractlessStandardResolver.Options)); - TransferDataList = await transferDataService.GetTransfersAsync(); + var json = message?.MessagePackTo(ContractlessStandardResolver.Options); + + InitializeDataSources(json?.JsonTo>() ?? []); + StateHasChanged(); + } + }; + + await devAdminSignalClient.Send("", SignalRTags.GetTransfersAsync, null); + + //InitializeDataSources(await transferDataService.GetTransfersAsync()); + base.OnInitialized(); + } + + private void InitializeDataSources(List transferDataList) + { + TransferDataList = transferDataList; AppointmentModels = new List(TransferDataList.Count); foreach (var transfer in TransferDataList) @@ -425,9 +440,6 @@ AppointmentsSource = AppointmentModels }; - - - base.OnInitialized(); } void ColumnChooserButton_Click() diff --git a/TIAMWebApp/Client/Program.cs b/TIAMWebApp/Client/Program.cs index fcafaf9c..b65e8d1a 100644 --- a/TIAMWebApp/Client/Program.cs +++ b/TIAMWebApp/Client/Program.cs @@ -44,7 +44,7 @@ builder.Services.AddSingleton(x => new ResourceManager("TIAMWebApp.Client.Resour builder.Services.AddSingleton(); builder.Services.AddSingleton(); //builder.Services.AddSingleton(); -//builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); diff --git a/TIAMWebApp/Server/Program.cs b/TIAMWebApp/Server/Program.cs index 87d47031..1c3b3c6e 100644 --- a/TIAMWebApp/Server/Program.cs +++ b/TIAMWebApp/Server/Program.cs @@ -43,7 +43,7 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSingleton(); -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("/TiamChatHub"); app.MapHub("/TiamLoggerHub"); -//app.MapHub("/DevAdminHub"); +app.MapHub("/DevAdminHub"); app.MapHub("/gamehub"); app.MapFallbackToFile("index.html"); diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 9599d4fb..96f4dfa7 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -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 logWriters) : Hub, ISignalRHubServer { - private TIAM.Core.Loggers.Logger _logger = new(logWriters.ToArray()); + private readonly TIAM.Core.Loggers.Logger _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 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 //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); - } } \ No newline at end of file diff --git a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs index 50680078..19511b4b 100644 --- a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs +++ b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs @@ -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 OnMessageReceived; + protected AcSignalRClientBase(string hubName, IEnumerable 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("Post", Post); + _ = HubConnection.On("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; } } } diff --git a/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs b/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs index 1e3caea0..7a48e3f0 100644 --- a/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs +++ b/TIAMWebApp/Shared/Utility/SignaRClientLogItemWriter.cs @@ -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)