@@ -186,9 +188,7 @@
{
base.OnInitialized();
var myId = SessionService.User.UserId;
- ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId);
-
+ var companyPropertiesByOwner = ServiceProviderDataService.GetPropertiesByOwnerIdAsync(myId);
}
-
}
diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor
index 65f5084e..7fc202ba 100644
--- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor
+++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor
@@ -18,6 +18,7 @@
@using AyCode.Core.Extensions;
@using AyCode.Core
@using AyCode.Core.Helpers
+@using TIAM.Services
@layout AdminLayout
@inject IEnumerable
LogWriters
@inject IStringLocalizer localizer
@@ -389,11 +390,12 @@
{
_logger = new LoggerClient(LogWriters.ToArray());
- devAdminSignalClient.SendRequestToServerAsync(SignalRTags.GetTransfersAsync, responseBytes =>
+ devAdminSignalClient.SendMessageToServerAsync>(SignalRTags.GetTransfersAsync, response =>
{
- var transfers = responseBytes.MessagePackTo(ContractlessStandardResolver.Options).JsonTo>();
+ if (response.Status == SignalResponseStatus.Error)
+ return;
- InitializeDataSources(transfers ?? []);
+ InitializeDataSources(response.ResponseData ?? []);
StateHasChanged();
}).Forget();
diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs
index b68adfc2..5303159b 100644
--- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs
+++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs
@@ -380,10 +380,10 @@ namespace TIAMWebApp.Server.Controllers
[Route(APIUrls.GetTransfersRouteName)]
public async Task GetTransfers()
{
- var token = _authService.GetAuthTokenFromRequest(Request);
- _logger.Detail(token);
- var result = await _adminDal.GetTransfersJsonAsync();
+ //var token = _authService.GetAuthTokenFromRequest(Request);
+ //_logger.Detail(token);
+ var result = await _adminDal.GetTransfersJsonAsync();
return result;
}
diff --git a/TIAMWebApp/Server/Program.cs b/TIAMWebApp/Server/Program.cs
index 770482b7..71c8504b 100644
--- a/TIAMWebApp/Server/Program.cs
+++ b/TIAMWebApp/Server/Program.cs
@@ -41,6 +41,9 @@ builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddSingleton();
+builder.Services.AddScoped();
+builder.Services.AddScoped();
+
builder.Services.AddSignalR();//.AddMessagePackProtocol(options => options.SerializerOptions = MessagePackSerializerOptions.Standard.WithSecurity(MessagePackSecurity.UntrustedData));
diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs
index 9a900624..29393e19 100644
--- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs
+++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs
@@ -8,10 +8,12 @@ using MessagePack;
using MessagePack.Resolvers;
using AyCode.Services.Server.SignalRs;
using System.ServiceModel.Channels;
+using TIAM.Services;
+using TIAMWebApp.Server.Controllers;
namespace TIAMWebApp.Server.Services;
-public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable logWriters) : Hub, IAcSignalRHubServer
+public class DevAdminSignalRHub(AdminDal adminDal, ServiceProviderAPIController serviceProviderAPIController, TransferDataAPIController transferDataAPIController, IEnumerable logWriters) : Hub, IAcSignalRHubServer
{
private readonly TIAM.Core.Loggers.Logger _logger = new(logWriters.ToArray());
@@ -35,41 +37,61 @@ public class DevAdminSignalRHub(AdminDal adminDal, IEnumerable
await base.OnDisconnectedAsync(exception);
}
- public async Task OnRequestMessage(int messageTag, int requestId)
- {
- _logger.Info($"Server OnRequestMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
+ //public async Task OnRequestMessage(int messageTag, int requestId)
+ //{
+ // _logger.Info($"Server OnRequestMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
- if (messageTag == SignalRTags.GetTransfersAsync)
- await ResponseToCaller(SignalRTags.PostTransfersAsync, await adminDal.GetTransfersJsonAsync(), requestId);
- }
+ // if (messageTag == SignalRTags.GetTransfersAsync)
+ // await ResponseToCaller(SignalRTags.PostTransfersAsync, await adminDal.GetTransfersJsonAsync(), requestId);
+ //}
- public async Task OnReceiveMessage(int messageTag, byte[] message, int? requestId)
+ public async Task OnReceiveMessage(int messageTag, byte[]? message, int? requestId)
{
var logText = $"Server OnReceiveMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}";
- if (message.Length == 0) _logger.Warning($"message.Length == 0! {logText}");
+ if (message is { Length: 0 }) _logger.Warning($"message.Length == 0! {logText}");
else _logger.Info(logText);
- //if (messageTag == SignalRTags.GetTransfersAsync)
- // ResponseToClient(messageTag, await adminDal.GetTransfersJsonAsync(), requestId);
+ try
+ {
+ if (messageTag == SignalRTags.GetTransfersAsync)
+ {
+ await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, await transferDataAPIController.GetTransfers()), requestId);
+ }
+ else if (messageTag == SignalRTags.GetPropertiesByOwnerIdAsync)
+ {
+ var ownerId = message.MessagePackTo().Id;
+ var json = (await serviceProviderAPIController.GetServiceProvidersByOwnerId(ownerId)).ToJson();
+
+ await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Success, json), requestId);
+ }
+
+ return;
+ }
+ catch (Exception ex)
+ {
+ _logger.Error($"Server OnReceiveMessage; {ex.Message}", ex);
+ }
+
+ await ResponseToCaller(messageTag, new SignalResponseMessage(SignalResponseStatus.Error, null), requestId);
}
- protected async Task ResponseToCaller(int messageTag, object message, int requestId)
+ protected async Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId)
=> await SendMessageToClient(Clients.Caller, messageTag, message, requestId);
- protected async Task SendMessageToClient(ISignalRHubItemServer sendTo, int messageTag, object message, int? requestId = null)
+ protected async Task SendMessageToClient(ISignalRHubItemServer sendTo, int messageTag, ISignalRMessage message, int? requestId = null)
{
_logger.Info($"Server SendMessageToClient; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
await sendTo.OnReceiveMessage(messageTag, message.ToMessagePack(ContractlessStandardResolver.Options), requestId);
}
- protected void SendRequestToClient(ISignalRHubItemServer sendTo, int messageTag, int requestId)
- {
- _logger.Info($"Server SendRequestToClient; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
+ //protected void SendRequestToClient(ISignalRHubItemServer sendTo, int messageTag, int requestId)
+ //{
+ // _logger.Info($"Server SendRequestToClient; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}");
- sendTo.OnRequestMessage(messageTag, requestId).Forget();
- }
+ // sendTo.OnRequestMessage(messageTag, requestId).Forget();
+ //}
public async Task SendMessageToGroup(string groupId, int messageTag, string message)
{
diff --git a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs
index c81a9fcc..feee21e4 100644
--- a/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs
+++ b/TIAMWebApp/Shared/Services/AcSignalRClientBase.cs
@@ -1,4 +1,5 @@
using System.Collections.Concurrent;
+using System.Security.Cryptography.X509Certificates;
using AyCode.Core;
using AyCode.Core.Enums;
using AyCode.Core.Extensions;
@@ -12,6 +13,7 @@ using MessagePack;
using MessagePack.Resolvers;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.IdentityModel.Tokens;
using TIAM.Entities.Transfers;
using TIAMWebApp.Shared.Application.Models.ClientSide;
using TIAMWebApp.Shared.Application.Utility;
@@ -28,7 +30,9 @@ namespace TIAMWebApp.Shared.Application.Services
protected readonly LoggerClient Logger;
public event Action OnMessageReceived;
- public event Action OnMessageRequested;
+ //public event Action OnMessageRequested;
+
+ public int Timeout = 10000;
protected AcSignalRClientBase(string hubName, IEnumerable logWriters)
{
@@ -41,8 +45,8 @@ namespace TIAMWebApp.Shared.Application.Services
HubConnection.Closed += HubConnection_Closed;
- _ = HubConnection.On("OnReceiveMessage", OnReceiveMessage);
- _ = HubConnection.On(nameof(IAcSignalRHubClient.OnRequestMessage), OnRequestMessage);
+ _ = HubConnection.On(nameof(IAcSignalRHubClient.OnReceiveMessage), OnReceiveMessage);
+ //_ = HubConnection.On(nameof(IAcSignalRHubClient.OnRequestMessage), OnRequestMessage);
HubConnection.StartAsync().Forget();
@@ -63,7 +67,7 @@ namespace TIAMWebApp.Shared.Application.Services
await HubConnection.StartAsync();
if (HubConnection.State != HubConnectionState.Connected)
- await TaskHelper.WaitToAsync(() => HubConnection.State == HubConnectionState.Connected, 10000, 25);
+ await TaskHelper.WaitToAsync(() => HubConnection.State == HubConnectionState.Connected, Timeout, 25);
}
public async Task StopConnection()
@@ -72,60 +76,78 @@ namespace TIAMWebApp.Shared.Application.Services
await HubConnection.DisposeAsync();
}
- public virtual async Task SendMessageToServerAsync(int messageTag, object message, int? requestId = null)
+ public virtual Task SendMessageToServerAsync(int messageTag)
+ => SendMessageToServerAsync(messageTag, null, AcDomain.NextUniqueInt32);
+
+ public virtual Task SendMessageToServerAsync(int messageTag, int requestId)
+ => SendMessageToServerAsync(messageTag, null, requestId);
+
+ public virtual async Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int? requestId)
{
Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
await StartConnection();
- HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, message, requestId).Forget();
+ HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, message?.ToMessagePack(ContractlessStandardResolver.Options), requestId).Forget();
}
- public virtual void SendRequestToServerAsync(int messageTag)
- => SendRequestToServerAsync(messageTag, AcDomain.NextUniqueInt32).Forget();
+ public virtual Task SendMessageToServerAsync(int messageTag) where TResponse : class
+ => SendMessageToServerAsync(messageTag, null, AcDomain.NextUniqueInt32);
- public virtual async Task SendRequestToServerAsync(int messageTag, int requestId)
+ public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message) where TResponse : class
+ => SendMessageToServerAsync(messageTag, message, AcDomain.NextUniqueInt32);
+
+ public virtual async Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int requestId) where TResponse : class
{
- Logger.DebugConditional($"Client SendRequestToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
-
- await StartConnection();
-
- HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnRequestMessage), messageTag, requestId).Forget();
- }
-
- public virtual async Task SendRequestToServerAsync(int messageTag)
- {
- var requestId = AcDomain.NextUniqueInt32;
-
- Logger.DebugConditional($"Client SendRequestToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
+ Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
_responseByRequestId[requestId] = null;
- await SendRequestToServerAsync(messageTag, requestId);
+ await SendMessageToServerAsync(messageTag, message, requestId);
try
{
- if (await TaskHelper.WaitToAsync(() => _responseByRequestId[requestId] != null, 10000, 25) &&
- _responseByRequestId.TryRemove(requestId, out var obj) && obj is byte[] messagePackBytes)
+ if (await TaskHelper.WaitToAsync(() => _responseByRequestId[requestId] != null, Timeout, 25) &&
+ _responseByRequestId.TryRemove(requestId, out var obj) && obj is ISignalResponseMessage responseMessage)
{
- var json = messagePackBytes.MessagePackTo(ContractlessStandardResolver.Options);
- return json.JsonTo() ?? default;
+ if (responseMessage.Status == SignalResponseStatus.Error || responseMessage.ResponseData == null)
+ {
+ Logger.Error($"Client SendMessageToServerAsync; tag: {messageTag}; Status: {responseMessage.Status}");
+ return default;
+ }
+
+ return responseMessage.ResponseData.JsonTo();
}
}
catch (Exception ex)
{
- Logger.Error($"SendRequestToServerAsync; messageTag: {messageTag}; requestId: {requestId}; {ex.Message}", ex);
+ Logger.Error($"SendMessageToServerAsync; messageTag: {messageTag}; requestId: {requestId}; {ex.Message}", ex);
}
_responseByRequestId.TryRemove(requestId, out _);
return default;
}
- public virtual Task SendRequestToServerAsync(int messageTag, Action responseCallback)
+ public virtual Task SendMessageToServerAsync(int messageTag, Action> responseCallback)
+ => SendMessageToServerAsync(messageTag, null, responseCallback);
+
+ public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, Action> responseCallback)
{
var requestId = AcDomain.NextUniqueInt32;
- _responseByRequestId[requestId] = responseCallback;
- return SendRequestToServerAsync(messageTag, requestId);
+ _responseByRequestId[requestId] = new Action>(responseMessage =>
+ {
+ TResponseData? responseData = default;
+
+ if (responseMessage.Status == SignalResponseStatus.Success)
+ {
+ responseData = string.IsNullOrEmpty(responseMessage.ResponseData) ? default : responseMessage.ResponseData.JsonTo();
+ }
+ else Logger.Error($"Client SendMessageToServerAsync callback; tag: {messageTag}; Status: {responseMessage.Status}");
+
+ responseCallback(new SignalResponseMessage(responseMessage.Status, responseData));
+ });
+
+ return SendMessageToServerAsync(messageTag, message, requestId);
}
public virtual Task OnReceiveMessage(int messageTag, byte[] message, int? requestId)
@@ -144,16 +166,18 @@ namespace TIAMWebApp.Shared.Application.Services
switch (_responseByRequestId[reqId])
{
case null:
- _responseByRequestId[reqId] = message;
+ _responseByRequestId[reqId] = message.MessagePackTo>();
return Task.CompletedTask;
- case Action messagePackCallback:
+ case Action> messagePackCallback:
_responseByRequestId.TryRemove(reqId, out _);
- messagePackCallback.Invoke(message);
+ messagePackCallback.Invoke(message.MessagePackTo>(ContractlessStandardResolver.Options));
return Task.CompletedTask;
//case Action jsonCallback:
+ // _responseByRequestId.TryRemove(reqId, out _);
+
// jsonCallback.Invoke(message.MessagePackTo());
// return Task.CompletedTask;
@@ -175,23 +199,22 @@ namespace TIAMWebApp.Shared.Application.Services
return Task.CompletedTask;
}
+ //public virtual Task OnRequestMessage(int messageTag, int requestId)
+ //{
+ // Logger.DebugConditional($"Client OnRequestMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
- public virtual Task OnRequestMessage(int messageTag, int requestId)
- {
- Logger.DebugConditional($"Client OnRequestMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId};");
+ // try
+ // {
+ // OnMessageRequested(messageTag, requestId);
+ // }
+ // catch(Exception ex)
+ // {
+ // Logger.Error($"Client OnReceiveMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; {ex.Message}", ex);
+ // throw;
+ // }
- try
- {
- OnMessageRequested(messageTag, requestId);
- }
- catch(Exception ex)
- {
- Logger.Error($"Client OnReceiveMessage; {nameof(messageTag)}: {messageTag}; {nameof(requestId)}: {requestId}; {ex.Message}", ex);
- throw;
- }
+ // return Task.CompletedTask;
- return Task.CompletedTask;
-
- }
+ //}
}
}
diff --git a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs
index 83c203d5..382eec30 100644
--- a/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs
+++ b/TIAMWebApp/Shared/Services/ServiceProviderDataService.cs
@@ -4,7 +4,9 @@ using Microsoft.JSInterop;
using Newtonsoft.Json;
using SkiaSharp;
using System.Net.Http.Json;
+using AyCode.Core.Helpers;
using AyCode.Services.Loggers;
+using AyCode.Services.SignalRs;
using TIAM.Core.Loggers;
using TIAM.Database.DataLayers.Users;
using TIAM.Entities.Products;
@@ -14,6 +16,8 @@ using TIAMWebApp.Shared.Application.Interfaces;
using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.ClientSide;
using TIAMWebApp.Shared.Application.Utility;
+using TIAM.Services;
+using System.Linq;
namespace TIAMWebApp.Shared.Application.Services
{
@@ -21,13 +25,16 @@ namespace TIAMWebApp.Shared.Application.Services
{
private readonly HttpClient http;
private readonly ISecureStorageHandler secureStorageHandler;
- private readonly ILogger _logger;
-
+ private readonly LoggerClient _logger;
- public ServiceProviderDataService(HttpClient http, ISecureStorageHandler secureStorageHandler, IEnumerable logWriters)
+ private DevAdminSignalClient _devAdminSignalClient;
+
+ public ServiceProviderDataService(HttpClient http, ISecureStorageHandler secureStorageHandler, DevAdminSignalClient devAdminSignalClient, IEnumerable logWriters)
{
this.http = http;
this.secureStorageHandler = secureStorageHandler;
+
+ _devAdminSignalClient = devAdminSignalClient;
_logger = new LoggerClient(logWriters.ToArray());
}
@@ -70,24 +77,41 @@ namespace TIAMWebApp.Shared.Application.Services
//17.
public async Task?> GetPropertiesByOwnerIdAsync(Guid id)
{
- var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetServiceProvidersByOwnerId}";
- var response = await http.PostAsJsonAsync(url, id);
- if (response.IsSuccessStatusCode)
- {
- var result = await response.Content.ReadFromJsonAsync>();
- string resultString = "";
- foreach (var item in result)
- {
- resultString += item.Value + ", ";
- }
- _logger.Debug(resultString);
- return result;
- }
- else
- {
- return null;
- }
-
+ Dictionary? companyPropertiesByOwner;
+
+ //_devAdminSignalClient.SendMessageToServerAsync>(SignalRTags.GetPropertiesByOwnerIdAsync, new SignalRequestByIdMessage(id), response =>
+ //{
+ // if (response.Status == SignalResponseStatus.Error)
+ // return;
+
+ // companyPropertiesByOwner = response.ResponseData;
+ // if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner async: {string.Join("; ", companyPropertiesByOwner.Values)}");
+ //}).Forget();
+
+
+ companyPropertiesByOwner = await _devAdminSignalClient.SendMessageToServerAsync>(SignalRTags.GetPropertiesByOwnerIdAsync, new SignalRequestByIdMessage(id));
+ if (companyPropertiesByOwner != null) _logger.DetailConditional($"companyPropertiesByOwner: {string.Join("; ", companyPropertiesByOwner.Values)}");
+
+ return companyPropertiesByOwner;
+
+ //var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetServiceProvidersByOwnerId}";
+ //var response = await http.PostAsJsonAsync(url, id);
+ //if (response.IsSuccessStatusCode)
+ //{
+ // var result = await response.Content.ReadFromJsonAsync>();
+ // string resultString = "";
+ // foreach (var item in result)
+ // {
+ // resultString += item.Value + ", ";
+ // }
+ // _logger.DetailConditional(resultString);
+ // return result;
+ //}
+ //else
+ //{
+ // return null;
+ //}
+
}
//18.
diff --git a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj
index 603e5382..c4958048 100644
--- a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj
+++ b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj
@@ -36,6 +36,7 @@
+