AyCode.Core/AyCode.Services/SignalRs/IAcSignalRHubClient.cs

88 lines
2.2 KiB
C#

using AyCode.Core.Extensions;
using MessagePack;
using Newtonsoft.Json.Linq;
using System.Text.RegularExpressions;
namespace AyCode.Services.SignalRs;
[MessagePackObject]
public class SignalPostJsonDataMessage : ISignalPostMessage<string>
{
[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>(TPostData postData) : ISignalPostMessage<TPostData>
{
[Key(0)]
public TPostData? PostData { get; set; } = postData;
}
public interface ISignalPostMessage<out TPostData> : ISignalRMessage
{
TPostData? PostData { get; }
}
[MessagePackObject]
public class SignalRequestByIdMessage(Guid id) : ISignalRequestMessage<Guid>
{
[Key(0)]
public Guid Id { get; set; } = id;
}
public interface ISignalRequestMessage<TRequestId> : ISignalRMessage
{
TRequestId Id { get; set; }
}
public interface ISignalRMessage
{ }
[MessagePackObject]
public sealed class SignalResponseMessage<TResponseData>(SignalResponseStatus status, TResponseData? responseData) : ISignalResponseMessage<TResponseData>
{
[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<TResponseData> : 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);
}