From 0585940f8392eb8e9ebd9ccd14fe8cc00842bd91 Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 12 Aug 2024 13:21:43 +0200 Subject: [PATCH] improvements, fixes, etc... --- .../Services/AcSessionService.cs | 13 +++++ .../Services/AcSignalRClientBase.cs | 58 +++++++------------ .../Services/IAcSessionItem.cs | 6 ++ .../Services/SignalRRequestModel.cs | 19 ++++++ 4 files changed, 58 insertions(+), 38 deletions(-) create mode 100644 AyCode.Blazor.Components/Services/AcSessionService.cs create mode 100644 AyCode.Blazor.Components/Services/IAcSessionItem.cs create mode 100644 AyCode.Blazor.Components/Services/SignalRRequestModel.cs diff --git a/AyCode.Blazor.Components/Services/AcSessionService.cs b/AyCode.Blazor.Components/Services/AcSessionService.cs new file mode 100644 index 0000000..c4ae3e6 --- /dev/null +++ b/AyCode.Blazor.Components/Services/AcSessionService.cs @@ -0,0 +1,13 @@ +using System.Collections.Concurrent; +using AyCode.Services.Logins; + +namespace AyCode.Blazor.Components.Services; + +public class AcSessionService where TSessionItem : IAcSessionItem where TSessionItemId : notnull +{ + public ConcurrentDictionary Sessions { get; private set; } = []; + + public AcSessionService() + { + } +} \ No newline at end of file diff --git a/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs b/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs index 97f6fef..3a424f2 100644 --- a/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs +++ b/AyCode.Blazor.Components/Services/AcSignalRClientBase.cs @@ -11,24 +11,6 @@ using Microsoft.AspNetCore.SignalR.Client; namespace AyCode.Blazor.Components.Services { - public class SignalRRequestModel - { - public DateTime RequestDateTime; - public DateTime ResponseDateTime; - public object? ResponseByRequestId = null; - - public SignalRRequestModel() - { - RequestDateTime = DateTime.UtcNow; - } - - public SignalRRequestModel(object responseByRequestId) : this() - { - ResponseByRequestId = responseByRequestId; - } - - } - public abstract class AcSignalRClientBase : IAcSignalRHubClient { private readonly ConcurrentDictionary _responseByRequestId = new(); @@ -40,8 +22,8 @@ namespace AyCode.Blazor.Components.Services //public event Action OnMessageRequested; public int Timeout = 10000; - private string _tagsName = "SignalRTags"; - + private const string TagsName = "SignalRTags"; + protected AcSignalRClientBase(string fullHubName, AcLoggerBase logger) { Logger = logger; @@ -94,7 +76,7 @@ namespace AyCode.Blazor.Components.Services public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int? requestId) { - Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(requestId)}: {requestId}; {ConstHelper.NameByValue(_tagsName, messageTag)}"); + Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(requestId)}: {requestId}; {ConstHelper.NameByValue(TagsName, messageTag)}"); return StartConnection().ContinueWith(_ => { @@ -104,34 +86,34 @@ namespace AyCode.Blazor.Components.Services } #region CRUD - public virtual Task GetByIdAsync(int messageTag, object id) where TResponseData : class + public virtual Task GetByIdAsync(int messageTag, object id) //where TResponseData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(new IdMessage(id)), AcDomain.NextUniqueInt32); public virtual Task GetByIdAsync(int messageTag, Func, Task> responseCallback, object id) => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(new IdMessage(id)), responseCallback); - public virtual Task GetByIdAsync(int messageTag, object[] ids) where TResponseData : class + public virtual Task GetByIdAsync(int messageTag, object[] ids) //where TResponseData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(new IdMessage(ids)), AcDomain.NextUniqueInt32); public virtual Task GetByIdAsync(int messageTag, Func, Task> responseCallback, object[] ids) => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(new IdMessage(ids)), responseCallback); - public virtual Task GetAllAsync(int messageTag) where TResponseData : class + public virtual Task GetAllAsync(int messageTag) //where TResponseData : class => SendMessageToServerAsync(messageTag); public virtual Task GetAllAsync(int messageTag, Func, Task> responseCallback) => SendMessageToServerAsync(messageTag, null, responseCallback); public virtual Task GetAllAsync(int messageTag, Func, Task> responseCallback, object[]? contextParams) => SendMessageToServerAsync(messageTag, (contextParams == null || contextParams.Length == 0 ? null : new SignalPostJsonDataMessage(new IdMessage(contextParams))), responseCallback); - public virtual Task GetAllAsync(int messageTag, object[]? contextParams) where TResponseData : class + public virtual Task GetAllAsync(int messageTag, object[]? contextParams) //where TResponseData : class => SendMessageToServerAsync(messageTag, contextParams == null || contextParams.Length == 0 ? null : new SignalPostJsonDataMessage(new IdMessage(contextParams)), AcDomain.NextUniqueInt32); public virtual Task PostDataAsync(int messageTag, TPostData postData) where TPostData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), AcDomain.NextUniqueInt32); - public virtual Task PostDataAsync(int messageTag, TPostData postData) where TPostData : class where TResponseData : class + public virtual Task PostDataAsync(int messageTag, TPostData postData) //where TPostData : class where TResponseData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), AcDomain.NextUniqueInt32); - public virtual Task PostDataAsync(int messageTag, TPostData postData, Func, Task> responseCallback) where TPostData : class + public virtual Task PostDataAsync(int messageTag, TPostData postData, Func, Task> responseCallback) //where TPostData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), responseCallback); - public virtual Task PostDataAsync(int messageTag, TPostData postData, Func, Task> responseCallback) where TPostData : class where TResponseData : class + public virtual Task PostDataAsync(int messageTag, TPostData postData, Func, Task> responseCallback) //where TPostData : class where TResponseData : class => SendMessageToServerAsync(messageTag, new SignalPostJsonDataMessage(postData), responseCallback); @@ -141,7 +123,7 @@ namespace AyCode.Blazor.Components.Services { if (response.Status != SignalResponseStatus.Success || response.ResponseData == null) { - Logger.Error($"GetAllIntoAsync<{typeof(T).Name}>(); status: {response.Status}; dataCount: {response.ResponseData?.Count}; {ConstHelper.NameByValue(_tagsName, messageTag)};"); + Logger.Error($"GetAllIntoAsync<{typeof(T).Name}>(); status: {response.Status}; dataCount: {response.ResponseData?.Count}; {ConstHelper.NameByValue(TagsName, messageTag)};"); return Task.CompletedTask; } @@ -154,15 +136,15 @@ namespace AyCode.Blazor.Components.Services #endregion CRUD - public virtual Task SendMessageToServerAsync(int messageTag) where TResponse : class + public virtual Task SendMessageToServerAsync(int messageTag) //where TResponse : class => SendMessageToServerAsync(messageTag, null, AcDomain.NextUniqueInt32); - public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message) where TResponse : class + public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message) //where TResponse : class => SendMessageToServerAsync(messageTag, message, AcDomain.NextUniqueInt32); - protected virtual async Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int requestId) where TResponse : class + protected virtual async Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int requestId) //where TResponse : class { - Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(requestId)}: {requestId}; {ConstHelper.NameByValue(_tagsName, messageTag)}"); + Logger.DebugConditional($"Client SendMessageToServerAsync; {nameof(requestId)}: {requestId}; {ConstHelper.NameByValue(TagsName, messageTag)}"); _responseByRequestId[requestId] = new SignalRRequestModel(); await SendMessageToServerAsync(messageTag, message, requestId); @@ -188,7 +170,7 @@ namespace AyCode.Blazor.Components.Services } catch (Exception ex) { - Logger.Error($"SendMessageToServerAsync; requestId: {requestId}; {ex.Message}; {ConstHelper.NameByValue(_tagsName, messageTag)}", ex); + Logger.Error($"SendMessageToServerAsync; requestId: {requestId}; {ex.Message}; {ConstHelper.NameByValue(TagsName, messageTag)}", ex); } _responseByRequestId.TryRemove(requestId, out _); @@ -213,7 +195,7 @@ namespace AyCode.Blazor.Components.Services { responseData = string.IsNullOrEmpty(responseMessage.ResponseData) ? default : responseMessage.ResponseData.JsonTo(); } - else Logger.Error($"Client SendMessageToServerAsync response error; callback; Status: {responseMessage.Status}; requestId: {requestId}; {ConstHelper.NameByValue(_tagsName, messageTag)}"); + else Logger.Error($"Client SendMessageToServerAsync response error; callback; Status: {responseMessage.Status}; requestId: {requestId}; {ConstHelper.NameByValue(TagsName, messageTag)}"); responseCallback(new SignalResponseMessage(messageTag, responseMessage.Status, responseData)); })); @@ -223,7 +205,7 @@ namespace AyCode.Blazor.Components.Services public virtual Task OnReceiveMessage(int messageTag, byte[] message, int? requestId) { - var logText = $"Client OnReceiveMessage; {nameof(requestId)}: {requestId}; {ConstHelper.NameByValue(_tagsName, messageTag)}"; + var logText = $"Client OnReceiveMessage; {nameof(requestId)}: {requestId}; {ConstHelper.NameByValue(TagsName, messageTag)}"; if (message.Length == 0) Logger.Warning($"message.Length == 0! {logText}"); @@ -257,7 +239,7 @@ namespace AyCode.Blazor.Components.Services // return Task.CompletedTask; default: - Logger.Error($"Client OnReceiveMessage switch; unknown message type: {_responseByRequestId[reqId].ResponseByRequestId?.GetType().Name}; {ConstHelper.NameByValue(_tagsName, messageTag)}"); + Logger.Error($"Client OnReceiveMessage switch; unknown message type: {_responseByRequestId[reqId].ResponseByRequestId?.GetType().Name}; {ConstHelper.NameByValue(TagsName, messageTag)}"); break; } @@ -272,7 +254,7 @@ namespace AyCode.Blazor.Components.Services if (requestId.HasValue) _responseByRequestId.TryRemove(requestId.Value, out _); - Logger.Error($"Client OnReceiveMessage; requestId: {requestId}; {ex.Message}; {ConstHelper.NameByValue(_tagsName, messageTag)}", ex); + Logger.Error($"Client OnReceiveMessage; requestId: {requestId}; {ex.Message}; {ConstHelper.NameByValue(TagsName, messageTag)}", ex); throw; } diff --git a/AyCode.Blazor.Components/Services/IAcSessionItem.cs b/AyCode.Blazor.Components/Services/IAcSessionItem.cs new file mode 100644 index 0000000..edcd3aa --- /dev/null +++ b/AyCode.Blazor.Components/Services/IAcSessionItem.cs @@ -0,0 +1,6 @@ +namespace AyCode.Blazor.Components.Services; + +public interface IAcSessionItem where TSessionItemId : notnull +{ + public TSessionItemId SessionId { get; set; } +} \ No newline at end of file diff --git a/AyCode.Blazor.Components/Services/SignalRRequestModel.cs b/AyCode.Blazor.Components/Services/SignalRRequestModel.cs new file mode 100644 index 0000000..effe30b --- /dev/null +++ b/AyCode.Blazor.Components/Services/SignalRRequestModel.cs @@ -0,0 +1,19 @@ +namespace AyCode.Blazor.Components.Services; + +public class SignalRRequestModel +{ + public DateTime RequestDateTime; + public DateTime ResponseDateTime; + public object? ResponseByRequestId = null; + + public SignalRRequestModel() + { + RequestDateTime = DateTime.UtcNow; + } + + public SignalRRequestModel(object responseByRequestId) : this() + { + ResponseByRequestId = responseByRequestId; + } + +} \ No newline at end of file