fix Bug 63765

This commit is contained in:
pavelbannov 2023-08-24 17:05:05 +03:00
parent 9de902006a
commit a5721ed885
12 changed files with 32 additions and 44 deletions

View File

@ -150,10 +150,10 @@ public class WorkContext
emailSender.Init(properties);
}
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyEMailSenderSysName, new EmailSenderSink(emailSender, _serviceProvider));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyMessengerSenderSysName, new JabberSenderSink(jabberSender, _serviceProvider));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyTelegramSenderSysName, new TelegramSenderSink(telegramSender, _serviceProvider));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyPushSenderSysName, new PushSenderSink(pushSender, _serviceProvider));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyEMailSenderSysName, new EmailSenderSink(emailSender));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyMessengerSenderSysName, new JabberSenderSink(jabberSender));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyTelegramSenderSysName, new TelegramSenderSink(telegramSender));
NotifyContext.RegisterSender(_dispatchEngine, Constants.NotifyPushSenderSysName, new PushSenderSink(pushSender));
NotifyEngine.AddAction<NotifyTransferRequest>();

View File

@ -29,6 +29,6 @@ namespace ASC.Notify.Channels;
public interface ISenderChannel
{
string SenderName { get; }
Task<SendResponse> DirectSend(INoticeMessage message);
Task SendAsync(INoticeMessage message);
Task<SendResponse> DirectSend(INoticeMessage message, IServiceScope serviceScope);
Task SendAsync(INoticeMessage message, IServiceScope serviceScope);
}

View File

@ -45,16 +45,16 @@ public class SenderChannel : ISenderChannel
_firstSink = AddSink(_firstSink, dispatcherSink);
}
public async Task SendAsync(INoticeMessage message)
public async Task SendAsync(INoticeMessage message, IServiceScope serviceScope)
{
ArgumentNullException.ThrowIfNull(message);
await _firstSink.ProcessMessageAsync(message);
await _firstSink.ProcessMessageAsync(message, serviceScope);
}
public async Task<SendResponse> DirectSend(INoticeMessage message)
public async Task<SendResponse> DirectSend(INoticeMessage message, IServiceScope serviceScope)
{
return await _senderSink.ProcessMessage(message);
return await _senderSink.ProcessMessage(message, serviceScope);
}
private ISink AddSink(ISink firstSink, ISink addedSink)

View File

@ -29,16 +29,14 @@ namespace ASC.Core.Notify;
public class EmailSenderSink : Sink
{
private static readonly string _senderName = Configuration.Constants.NotifyEMailSenderSysName;
private readonly INotifySender _sender;
private readonly IServiceProvider _serviceProvider;
private readonly INotifySender _sender;
public EmailSenderSink(INotifySender sender, IServiceProvider serviceProvider)
public EmailSenderSink(INotifySender sender)
{
_sender = sender ?? throw new ArgumentNullException(nameof(sender));
_serviceProvider = serviceProvider;
}
public override async Task<SendResponse> ProcessMessage(INoticeMessage message)
public override async Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope scope)
{
if (message.Recipient.Addresses == null || message.Recipient.Addresses.Length == 0)
{
@ -48,7 +46,6 @@ public class EmailSenderSink : Sink
var responce = new SendResponse(message, _senderName, default(SendResult));
try
{
await using var scope = _serviceProvider.CreateAsyncScope();
var m = scope.ServiceProvider.GetRequiredService<EmailSenderSinkMessageCreator>().CreateNotifyMessage(message, _senderName);
var result = await _sender.Send(m);

View File

@ -43,7 +43,7 @@ public class DispatchEngine
_logger.LogOnly(_logOnly);
}
public async Task<SendResponse> Dispatch(INoticeMessage message, string senderName)
public async Task<SendResponse> Dispatch(INoticeMessage message, string senderName, IServiceScope serviceScope)
{
var response = new SendResponse(message, senderName, SendResult.OK);
if (!_logOnly)
@ -51,7 +51,7 @@ public class DispatchEngine
var sender = _context.GetSender(senderName);
if (sender != null)
{
response = await sender.DirectSend(message);
response = await sender.DirectSend(message, serviceScope);
}
else
{

View File

@ -437,7 +437,7 @@ public class NotifyEngine : INotifyEngine, IDisposable
return preventresponse;
}
await channel.SendAsync(noticeMessage);
await channel.SendAsync(noticeMessage, serviceScope);
return new SendResponse(noticeMessage, channel.SenderName, SendResult.Inprogress);
}

View File

@ -31,20 +31,18 @@ class JabberSenderSink : Sink
private static readonly string _senderName = Configuration.Constants.NotifyMessengerSenderSysName;
private readonly INotifySender _sender;
public JabberSenderSink(INotifySender sender, IServiceProvider serviceProvider)
public JabberSenderSink(INotifySender sender)
{
_sender = sender ?? throw new ArgumentNullException(nameof(sender));
_serviceProvider = serviceProvider;
}
private readonly IServiceProvider _serviceProvider;
public override async Task<SendResponse> ProcessMessage(INoticeMessage message)
public override async Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope scope)
{
try
{
var result = SendResult.OK;
await using var scope = _serviceProvider.CreateAsyncScope();
var m = scope.ServiceProvider.GetRequiredService<JabberSenderSinkMessageCreator>().CreateNotifyMessage(message, _senderName);
if (string.IsNullOrEmpty(m.Reciever))

View File

@ -35,22 +35,17 @@ class PushSenderSink : Sink
private static readonly string _senderName = Constants.NotifyPushSenderSysName;
private readonly INotifySender _sender;
public PushSenderSink(INotifySender sender, IServiceProvider serviceProvider)
public PushSenderSink(INotifySender sender)
{
_sender = sender ?? throw new ArgumentNullException(nameof(sender));
_serviceProvider = serviceProvider;
}
private readonly IServiceProvider _serviceProvider;
public override async Task<SendResponse> ProcessMessage(INoticeMessage message)
public override async Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope scope)
{
try
{
var result = SendResult.OK;
await using var scope = _serviceProvider.CreateAsyncScope();
var m = scope.ServiceProvider.GetRequiredService<PushSenderSinkMessageCreator>().CreateNotifyMessage(message, _senderName);
if (string.IsNullOrEmpty(m.Reciever))
{
@ -100,7 +95,7 @@ public class PushSenderSinkMessageCreator : SinkMessageCreator
{
_tenantManager.SetCurrentTenant(Tenant.DefaultTenant);
tenant = _tenantManager.GetCurrentTenant(false);
}
}
var user = _userManager.GetUsers(new Guid(message.Recipient.ID));
var username = user.UserName;

View File

@ -37,13 +37,13 @@ class DispatchSink : Sink
_senderName = senderName;
}
public override Task<SendResponse> ProcessMessage(INoticeMessage message)
public override Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope serviceScope)
{
return _dispatcher.Dispatch(message, _senderName);
return _dispatcher.Dispatch(message, _senderName, serviceScope);
}
public override async Task ProcessMessageAsync(INoticeMessage message)
public override async Task ProcessMessageAsync(INoticeMessage message, IServiceScope serviceScope)
{
await _dispatcher.Dispatch(message, _senderName);
await _dispatcher.Dispatch(message, _senderName, serviceScope);
}
}

View File

@ -29,6 +29,6 @@ namespace ASC.Notify.Sinks;
public interface ISink
{
ISink NextSink { get; set; }
Task<SendResponse> ProcessMessage(INoticeMessage message);
Task ProcessMessageAsync(INoticeMessage message);
Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope serviceScope);
Task ProcessMessageAsync(INoticeMessage message, IServiceScope serviceScope);
}

View File

@ -35,10 +35,10 @@ public abstract class Sink : ISink
{
public ISink NextSink { get; set; }
public abstract Task<SendResponse> ProcessMessage(INoticeMessage message);
public abstract Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope serviceScope);
public virtual async Task ProcessMessageAsync(INoticeMessage message)
public virtual async Task ProcessMessageAsync(INoticeMessage message, IServiceScope serviceScope)
{
await NextSink.ProcessMessageAsync(message);
await NextSink.ProcessMessageAsync(message, serviceScope);
}
}

View File

@ -32,20 +32,18 @@ class TelegramSenderSink : Sink
private readonly INotifySender _sender;
private readonly IServiceProvider _serviceProvider;
public TelegramSenderSink(INotifySender sender, IServiceProvider serviceProvider)
public TelegramSenderSink(INotifySender sender)
{
_sender = sender ?? throw new ArgumentNullException(nameof(sender));
_serviceProvider = serviceProvider;
}
public override async Task<SendResponse> ProcessMessage(INoticeMessage message)
public override async Task<SendResponse> ProcessMessage(INoticeMessage message, IServiceScope scope)
{
try
{
const SendResult result = SendResult.OK;
await using var scope = _serviceProvider.CreateAsyncScope();
var m = scope.ServiceProvider.GetRequiredService<TelegramSenderSinkMessageCreator>().CreateNotifyMessage(message, _senderName);
await _sender.Send(m);