2022-01-31 13:56:30 +00:00
|
|
|
using Constants = ASC.Core.Configuration.Constants;
|
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
namespace ASC.Core.Common.Notify;
|
|
|
|
|
|
|
|
class PushSenderSink : Sink
|
2019-05-15 14:56:09 +00:00
|
|
|
{
|
2022-02-15 11:52:43 +00:00
|
|
|
private readonly ILog _logger;
|
|
|
|
private bool _configured = true;
|
2019-11-06 15:03:09 +00:00
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
public PushSenderSink(IServiceProvider serviceProvider)
|
|
|
|
{
|
|
|
|
_serviceProvider = serviceProvider;
|
|
|
|
_logger = _serviceProvider.GetService<IOptionsMonitor<ILog>>().CurrentValue;
|
|
|
|
}
|
2019-11-06 15:03:09 +00:00
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
private readonly IServiceProvider _serviceProvider;
|
2019-11-06 15:03:09 +00:00
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
public override SendResponse ProcessMessage(INoticeMessage message)
|
|
|
|
{
|
|
|
|
try
|
2019-05-15 14:56:09 +00:00
|
|
|
{
|
2022-02-15 11:52:43 +00:00
|
|
|
using var scope = _serviceProvider.CreateScope();
|
|
|
|
var tenantManager = scope.ServiceProvider.GetService<TenantManager>();
|
2019-09-18 12:14:15 +00:00
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
var notification = new PushNotification
|
|
|
|
{
|
|
|
|
Module = GetTagValue<PushModule>(message, PushConstants.PushModuleTagName),
|
|
|
|
Action = GetTagValue<PushAction>(message, PushConstants.PushActionTagName),
|
|
|
|
Item = GetTagValue<PushItem>(message, PushConstants.PushItemTagName),
|
|
|
|
ParentItem = GetTagValue<PushItem>(message, PushConstants.PushParentItemTagName),
|
|
|
|
Message = message.Body,
|
|
|
|
ShortMessage = message.Subject
|
|
|
|
};
|
2019-05-15 14:56:09 +00:00
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
if (_configured)
|
|
|
|
{
|
|
|
|
try
|
2019-05-15 14:56:09 +00:00
|
|
|
{
|
2022-02-15 11:52:43 +00:00
|
|
|
using var pushClient = new PushServiceClient();
|
|
|
|
pushClient.EnqueueNotification(
|
|
|
|
tenantManager.GetCurrentTenant().Id,
|
|
|
|
message.Recipient.ID,
|
|
|
|
notification,
|
|
|
|
new List<string>());
|
2019-05-15 14:56:09 +00:00
|
|
|
}
|
2022-02-15 11:52:43 +00:00
|
|
|
catch (InvalidOperationException)
|
2019-05-15 14:56:09 +00:00
|
|
|
{
|
2022-02-15 11:52:43 +00:00
|
|
|
_configured = false;
|
2022-02-14 21:02:57 +00:00
|
|
|
_logger.Debug("push sender endpoint is not configured!");
|
2019-05-15 14:56:09 +00:00
|
|
|
}
|
|
|
|
}
|
2022-02-15 11:52:43 +00:00
|
|
|
else
|
2019-05-15 14:56:09 +00:00
|
|
|
{
|
2022-02-15 11:52:43 +00:00
|
|
|
_logger.Debug("push sender endpoint is not configured!");
|
2019-05-15 14:56:09 +00:00
|
|
|
}
|
|
|
|
|
2022-02-15 11:52:43 +00:00
|
|
|
return new SendResponse(message, Constants.NotifyPushSenderSysName, SendResult.OK);
|
|
|
|
}
|
|
|
|
catch (Exception error)
|
2019-05-15 14:56:09 +00:00
|
|
|
{
|
2022-02-15 11:52:43 +00:00
|
|
|
return new SendResponse(message, Constants.NotifyPushSenderSysName, error);
|
2019-05-15 14:56:09 +00:00
|
|
|
}
|
|
|
|
}
|
2022-02-15 11:52:43 +00:00
|
|
|
|
|
|
|
private T GetTagValue<T>(INoticeMessage message, string tagName)
|
|
|
|
{
|
|
|
|
var tag = message.Arguments.FirstOrDefault(arg => arg.Tag == tagName);
|
|
|
|
|
|
|
|
return tag != null ? (T)tag.Value : default;
|
|
|
|
}
|
2019-05-15 14:56:09 +00:00
|
|
|
}
|