198 lines
5.1 KiB
C#
198 lines
5.1 KiB
C#
using AyCode.Core.Extensions;
|
|
using MessagePack;
|
|
using Newtonsoft.Json.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using AyCode.Core.Interfaces;
|
|
using System.Collections.Generic;
|
|
using System.Linq.Expressions;
|
|
|
|
namespace AyCode.Services.SignalRs;
|
|
|
|
public class IdMessage
|
|
{
|
|
public List<string> Ids { get; private set; } = [];
|
|
|
|
public IdMessage()
|
|
{
|
|
}
|
|
|
|
public IdMessage(IEnumerable<object> ids) : this()
|
|
{
|
|
//Ids.AddRange(ids);
|
|
Ids.AddRange(ids.Select(x =>
|
|
{
|
|
string item;
|
|
|
|
//if (x is Expression expr)
|
|
//{
|
|
// string aa = string.Empty;
|
|
// var serializer = new ExpressionSerializer(new JsonSerializer());
|
|
// try
|
|
// {
|
|
// aa = serializer.SerializeText(expr);
|
|
// }
|
|
// catch(Exception ex)
|
|
// {
|
|
// Console.WriteLine(ex);
|
|
// }
|
|
|
|
// item = (new[] { aa }).ToJson();
|
|
//}
|
|
//else
|
|
item = (new[] { x }).ToJson();
|
|
|
|
return item;
|
|
}));
|
|
}
|
|
|
|
public IdMessage(object id) : this(new object[] { id })
|
|
{
|
|
}
|
|
|
|
public IdMessage(IEnumerable<Guid> ids) : this(ids.Cast<object>().ToArray())
|
|
{
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return string.Join("; ", Ids);
|
|
}
|
|
}
|
|
|
|
public class SignalPostJsonMessage
|
|
{
|
|
[Key(0)]
|
|
public string PostDataJson { get; set; }
|
|
|
|
public SignalPostJsonMessage()
|
|
{}
|
|
protected SignalPostJsonMessage(string postDataJson) => PostDataJson = postDataJson;
|
|
}
|
|
|
|
[MessagePackObject]
|
|
public class SignalPostJsonDataMessage<TPostDataType> : SignalPostJsonMessage, ISignalPostMessage<TPostDataType> where TPostDataType : class
|
|
{
|
|
[IgnoreMember]
|
|
private TPostDataType? _postData;
|
|
|
|
[IgnoreMember]
|
|
public TPostDataType PostData
|
|
{
|
|
get
|
|
{
|
|
return _postData ??= PostDataJson.JsonTo<TPostDataType>()!;
|
|
}
|
|
private init
|
|
{
|
|
_postData = value;
|
|
PostDataJson = _postData.ToJson();
|
|
}
|
|
}
|
|
|
|
public SignalPostJsonDataMessage() : base()
|
|
{}
|
|
public SignalPostJsonDataMessage(TPostDataType postData) => PostData = postData;
|
|
public SignalPostJsonDataMessage(string postDataJson) : base(postDataJson)
|
|
{}
|
|
}
|
|
|
|
[MessagePackObject]
|
|
public class SignalPostMessage<TPostData>(TPostData postData) : ISignalPostMessage<TPostData>
|
|
{
|
|
[Key(0)]
|
|
public TPostData? PostData { get; set; } = postData;
|
|
}
|
|
|
|
public interface ISignalPostMessage<TPostData> : ISignalRMessage
|
|
{
|
|
TPostData? PostData { get; }
|
|
}
|
|
|
|
[MessagePackObject]
|
|
public class SignalRequestByIdMessage(Guid id) : ISignalRequestMessage<Guid>, IId<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 SignalResponseJsonMessage : ISignalResponseMessage<string>
|
|
{
|
|
[Key(0)] public int MessageTag { get; set; }
|
|
|
|
[Key(1)] public SignalResponseStatus Status { get; set; }
|
|
|
|
[Key(2)] public string? ResponseData { get; set; } = null;
|
|
|
|
public SignalResponseJsonMessage(){}
|
|
|
|
public SignalResponseJsonMessage(int messageTag, SignalResponseStatus status)
|
|
{
|
|
Status = status;
|
|
MessageTag = messageTag;
|
|
}
|
|
|
|
public SignalResponseJsonMessage(int messageTag, SignalResponseStatus status, object? responseData) : this(messageTag, status)
|
|
{
|
|
if (responseData is string stringdata)
|
|
ResponseData = stringdata;
|
|
else ResponseData = responseData.ToJson();
|
|
}
|
|
|
|
public SignalResponseJsonMessage(int messageTag, SignalResponseStatus status, string? responseDataJson) : this(messageTag, status)
|
|
{
|
|
ResponseData = responseDataJson;
|
|
}
|
|
}
|
|
|
|
[MessagePackObject]
|
|
public sealed class SignalResponseMessage<TResponseData>(int messageTag, SignalResponseStatus status, TResponseData? responseData) : ISignalResponseMessage<TResponseData>
|
|
{
|
|
[Key(0)] public int MessageTag { get; set; }
|
|
[Key(1)] public SignalResponseStatus Status { get; set; } = status;
|
|
[Key(2)] public TResponseData? ResponseData { get; set; } = responseData;
|
|
}
|
|
|
|
public sealed class SignalResponseStatusMessage(SignalResponseStatus status) : ISignalRMessage
|
|
{
|
|
public SignalResponseStatus Status { get; set; } = status;
|
|
}
|
|
|
|
//[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
|
|
{
|
|
int MessageTag { get; set; }
|
|
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);
|
|
} |