using AyCode.Core.Extensions; using MessagePack; using Newtonsoft.Json.Linq; using System.Text.RegularExpressions; namespace AyCode.Services.SignalRs; [MessagePackObject] public class SignalPostJsonDataMessage : ISignalPostMessage { [IgnoreMember] private string _postData; [Key(0)] public string PostData { get => _postData; set => _postData = Regex.Unescape(value).TrimStart('"').TrimEnd('"'); } public SignalPostJsonDataMessage(object postData) => PostData = postData.ToJson(); } [MessagePackObject] public class SignalPostMessage(TPostData postData) : ISignalPostMessage { [Key(0)] public TPostData? PostData { get; set; } = postData; } public interface ISignalPostMessage : ISignalRMessage { TPostData? PostData { get; } } [MessagePackObject] public class SignalRequestByIdMessage(Guid id) : ISignalRequestMessage { [Key(0)] public Guid Id { get; set; } = id; } public interface ISignalRequestMessage : ISignalRMessage { TRequestId Id { get; set; } } public interface ISignalRMessage { } [MessagePackObject] public sealed class SignalResponseMessage(SignalResponseStatus status, TResponseData? responseData) : ISignalResponseMessage { [Key(0)] public SignalResponseStatus Status { get; set; } = status; [Key(1)] public TResponseData? ResponseData { get; set; } = responseData; } //[MessagePackObject] //public sealed class SignalResponseMessage(SignalResponseStatus status) : ISignalResponseMessage //{ // [Key(0)] // public SignalResponseStatus Status { get; set; } = status; //} public interface ISignalResponseMessage : ISignalResponseMessage { TResponseData? ResponseData { get; set; } } public interface ISignalResponseMessage : ISignalRMessage { SignalResponseStatus Status { get; set; } } public enum SignalResponseStatus : byte { Error = 0, Success = 5 } public interface IAcSignalRHubClient : IAcSignalRHubBase { Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int? requestId ); //Task SendRequestToServerAsync(int messageTag, int requestId); }