Пример #1
0
        public void AddOrUpdate_ThrowsForNullAddHandlerFunc()
        {
            var exception = Assert.Throws <ArgumentNullException>(
                () => _handlers.AddOrUpdate(
                    MessageMethod.Handshake,
                    addHandlerFunc: null,
                    updateHandlerFunc: oldHandler => oldHandler));

            Assert.Equal("addHandlerFunc", exception.ParamName);
        }
Пример #2
0
        public IDisposable RegisterNotification(NotificationRequest request, IObserver <NotificationResponse> observer)
        {
            try
            {
                if (_log.IsDebugEnabled)
                {
                    _log.DebugFormat("Registering notification request: {0}", request.Id);
                    foreach (var query in request.Queries)
                    {
                        _log.DebugFormat("Notification query: {0}, {1}", query.Name, query.Sql);
                    }
                }


                lock (SynchLock)
                {
                    if (RequestHandlers.Count == 0)
                    {
                        OnFirstSubscription();
                    }
                    var requestObserver = new RequestObserver(observer);
                    RequestHandlers.AddOrUpdate(request, requestObserver, (k, v) => requestObserver);

                    Parallel.ForEach(request.Queries, query =>
                    {
                        if (!_queryHandlers.ContainsKey(query.Name))
                        {
                            try
                            {
                                lock (_queryHandlers)
                                {
                                    T_Handler handler = new T_Handler();
                                    handler.Initialise(this, query);
                                    _queryHandlers.Add(query.Name, handler);
                                }
                            }
                            catch (Exception ex)
                            {
                                if (_log.IsErrorEnabled)
                                {
                                    _log.ErrorFormat("Failed to register notification query: {0} for request: {1} - {2}", query.Name, request.Id, ex.Message);
                                }
                            }
                        }
                        var queryHandler = _queryHandlers[query.Name];
                        var subscription = queryHandler.Subscribe(Observer.Create <Notification>(OnQueryNotification));
                        request.Subscriptions.Add(subscription);
                    });
                }

                return(new Unsubscriber(this, request));
            }
            catch (Exception ex)
            {
                if (_log.IsErrorEnabled)
                {
                    _log.ErrorFormat("Failed to register notification request: {0} - {1}", request.Id, ex.Message);
                }
                throw ex;
            }
        }