Refactor SignalR handling; add stock history tab
Refactored SignalR message handling to use strongly-typed SignalResponseDataMessage objects instead of JSON strings, updating event signatures and deserialization logic in MainLayout, MeasuringOut, and FruitBankSignalRClient. Added a new "Stock quantity changes" tab for administrators in GridProductDtoTemplate. Also added Microsoft.Extensions.ObjectPool package to the project.
This commit is contained in:
parent
ba05b5f37e
commit
80a1ce6a44
|
|
@ -37,6 +37,12 @@
|
||||||
|
|
||||||
|
|
||||||
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i, productId)">
|
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i, productId)">
|
||||||
|
<DxTabPage Text="Készlet mennyiség változások" Visible="@LoggedInModel.IsAdministrator">
|
||||||
|
@{
|
||||||
|
var contextIds = new[] { (object)productDto.Id };
|
||||||
|
<GridStockQuantityHistoryDtoTemplate ContextIds="@(contextIds)" ParentDataItem="@productDto" />
|
||||||
|
}
|
||||||
|
</DxTabPage>
|
||||||
<DxTabPage Text="Rendelések melyben megtalálható" Visible="@LoggedInModel.IsAdministrator">
|
<DxTabPage Text="Rendelések melyben megtalálható" Visible="@LoggedInModel.IsAdministrator">
|
||||||
@{
|
@{
|
||||||
//GetOrderDtosFromDbAsync(productId).Forget();
|
//GetOrderDtosFromDbAsync(productId).Forget();
|
||||||
|
|
|
||||||
|
|
@ -65,11 +65,11 @@ public partial class MainLayout : LayoutComponentBase
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage)
|
private async Task SignalRClientOnMessageReceived(int messageTag, SignalResponseDataMessage? responseDataMessage)
|
||||||
{
|
{
|
||||||
if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return;
|
if (messageTag != SignalRTags.NotificationReceived || !LoggedInModel.IsLoggedIn) return;
|
||||||
|
|
||||||
var notificationMessage = jsonMessage?.JsonTo<SignalRMessageToClientWithText<OrderDto>>();
|
var notificationMessage = responseDataMessage?.GetResponseData<SignalRMessageToClientWithText<OrderDto>>();
|
||||||
if (notificationMessage == null)
|
if (notificationMessage == null)
|
||||||
{
|
{
|
||||||
_logger.Error($"notificationMessage == null");
|
_logger.Error($"notificationMessage == null");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using AyCode.Core.Extensions;
|
using AyCode.Core.Extensions;
|
||||||
using AyCode.Core.Loggers;
|
using AyCode.Core.Loggers;
|
||||||
|
using AyCode.Services.SignalRs;
|
||||||
using DevExpress.Blazor;
|
using DevExpress.Blazor;
|
||||||
using FruitBank.Common.Dtos;
|
using FruitBank.Common.Dtos;
|
||||||
using FruitBank.Common.Entities;
|
using FruitBank.Common.Entities;
|
||||||
|
|
@ -51,14 +52,14 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
await base.OnInitializedAsync();
|
await base.OnInitializedAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SignalRClientOnMessageReceived(int messageTag, string? jsonMessage)
|
private async Task SignalRClientOnMessageReceived(int messageTag, SignalResponseDataMessage? responseDataMessage)
|
||||||
{
|
{
|
||||||
if (!LoggedInModel.IsLoggedIn) return;
|
if (!LoggedInModel.IsLoggedIn) return;
|
||||||
|
|
||||||
if (messageTag != SignalRTags.SendOrderItemDeleted && messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
|
if (messageTag != SignalRTags.SendOrderItemDeleted && messageTag != SignalRTags.SendOrderChanged && messageTag != SignalRTags.SendOrderItemChanged &&
|
||||||
messageTag != SignalRTags.SendOrderItemPalletChanged && messageTag != SignalRTags.SendProductChanged) return;
|
messageTag != SignalRTags.SendOrderItemPalletChanged && messageTag != SignalRTags.SendProductChanged) return;
|
||||||
|
|
||||||
_logger.DebugConditional($"SignalRClientOnMessageReceived received. {jsonMessage}");
|
_logger.DebugConditional($"SignalRClientOnMessageReceived received. {responseDataMessage}");
|
||||||
|
|
||||||
OrderDto? orderDto;
|
OrderDto? orderDto;
|
||||||
OrderItem? orderItem;
|
OrderItem? orderItem;
|
||||||
|
|
@ -67,7 +68,7 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
switch (messageTag)
|
switch (messageTag)
|
||||||
{
|
{
|
||||||
case SignalRTags.SendOrderItemDeleted:
|
case SignalRTags.SendOrderItemDeleted:
|
||||||
orderItem = jsonMessage?.JsonTo<OrderItem>();
|
orderItem = responseDataMessage?.GetResponseData<OrderItem>();
|
||||||
if (orderItem == null) break;
|
if (orderItem == null) break;
|
||||||
|
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
|
|
@ -79,7 +80,7 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
return;
|
return;
|
||||||
case SignalRTags.SendOrderChanged:
|
case SignalRTags.SendOrderChanged:
|
||||||
orderDto = jsonMessage?.JsonTo<OrderDto>();
|
orderDto = responseDataMessage?.GetResponseData<OrderDto>();
|
||||||
if (orderDto == null) break;
|
if (orderDto == null) break;
|
||||||
|
|
||||||
if (orderDto.DateOfReceipt == null) return;
|
if (orderDto.DateOfReceipt == null) return;
|
||||||
|
|
@ -104,7 +105,7 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
return;
|
return;
|
||||||
case SignalRTags.SendOrderItemChanged:
|
case SignalRTags.SendOrderItemChanged:
|
||||||
orderItemDto = jsonMessage?.JsonTo<OrderItemDto>();
|
orderItemDto = responseDataMessage?.GetResponseData<OrderItemDto>();
|
||||||
if (orderItemDto == null) break;
|
if (orderItemDto == null) break;
|
||||||
|
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
|
|
@ -123,7 +124,7 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
return;
|
return;
|
||||||
case SignalRTags.SendOrderItemPalletChanged:
|
case SignalRTags.SendOrderItemPalletChanged:
|
||||||
var orderItemPallet = jsonMessage?.JsonTo<OrderItemPallet>();
|
var orderItemPallet = responseDataMessage?.GetResponseData<OrderItemPallet>();
|
||||||
if (orderItemPallet == null) break;
|
if (orderItemPallet == null) break;
|
||||||
|
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
|
|
@ -143,7 +144,7 @@ namespace FruitBankHybrid.Shared.Pages
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
return;
|
return;
|
||||||
case SignalRTags.SendProductChanged:
|
case SignalRTags.SendProductChanged:
|
||||||
var productDto = jsonMessage?.JsonTo<ProductDto>();
|
var productDto = responseDataMessage?.GetResponseData<ProductDto>();
|
||||||
if (productDto == null) break;
|
if (productDto == null) break;
|
||||||
|
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
|
|
|
||||||
|
|
@ -40,13 +40,13 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// MessageTag, JSON
|
/// MessageTag, JSON
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public event Func<int, string?, Task> OnMessageReceived = null!;
|
public event Func<int, SignalResponseDataMessage?, Task> OnMessageReceived = null!;
|
||||||
|
|
||||||
protected override async Task MessageReceived(int messageTag, byte[] messageBytes)
|
protected override async Task MessageReceived(int messageTag, byte[] messageBytes)
|
||||||
{
|
{
|
||||||
var jsonMessage = messageBytes.MessagePackTo<SignalResponseJsonMessage>(ContractlessStandardResolver.Options);
|
var responseDataMessage = messageBytes.BinaryTo<SignalResponseDataMessage>();
|
||||||
|
|
||||||
await OnMessageReceived(messageTag, jsonMessage.ResponseData);
|
await OnMessageReceived(messageTag, responseDataMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendMessageToAllClients(int messageTag, string message)
|
private void SendMessageToAllClients(int messageTag, string message)
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="DevExpress.Data" Version="25.1.3" />
|
<PackageReference Include="DevExpress.Data" Version="25.1.3" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.ObjectPool" Version="10.0.1" />
|
||||||
<!--<PackageReference Include="DevExpress.Maui.Controls" Version="25.1.3" />
|
<!--<PackageReference Include="DevExpress.Maui.Controls" Version="25.1.3" />
|
||||||
<PackageReference Include="DevExpress.Maui.Editors" Version="25.1.3" />
|
<PackageReference Include="DevExpress.Maui.Editors" Version="25.1.3" />
|
||||||
<PackageReference Include="DevExpress.Maui.CollectionView" Version="25.1.3" />-->
|
<PackageReference Include="DevExpress.Maui.CollectionView" Version="25.1.3" />-->
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue