improvements, fixes
This commit is contained in:
parent
1131b5675b
commit
2ecc7b1a7a
|
|
@ -0,0 +1,14 @@
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
|
namespace AyCode.Core.Interfaces;
|
||||||
|
|
||||||
|
public interface IForeignKey
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IForeignCollection<T> : IForeignCollection where T : IEnumerable
|
||||||
|
{}
|
||||||
|
|
||||||
|
public interface IForeignCollection
|
||||||
|
{}
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
using AyCode.Interfaces.Entities;
|
using AyCode.Core.Interfaces;
|
||||||
|
using AyCode.Interfaces.Entities;
|
||||||
|
|
||||||
namespace AyCode.Interfaces.Addresses;
|
namespace AyCode.Interfaces.Addresses;
|
||||||
|
|
||||||
public interface IAcAddressForeignKey : IEntityGuid
|
public interface IAcAddressForeignKey : IEntityGuid, IForeignKey
|
||||||
{
|
{
|
||||||
public Guid AddressId { get; set; }
|
public Guid AddressId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
namespace AyCode.Interfaces;
|
using AyCode.Core.Interfaces;
|
||||||
|
|
||||||
|
namespace AyCode.Interfaces;
|
||||||
|
|
||||||
public interface ICustomForeignKeyInt : ICustomForeignKey<int>
|
public interface ICustomForeignKeyInt : ICustomForeignKey<int>
|
||||||
{ }
|
{ }
|
||||||
|
|
@ -6,7 +8,7 @@ public interface ICustomForeignKeyInt : ICustomForeignKey<int>
|
||||||
public interface ICustomForeignKeyGuid : ICustomForeignKey<Guid>
|
public interface ICustomForeignKeyGuid : ICustomForeignKey<Guid>
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public interface ICustomForeignKey<out T>
|
public interface ICustomForeignKey<out T> : IForeignKey
|
||||||
{
|
{
|
||||||
T ForeignKey { get; }
|
T ForeignKey { get; }
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
namespace AyCode.Interfaces.Messages;
|
using AyCode.Core.Interfaces;
|
||||||
|
|
||||||
public interface IAcEmailMessageForeignKey<T>
|
namespace AyCode.Interfaces.Messages;
|
||||||
|
|
||||||
|
public interface IAcEmailMessageForeignKey<T> : IForeignKey
|
||||||
{
|
{
|
||||||
public T EmailMessageId { get; set; }
|
public T EmailMessageId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
namespace AyCode.Interfaces.Profiles;
|
using AyCode.Core.Interfaces;
|
||||||
|
|
||||||
public interface IAcProfileForeignKey
|
namespace AyCode.Interfaces.Profiles;
|
||||||
|
|
||||||
|
public interface IAcProfileForeignKey : IForeignKey
|
||||||
{
|
{
|
||||||
public Guid ProfileId { get; set; }
|
public Guid ProfileId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
namespace AyCode.Interfaces.ServiceProviders;
|
using AyCode.Core.Interfaces;
|
||||||
|
|
||||||
public interface IAcCompanyForeignKey
|
namespace AyCode.Interfaces.ServiceProviders;
|
||||||
|
|
||||||
|
public interface IAcCompanyForeignKey : IForeignKey
|
||||||
{
|
{
|
||||||
public Guid ServiceProviderId { get; set; }
|
public Guid ServiceProviderId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
namespace AyCode.Interfaces.Users;
|
using AyCode.Core.Interfaces;
|
||||||
|
|
||||||
public interface IAcUserForeignKey
|
namespace AyCode.Interfaces.Users;
|
||||||
|
|
||||||
|
public interface IAcUserForeignKey : IForeignKey
|
||||||
{
|
{
|
||||||
Guid UserId { get; set; }
|
Guid UserId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -163,34 +163,36 @@ public abstract class AcWebSignalRHubBase<TSignalRTags, TLogger>(IConfiguration
|
||||||
protected Task ResponseToCaller2(int messageTag, object? content)
|
protected Task ResponseToCaller2(int messageTag, object? content)
|
||||||
=> ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
=> ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
||||||
|
|
||||||
protected async Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId)
|
protected Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId)
|
||||||
=> await SendMessageToClient(Clients.Caller, messageTag, message, requestId);
|
=> SendMessageToClient(Clients.Caller, messageTag, message, requestId);
|
||||||
|
|
||||||
protected Task SendMessageToUserId2(string userId, int messageTag, object? content)
|
protected Task SendMessageToUserId2(string userId, int messageTag, object? content)
|
||||||
=> SendMessageToUserId(userId, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
=> SendMessageToUserId(userId, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
||||||
|
|
||||||
public async Task SendMessageToUserId(string userId, int messageTag, ISignalRMessage message, int? requestId)
|
public Task SendMessageToUserId(string userId, int messageTag, ISignalRMessage message, int? requestId)
|
||||||
=> await SendMessageToClient(Clients.User(userId), messageTag, message, requestId);
|
=> SendMessageToClient(Clients.User(userId), messageTag, message, requestId);
|
||||||
|
|
||||||
public async Task SendMessageToConnectionId2(string connectionId, int messageTag, object? content)
|
public Task SendMessageToConnectionId2(string connectionId, int messageTag, object? content)
|
||||||
=> await SendMessageToConnectionId(connectionId, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
=> SendMessageToConnectionId(connectionId, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
||||||
|
|
||||||
public async Task SendMessageToConnectionId(string connectionId, int messageTag, ISignalRMessage message, int? requestId)
|
public Task SendMessageToConnectionId(string connectionId, int messageTag, ISignalRMessage message, int? requestId)
|
||||||
=> await SendMessageToClient(Clients.Client(Context.ConnectionId), messageTag, message, requestId);
|
=> SendMessageToClient(Clients.Client(Context.ConnectionId), messageTag, message, requestId);
|
||||||
|
|
||||||
public async Task SendMessageToOtherClients(int messageTag, object? content)
|
public Task SendMessageToOtherClients(int messageTag, object? content)
|
||||||
=> await SendMessageToClient(Clients.Others, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
=> SendMessageToClient(Clients.Others, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
||||||
|
|
||||||
public async Task SendMessageToAllClients(int messageTag, object? content)
|
public Task SendMessageToAllClients(int messageTag, object? content)
|
||||||
=> await SendMessageToClient(Clients.All, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
=> SendMessageToClient(Clients.All, messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, content), null);
|
||||||
|
|
||||||
|
|
||||||
protected async Task SendMessageToClient(IAcSignalRHubItemServer sendTo, int messageTag, ISignalRMessage message, int? requestId = null)
|
protected async Task SendMessageToClient(IAcSignalRHubItemServer sendTo, int messageTag, ISignalRMessage message, int? requestId = null)
|
||||||
{
|
{
|
||||||
var responseDataMessagePack = message.ToMessagePack(ContractlessStandardResolver.Options);
|
var responseDataMessagePack = message.ToMessagePack(ContractlessStandardResolver.Options);
|
||||||
Logger.Info($"[{(responseDataMessagePack.Length/1024)}kb] Server sending responseDataMessagePack to client; {nameof(requestId)}: {requestId}; ConnectionId: {Context.ConnectionId}; {ConstHelper.NameByValue<TSignalRTags>(messageTag)}");
|
Logger.Info($"[{(responseDataMessagePack.Length/1024)}kb] Server sending responseDataMessagePack to client; {nameof(requestId)}: {requestId}; Aborted: {Context.ConnectionAborted.IsCancellationRequested}; ConnectionId: {Context.ConnectionId}; {ConstHelper.NameByValue<TSignalRTags>(messageTag)}");
|
||||||
|
|
||||||
await sendTo.OnReceiveMessage(messageTag, responseDataMessagePack, requestId);
|
await sendTo.OnReceiveMessage(messageTag, responseDataMessagePack, requestId);
|
||||||
|
|
||||||
|
Logger.Info($"Server sent responseDataMessagePack to client; {nameof(requestId)}: {requestId}; Aborted: {Context.ConnectionAborted.IsCancellationRequested}; ConnectionId: {Context.ConnectionId}; {ConstHelper.NameByValue<TSignalRTags>(messageTag)}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SendMessageToGroup(string groupId, int messageTag, string message)
|
public async Task SendMessageToGroup(string groupId, int messageTag, string message)
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,10 @@ using AyCode.Core.Helpers;
|
||||||
using AyCode.Core.Loggers;
|
using AyCode.Core.Loggers;
|
||||||
using AyCode.Interfaces.Entities;
|
using AyCode.Interfaces.Entities;
|
||||||
using MessagePack.Resolvers;
|
using MessagePack.Resolvers;
|
||||||
|
using Microsoft.AspNetCore.Connections;
|
||||||
|
using Microsoft.AspNetCore.Http.Connections;
|
||||||
using Microsoft.AspNetCore.SignalR.Client;
|
using Microsoft.AspNetCore.SignalR.Client;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace AyCode.Services.SignalRs
|
namespace AyCode.Services.SignalRs
|
||||||
{
|
{
|
||||||
|
|
@ -22,7 +25,7 @@ namespace AyCode.Services.SignalRs
|
||||||
public int ConnectionTimeout = 10000;
|
public int ConnectionTimeout = 10000;
|
||||||
public int TransportSendTimeout = 60000;
|
public int TransportSendTimeout = 60000;
|
||||||
private const string TagsName = "SignalRTags";
|
private const string TagsName = "SignalRTags";
|
||||||
|
|
||||||
protected AcSignalRClientBase(string fullHubName, AcLoggerBase logger)
|
protected AcSignalRClientBase(string fullHubName, AcLoggerBase logger)
|
||||||
{
|
{
|
||||||
Logger = logger;
|
Logger = logger;
|
||||||
|
|
@ -30,11 +33,36 @@ namespace AyCode.Services.SignalRs
|
||||||
|
|
||||||
//TODO: HubConnectionBuilder constructor!!! - J.
|
//TODO: HubConnectionBuilder constructor!!! - J.
|
||||||
HubConnection = new HubConnectionBuilder()
|
HubConnection = new HubConnectionBuilder()
|
||||||
.WithUrl(fullHubName)
|
//.WithUrl(fullHubName)
|
||||||
|
.WithUrl(fullHubName, HttpTransportType.WebSockets,
|
||||||
|
options =>
|
||||||
|
{
|
||||||
|
options.TransportMaxBufferSize = 30_000_000; //Increasing this value allows the client to receive larger messages. default: 65KB; unlimited: 0;;
|
||||||
|
options.ApplicationMaxBufferSize = 30_000_000; //Increasing this value allows the client to send larger messages. default: 65KB; unlimited: 0;
|
||||||
|
options.CloseTimeout = TimeSpan.FromSeconds(10); //default: 5 sec.
|
||||||
|
|
||||||
|
//options.AccessTokenProvider = null;
|
||||||
|
//options.HttpMessageHandlerFactory = null;
|
||||||
|
//options.Headers["CustomData"] = "value";
|
||||||
|
//options.SkipNegotiation = true;
|
||||||
|
//options.ClientCertificates = new System.Security.Cryptography.X509Certificates.X509CertificateCollection();
|
||||||
|
//options.Cookies = new System.Net.CookieContainer();
|
||||||
|
//options.DefaultTransferFormat = TransferFormat.Text;
|
||||||
|
//options.Credentials = null;
|
||||||
|
//options.Proxy = null;
|
||||||
|
//options.UseDefaultCredentials = true;
|
||||||
|
//options.WebSocketConfiguration = null;
|
||||||
|
//options.WebSocketFactory = null;
|
||||||
|
})
|
||||||
|
//.ConfigureLogging(logging =>
|
||||||
|
//{
|
||||||
|
// logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
|
||||||
|
// logging.AddConsole();
|
||||||
|
//})
|
||||||
.WithAutomaticReconnect()
|
.WithAutomaticReconnect()
|
||||||
.WithStatefulReconnect()
|
.WithStatefulReconnect()
|
||||||
.WithKeepAliveInterval(TimeSpan.FromSeconds(60))
|
.WithKeepAliveInterval(TimeSpan.FromSeconds(60))
|
||||||
.WithServerTimeout(TimeSpan.FromSeconds(120))
|
.WithServerTimeout(TimeSpan.FromSeconds(180))
|
||||||
//.AddMessagePackProtocol(options => {
|
//.AddMessagePackProtocol(options => {
|
||||||
// options.SerializerOptions = MessagePackSerializerOptions.Standard
|
// options.SerializerOptions = MessagePackSerializerOptions.Standard
|
||||||
// .WithResolver(MessagePack.Resolvers.StandardResolver.Instance)
|
// .WithResolver(MessagePack.Resolvers.StandardResolver.Instance)
|
||||||
|
|
@ -80,11 +108,18 @@ namespace AyCode.Services.SignalRs
|
||||||
|
|
||||||
public virtual Task SendMessageToServerAsync(int messageTag, ISignalRMessage? message, int? requestId)
|
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 sending; {nameof(requestId)}: {requestId}; ConnectionSate: {HubConnection.State}; {ConstHelper.NameByValue(TagsName, messageTag)}");
|
||||||
|
|
||||||
|
var msgp = message?.ToMessagePack(ContractlessStandardResolver.Options);
|
||||||
|
|
||||||
return StartConnection().ContinueWith(_ =>
|
return StartConnection().ContinueWith(_ =>
|
||||||
{
|
{
|
||||||
var msgp = message?.ToMessagePack(ContractlessStandardResolver.Options);
|
if (HubConnection.State != HubConnectionState.Connected)
|
||||||
|
{
|
||||||
|
Logger.Error($"Client SendMessageToServerAsync error! ConnectionSate: {HubConnection.State};");
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
return HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, msgp, requestId);
|
return HubConnection.SendAsync(nameof(IAcSignalRHubClient.OnReceiveMessage), messageTag, msgp, requestId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -125,7 +160,7 @@ namespace AyCode.Services.SignalRs
|
||||||
return GetAllAsync<List<TResponseItem>>(messageTag, response =>
|
return GetAllAsync<List<TResponseItem>>(messageTag, response =>
|
||||||
{
|
{
|
||||||
var logText = $"GetAllIntoAsync<{typeof(TResponseItem).Name}>(); status: {response.Status}; dataCount: {response.ResponseData?.Count}; {ConstHelper.NameByValue(TagsName, messageTag)};";
|
var logText = $"GetAllIntoAsync<{typeof(TResponseItem).Name}>(); status: {response.Status}; dataCount: {response.ResponseData?.Count}; {ConstHelper.NameByValue(TagsName, messageTag)};";
|
||||||
|
|
||||||
intoList.Clear();
|
intoList.Clear();
|
||||||
|
|
||||||
if (response.Status == SignalResponseStatus.Success && response.ResponseData != null)
|
if (response.Status == SignalResponseStatus.Success && response.ResponseData != null)
|
||||||
|
|
@ -228,7 +263,7 @@ namespace AyCode.Services.SignalRs
|
||||||
var reqId = requestId.Value;
|
var reqId = requestId.Value;
|
||||||
|
|
||||||
_responseByRequestId[reqId].ResponseDateTime = DateTime.UtcNow;
|
_responseByRequestId[reqId].ResponseDateTime = DateTime.UtcNow;
|
||||||
Logger.Info($"[{_responseByRequestId[reqId].ResponseDateTime.Subtract(_responseByRequestId[reqId].RequestDateTime).TotalMilliseconds:N0}ms][{(messageBytes.Length/1024)}kb]{logText}");
|
Logger.Info($"[{_responseByRequestId[reqId].ResponseDateTime.Subtract(_responseByRequestId[reqId].RequestDateTime).TotalMilliseconds:N0}ms][{(messageBytes.Length / 1024)}kb]{logText}");
|
||||||
|
|
||||||
var responseMessage = messageBytes.MessagePackTo<SignalResponseJsonMessage>(ContractlessStandardResolver.Options);
|
var responseMessage = messageBytes.MessagePackTo<SignalResponseJsonMessage>(ContractlessStandardResolver.Options);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue