Exemplo n.º 1
0
        public IDisposable RegisterNotification(NotificationRequest request, IObserver <NotificationResponse> observer)
        {
            try
            {
                ApplyOverrides(request);

                foreach (var query in request.Queries)
                {
                    if (query.NotificationMechanism == NotificationMechanism.None)
                    {
                        query.NotificationMechanism = _defaultNotificationMechanism;
                    }

                    if (query.NotificationLevel == NotificationLevel.None)
                    {
                        query.NotificationLevel = _defaultNotificationLevel;
                    }

                    if (query.PollInterval <= 0)
                    {
                        query.PollInterval = _defaultPollInterval;
                    }

                    if (query.PollInterval != 0)
                    {
                        if (request.ResponsesPerSecond == 0 || (1000 / query.PollInterval) > request.ResponsesPerSecond)
                        {
                            request.ResponsesPerSecond = (double)1000 / (double)query.PollInterval;
                        }
                    }
                }

                if (request.NotificationsPerResponse == 0)
                {
                    request.NotificationsPerResponse = 1;
                }

                return(_provider.RegisterNotification(request, observer));
            }
            catch (Exception ex)
            {
                if (_log.IsErrorEnabled)
                {
                    _log.ErrorFormat("Failed to register notificaton request: {0}", ex.Message);
                }
                throw ex;
            }
        }