From 0fd78ba482167011c01148358d6e098590573a5c Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Fri, 31 May 2024 20:52:42 +0200 Subject: [PATCH] SignalRServer InvokeMethodByMessageTag is in progress... --- .../Extensions/SerializeObjectExtensions.cs | 8 ++++- .../SignalRs/IAcSignalRHubClient.cs | 29 ++++++++++++++----- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/AyCode.Core/Extensions/SerializeObjectExtensions.cs b/AyCode.Core/Extensions/SerializeObjectExtensions.cs index 1e8fe56..5f57e5b 100644 --- a/AyCode.Core/Extensions/SerializeObjectExtensions.cs +++ b/AyCode.Core/Extensions/SerializeObjectExtensions.cs @@ -19,7 +19,7 @@ public static class SerializeObjectExtensions public static string ToJson(this T source) => JsonConvert.SerializeObject(source, Options); public static string ToJson(this IQueryable source) where T : class, IAcSerializableToJson => JsonConvert.SerializeObject(source, Options); public static string ToJson(this IEnumerable source) where T : class, IAcSerializableToJson => JsonConvert.SerializeObject(source, Options); - + public static T? JsonTo(this string json) { if (json.StartsWith("\"") && json.EndsWith("\"")) json = Regex.Unescape(json).TrimStart('"').TrimEnd('"'); @@ -27,6 +27,12 @@ public static class SerializeObjectExtensions return JsonConvert.DeserializeObject(json, Options); } + public static object? JsonTo(this string json, Type toType) + { + if (json.StartsWith("\"") && json.EndsWith("\"")) json = Regex.Unescape(json).TrimStart('"').TrimEnd('"'); + + return JsonConvert.DeserializeObject(json, toType, Options); + } public static byte[] ToMessagePack(this object message) => MessagePackSerializer.Serialize(message); public static byte[] ToMessagePack(this object message, MessagePackSerializerOptions options) => MessagePackSerializer.Serialize(message, options); diff --git a/AyCode.Services/SignalRs/IAcSignalRHubClient.cs b/AyCode.Services/SignalRs/IAcSignalRHubClient.cs index bd9f62a..d67e160 100644 --- a/AyCode.Services/SignalRs/IAcSignalRHubClient.cs +++ b/AyCode.Services/SignalRs/IAcSignalRHubClient.cs @@ -5,8 +5,18 @@ using System.Text.RegularExpressions; namespace AyCode.Services.SignalRs; +public class SignalPostJsonMessage +{ + [Key(0)] + public string PostDataJson { get; set; } + + public SignalPostJsonMessage() + {} + protected SignalPostJsonMessage(string postDataJson) => PostDataJson = postDataJson; +} + [MessagePackObject] -public class SignalPostJsonDataMessage : ISignalPostMessage where TPostDataType : class +public class SignalPostJsonDataMessage : SignalPostJsonMessage, ISignalPostMessage where TPostDataType : class { [IgnoreMember] private TPostDataType? _postData; @@ -25,12 +35,11 @@ public class SignalPostJsonDataMessage : ISignalPostMessage PostData = postData; - public SignalPostJsonDataMessage(string postDataJson) => PostDataJson = postDataJson; + public SignalPostJsonDataMessage(string postDataJson) : base(postDataJson) + {} } [MessagePackObject] @@ -75,8 +84,12 @@ public sealed class SignalResponseJsonMessage : ISignalResponseMessage Status = status; } - public SignalResponseJsonMessage(SignalResponseStatus status, object? responseData) : this(status, responseData.ToJson()) - { } + public SignalResponseJsonMessage(SignalResponseStatus status, object? responseData) : this(status) + { + if (responseData is string) + ResponseData = responseData as string; + else ResponseData = responseData.ToJson(); + } public SignalResponseJsonMessage(SignalResponseStatus status, string? responseDataJson) : this(status) {