void NotificationService_Sending(object sender, NotificationEventArgs e) { if (_filter != null && !_filter(e.Message)) return; lock (_lock) { while (_sentMessages.Count > _maxMessages) _sentMessages.RemoveAt(0); _sentMessages.Add(e.Message); if (_blockAll) e.Message.Status = MessageStatus.Blocked; //to prevent it from sending } }
public async Task SendAsync(OperationContext context, NotificationMessage message) { message.AttemptCount++; var provider = _providers.FirstOrDefault(c => c.CanSend(message)); var args = new NotificationEventArgs(message, provider); if (Sending != null) { Sending(this, args); if (message.Status == MessageStatus.Blocked || message.Status == MessageStatus.Sent) { if (_log != null) _log.LogMessage(context, message); return; } provider = args.Provider; } Util.Check(provider != null, "Notification service failed to find notification provider for a message, message type: '{0}', media type: '{1}'.", message.Type, message.MediaType); await provider.SendAsync(context, message).ConfigureAwait(false); if (Sent != null) Sent(this, args); if (_log != null) _log.LogMessage(context, message); }